微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在python或MATLAB中从胸部CT图像中提取肺部部分

如何解决如何在python或MATLAB中从胸部CT图像中提取肺部部分

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

enter image description here

解决方法

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

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

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

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

enter image description here

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

,

我建议您将 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-身体分割。

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

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

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

3D lungs

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。