how can find size of this objects in a binary image?
29 次查看(过去 30 天)
显示 更早的评论
hi I have a binary image and it has some objects...how can find size of this objects??Is there any toolbox in matlab for this??
0 个评论
采纳的回答
Meshooo
2014-9-25
编辑:Meshooo
2014-9-25
There are many ways to do that. One easy way is to use nnz (Number of nonzero matrix elements).
So if your image is I, then:
I = im2bw (I); %be sure that your image is binary
Total_White_Pixels = nnz(I); % total area based on number of white pixels
Hope that helps you.
3 个评论
Image Analyst
2021-10-23
编辑:Image Analyst
2021-10-23
@sylvester Fok, the units are "pixels" since nnz() gives a count of elements with non-zero values in an array. If you have the area of a pixel in real world units, like it's 5 square meters per pixel, then you can multiply by that spatial calibration factor, like I do in the attached demo.
Note that this answer just gives the area of all blobs added together, not of single blobs like I showed in my answer below. Essentially:
mask = grayImage > 128; % Create a logical binary image.
props = regionprops(mask, 'Area'); % Find areas of each blob and put into a structure.
allAreas = [props.Area]
Be sure to run my Image Segmentation Tutorial.
更多回答(4 个)
Meshooo
2014-9-25
编辑:Meshooo
2014-9-25
You can do it in few steps. If your input image is I then:
%Step 1: Label each object using the following code.
I = im2bw(I); % be sure your image is binary
L = bwlabel(I); % label each object
%Step 2: see the label of each object
s = regionprops(L, 'Centroid');
imshow(I)
hold on
for k = 1:numel(s)
c = s(k).Centroid;
text(c(1), c(2), sprintf('%d', k), ...
'HorizontalAlignment', 'center', ...
'VerticalAlignment', 'middle');
end
hold off
% Step 3: find the area of the object you want using its label
Obj = (L == 1) % 1 is the label number of the first object.
figure, imshow(Obj);
Area = regionprops(Obj,'Area') % the answer
Now, for example if you want to find the area of object number 3, the just change number 1 to 3.
Obj = (L == 3) where 3 is the label number of the third object.
Area is the number of pixels in the object.
Hope that will help.
Image Analyst
2014-9-24
编辑:Image Analyst
2021-10-23
Of course sara. I thought you've already run across my image segmentation tutorial by now. Run it here http://www.mathworks.com/matlabcentral/fileexchange/?term=authorid%3A31862, replacing the coin image with yours. It will tell you the areas, centroids, bounding boxes, coordinates of the perimeter, etc.
Basically, it's
mask = grayImage > 128; % Create a logical binary image.
props = regionprops(mask, 'Area'); % Find areas of each blob and put into a structure.
allAreas = [props.Area]
0 个评论
另请参阅
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!