How to count pixels/measure area in binary image?
4 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
Andrew Ferguson
am 6 Jan. 2023
Beantwortet: Kevin Holly
am 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
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 Kommentare
Akzeptierte Antwort
Kevin Holly
am 6 Jan. 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 Kommentare
Weitere Antworten (1)
Matt J
am 6 Jan. 2023
Bearbeitet: Matt J
am 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.
0 Kommentare
Siehe auch
Kategorien
Mehr zu Image Segmentation and Analysis finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!