我正在使用Matlab中的图像处理。我试图仅分割出恶性(癌性)肺结节。最初我设法分割肺和所有可能的结节。
我使用了以下Matlab代码:
segM = % Segmented Lung
% Segment nodules
BW = im2bw(segM, 0.55);
现在,我想应用一些过滤器来过滤所有良性(非癌)结节。我很长时间都在寻找解决方案,但我还没有找到任何方法继续下去。
这是分段肺:
更新
考虑大于3mm的结节大小是恶性的(癌性的)。如何从图像中计算出mm的大小?
答案 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
询问更多数据,例如Centroid
或BoundingBox
。考虑MinorAxisLength
以避免检测"线"也许这也是一个好主意。作为结节,或Eccentricity
值告诉你"圈子如何"一组像素是。有关详细信息,请查看documentation。
另请查看this other question,它可能有用: