【问题标题】:How to extract lungs part from the chest CT image in python or MATLAB如何在python或MATLAB中从胸部CT图像中提取肺部部分
【发布时间】:2021-02-14 04:17:56
【问题描述】:

我有 CT 扫描图像,我想使用 python 或 MATLAB 仅提取(分割)肺部分。

【问题讨论】:

  • 肺是哪一部分?白色部分还是白色部分中的东西?
  • @lan Chu,白色周围的部分是肺。我有 PNG 图片。
  • @Abhi25t 你能分享你的 MATLAB 代码吗,我会试试看它是否对我有用。
  • 嘿,爬山分割对你有用吗?
  • 如果当前的答案是你想要的,那么你应该接受这个答案。否则,您应该解释为什么它不能回答您的问题,以便我们可以再次尝试提供帮助。

标签: python image-processing computer-vision opencv-python medical-imaging


【解决方案1】:

在 MATLAB 中对我有用的解决方案是 Hill Climbing algorithm。这是MATLAB implementation。它使用无监督机器学习算法:k-means。您将需要根据您的要求尝试不同数量的段。请参见下面的示例:

从 MATLAB Central 下载上述代码(文件 HillClimbingSegment.mRGB2Lab.m)并将其放置在您的工作区中。然后你可以这样分割:

image_path = 'CT.jpg';
segmented_img = HillClimbingSegment(image_path,4);

其中第二行中的第二个参数 (4) 是所需段的数量。

在我的图像中,仅使用 4 个片段,可以观察到右肺的异常,但右肺顶部的另一个器官与肺合并。使用 7 段,将其分开。使用 7-9 段可提供最佳视图。超过 9 会导致混乱。

【讨论】:

    【解决方案2】:

    我建议您将 png 转换为 NIfTI 文件 (nii),然后使用 python。 对于转换,您可以使用它:Convert .png files to .nii (NiFti files)

    之后就可以加载图片使用了

    nii = nibabel.load(path to the nifti file)
    

    获取 numpy 数组

    np_array = nii.get_fdata()
    

    按 -500 到 2000 之间的过滤阈值对 nifti 文件中的所有正文进行分段。 身体内外的所有空气都会被1-身体分割。

    然后取最大的连通分量,从分割中去掉(就是比肺还大的外界空气)

    air_seg = skimage.measure.label(air_seg)
    largest_connected_air = air_seg == numpy.argmax(nump.bincount(air_seg.flat)[1:]) + 1
    

    现在再做一次以获取肺部。 这是我得到的:

    3D lungs

    如果您需要更多解释,请回复。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-09-20
      • 2011-07-08
      • 1970-01-01
      • 1970-01-01
      • 2011-10-05
      • 2011-02-19
      • 1970-01-01
      • 2020-10-08
      相关资源
      最近更新 更多