如何选择面积最大的物体?

时间:2013-12-22 02:22:02

标签: matlab object image-processing matrix area

我使用bwconvhull来检测图像的某个部分,正如您在图像中看到的那样,有许多具有某些质心的对象。我想要做的是检测具有最大面积的对象(左起第一个大)并忽略其他对象。我应该遵循哪种方法?

我将非常感谢你的帮助。以下是代码(由于我还在处理它,因此非常粗略地写了。抱歉给您带来任何不便)

CH_objects = bwconvhull(c,'objects');
imshow(CH_objects);
title('Objects Convex Hull');
bwarea(CH_objects)
Ilabel = bwlabel(CH_objects,8);
stat = regionprops(Ilabel,'centroid');
imshow(CH_objects);
hold on;
for x = 1:numel(stat)
    plot(stat(x).Centroid(1),stat(x).Centroid(2),'ro');
end

Here是图片。

2 个答案:

答案 0 :(得分:10)

在regionprops中使用AreaPixelIdxList,这意味着要编辑到以下行:

stat = regionprops(Ilabel,'Centroid','Area','PixelIdxList');

最大区域及其结构索引由

给出
[maxValue,index] = max([stat.Area]);

每个区域的像素线性索引由`stat.PixelIdxList'给出,您可以使用它们删除该给定区域(我假设这意味着为它分配零)

YourImage(stat(index).PixelIdxList)=0;

答案 1 :(得分:2)

忽略除一个以外的所有其他人。
与上述答案类似。 但是,除了删除大区域外,我删除了除大区域之外的所有区域。

stat=regionprops(label,'Centroid','Area','PixelIdxList');
[maxValue,index] = max([stat.Area]);
[rw col]=size(stat);
for i=1:rw
    if (i~=index)
       BW(stat(i).PixelIdxList)=0; % Remove all small regions except large area index
    end
end
figure,imshow(BW);