Search code examples
matlabobjectimage-processingmatrixarea

how to select the object with the largest area?


I have used bwconvhull to detect a certain part of the image, as you can see in the image, there are number of objects with certain centroids. What I want to do is to detect the object with the largest area (1st big one from the left) and neglect the others.

Which method should I follow?

I will be very thankful for your help. The following is the code (it's very roughly written as I am still working on it. Sorry for any inconvenience in advance)

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 is the image.


Solution

  • use Area and PixelIdxList in regionprops, this means to edit the to the following line:

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

    The maximum area and it's struct index is given by

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

    The linear index of pixels of each area is given by `stat.PixelIdxList', you can use them to delete that given area (I assume this means to assign zeros to it)

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