在Matlab中分割肺结节的最佳方法

时间:2014-04-19 10:20:57

标签: matlab image-processing medical

我正在使用Matlab中的图像处理。我试图仅分割出恶性(癌性)肺结节。最初我设法分割肺和所有可能的结节。

enter image description here

我使用了以下Matlab代码:

segM = % Segmented Lung 
% Segment nodules
BW = im2bw(segM, 0.55);

现在,我想应用一些过滤器来过滤所有良性(非癌)结节。我很长时间都在寻找解决方案,但我还没有找到任何方法继续下去。

这是分段肺:

enter image description here

更新

考虑大于3mm的结节大小是恶性的(癌性的)。如何从图像中计算出mm的大小?

1 个答案:

答案 0 :(得分:1)

运行之后:

% Segment nodules
BW = im2bw(segM, 0.55);

BW图像中有结节。现在,要根据大小过滤掉结节,可以在每个节点上插入一个椭圆并检查主轴长度。为此,您可以使用regionprops并要求MajorAxisLength

Region props将检测二进制图像的所有像素组(连接组件),并返回结构数组中每个组的信息。

尝试这样称呼:

nodules = regionprops(BW, 'MajorAxisLength');

它将返回一个struct array nodules,您可以在其中访问每个结节:

>> nodules(1)

ans = 

    MajorAxisLength: 4.6188

>> nodules(1).MajorAxisLength

ans =

    4.6188

这意味着第一个结节的主要长度为4.6188像素。如果您知道图像与实际数据的比例,则可以将该大小转换为毫米。例如,假设您知道现实世界中每个像素都等于0.4毫米。然后,您只需将该值乘以MajorAxisLength即可获得mm值(并过滤所需的结节)。

了解哪里是您刚刚过滤掉的结节也很有用。您可以向regionprops询问更多数据,例如CentroidBoundingBox。考虑MinorAxisLength以避免检测"线"也许这也是一个好主意。作为结节,或Eccentricity值告诉你"圈子如何"一组像素是。有关详细信息,请查看documentation

另请查看this other question,它可能有用: