How to count pixels/measure area in binary image?
10 views (last 30 days)
Show older comments
Answered: Kevin Holly on 6 Jan 2023
I have an image (attached) where I want to count the number of pixels/measure the area of pixels that are in the space between the circles. I also want to individually count each sapce between the circles as its own element (as opposed to counting all the total spaces as one element). I have looked thorough the documentation on regionprops and am thinking perhaps I could attempt to get this using maybe ConvexHull in regionprops, but I am not really sure. I was thinking also maybe I could use bwconvhull, but when I tried to apply it I just got a blank image. I apologize as I am new to iamge processing in MATLAB, but could anyone provide guidance on how I could best achieve my goal? My current code is attached below, which is really just converting the image to binary and trying to use bwconvhull.
% Clear variables, figures, screen
% Read in image, display image
image = imread('image.png');
% Convert image to grayscale
image_gray = rgb2gray(image);
% Convert image to binary
threshold = 0.65;
image_binary = imbinarize(image_gray,threshold);
% Calculate specific properties of image
stats = regionprops('table',image_binary,'Centroid','MajorAxisLength','MinorAxisLength','ConvexArea','ConvexHull','ConvexImage');
% Create subplot of original & binary image
% Create convex hull around objects
CH_objects = bwconvhull(image_binary,'objects');
title('Objects Convex Hull');
Kevin Holly on 6 Jan 2023
img = imread("sample.png");
img = im2bw(img);
se = strel('sphere',15);;
se = strel('sphere',2);
spacebetween = imopen(~img-circles,se);
rp = regionprops('table',spacebetween>0,"Centroid", "Area")
More Answers (1)
Matt J on 6 Jan 2023
Edited: Matt J on 6 Jan 2023
Let's consider 3 regions B (the background, which you have as a binary image), C (the circles), and D (the connective arms between the circles that you are trying to obtain). You can use bwlalphaclose in this FEX download,
to seal the gaps between the circles, giving you B|D. The complement of B|D gives you the circles C. Once you have C, you obtain the region of interst D according to ~(B|C).
I could demonstrate this for you if you would attach image_binary as suggested above.
Find more on Image Arithmetic in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!Start Hunting!