How to count pixels/measure area in binary image?
4 visualizzazioni (ultimi 30 giorni)
Mostra commenti meno recenti
Andrew Ferguson
il 6 Gen 2023
Risposto: Kevin Holly
il 6 Gen 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.![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/1254877/image.png)
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/1254877/image.png)
% Clear variables, figures, screen
clear all
close all
clc
% Read in image, display image
image = imread('image.png');
imshow(image)
% Convert image to grayscale
image_gray = rgb2gray(image);
figure
imshow(image_gray)
% Convert image to binary
threshold = 0.65;
image_binary = imbinarize(image_gray,threshold);
figure
imshow(image_binary)
% Calculate specific properties of image
stats = regionprops('table',image_binary,'Centroid','MajorAxisLength','MinorAxisLength','ConvexArea','ConvexHull','ConvexImage');
% Create subplot of original & binary image
figure
subplot(1,2,1);
imshow(image)
subplot(1,2,2);
imshow(image_binary)
% Create convex hull around objects
CH_objects = bwconvhull(image_binary,'objects');
figure
imshow(CH_objects);
title('Objects Convex Hull');
2 Commenti
Risposta accettata
Kevin Holly
il 6 Gen 2023
img = imread("sample.png");
img = im2bw(img);
imshow(img)
se = strel('sphere',15);;
circles=imopen(~img,se);
imshow(circles)
se = strel('sphere',2);
spacebetween = imopen(~img-circles,se);
figure
imshow(spacebetween)
rp = regionprops('table',spacebetween>0,"Centroid", "Area")
rp.Area
0 Commenti
Più risposte (1)
Matt J
il 6 Gen 2023
Modificato: Matt J
il 6 Gen 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.
0 Commenti
Vedere anche
Categorie
Scopri di più su Image Segmentation and Analysis in Help Center e File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!