我使用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是图片。
答案 0 :(得分:10)
在regionprops中使用Area
和PixelIdxList
,这意味着要编辑到以下行:
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);