Hi, im trying to get the number of objects in an binary image but it return the wrong answer (it should be 6 but it return 31). here is the code and the image:
I=imread('2.jpg');
I_BW=im2bw(I,0.87);
I1=imcomplement(I_BW);
[L,n]=bwlabel(I1);
bw.PNG

 Réponse acceptée

Image Analyst
Image Analyst le 15 Déc 2019

2 votes

Try this:
bw = imread('bw.png');
if ndims(bw) > 1
bw = bw(:,:,1);
end
% Threshold
bw = bw > 128;
subplot(1, 2, 1);
imshow(bw, []);
% Fill holes
bw = imfill(bw, 'holes');
% Get areas
props = regionprops(bw, 'Area');
sortedAreas = sort([props.Area], 'descend')
% Looks like we need to throw away any blobs less than 1000 pixels or so
bw = bwareaopen(bw, 1000);
subplot(1, 2, 2);
imshow(bw);
% Count the blobs
[labeledImage, numBlobs] = bwlabel(bw);
fprintf('Found %d shapes.\n', numBlobs);

Plus de réponses (1)

KALYAN ACHARJYA
KALYAN ACHARJYA le 15 Déc 2019
Modifié(e) : KALYAN ACHARJYA le 15 Déc 2019

1 vote

Yes, the correct answer is 31, not 6. Actually it counts the all white pixels, blobs (having 1 white pixel with sourounding by black pixels also), there are so many blobs in 4th objects.
If you are looking for 6 answer only, then you have to remove all those tiny small blobs and apply same (using morphological operation, imdilate or imerode).
May it helps!

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by