Select the largest object in an image
source link: https://www.codesd.com/item/select-the-largest-object-in-an-image.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
Select the largest object in an image
I am trying to find the the largest object in an image and remove any other objects in the image that are smaller than it.
This is what I have but I cannot get it to work.
l=bwlabel(BW);
%the area of all objects in the image is calculated
stat = regionprops(l,'Area','PixelIdxList');
[maxValue,index] = max([stat.Area]);
%remove any connected areas smaller than the biggest object
BW2=bwareaopen(BW,[maxValue,index],8);
subplot(5, 5, 4);
imshow(BW2, []);
I am working with digital mammograms such as these. I am trying to remove all objects from the image except for the breast region.
Use bwconncomp
instead since it returns the coordinate indexes for region in a separate cell, where the size of each is easily discerned:
>> BW = [1 0 0; 0 0 0; 0 1 1]; % two regions
>> CC = bwconncomp(BW)
CC =
Connectivity: 8
ImageSize: [3 3]
NumObjects: 2
PixelIdxList: {[1] [2x1 double]}
The PixelIdxList
field is a cell array with the indexes of coordinates for each region. The length of each array is the size of each region:
>> numPixels = cellfun(@numel,CC.PixelIdxList)
numPixels =
1 2
>> [biggestSize,idx] = max(numPixels)
biggestSize =
2
idx =
2
Then you can easily make a new image with just this component:
BW2 = false(size(BW));
BW2(CC.PixelIdxList{idx}) = true;
EDIT: From the comments, the need to crop the output image so that the region comes to the edges can be addressed with regionprops
using the 'BoundingBox' option:
s = regionprops(BW2, 'BoundingBox');
which gives you a rectangle s.BoundingBox
which you can use to crop with BW3 = imcrop(BW2,s.BoundingBox);
.
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK