How to measure the average thickness at the center region of binary image

조회 수: 6 (최근 30일)
I have a binary image that has various objects (white pixels) in various positions. I want to determine the average thickness of each white object in the binary image at its center (as shown in the third image with red letters). I appreciate your support.

채택된 답변

Antoni Garcia-Herreros
Antoni Garcia-Herreros 2023년 3월 21일
Hello Timilehin,
You can refer to this thread for more info, but this should do the trick.
lear all
close all
I=imread("image.jpeg");
if length(size(I))>2
I=rgb2gray(I);
end
I=imbinarize(I);
I = imfill(I, 'holes');
BW2 = bwareaopen(I, 10); % Retain only large objects
r=regionprops(BW2,'Area','Centroid');
ApproxThick=zeros(size(r));
MeanCentralThick=ApproxThick;
Icopy=I;
for i=1:length(r) % Loop through all your objects
bwi = bwareafilt(Icopy, 1);
Icopy=logical(Icopy-bwi); % Subtract the objects from the image
ri=regionprops(bwi,'Area','Centroid');
BWSkel=bwskel(bwi);
ApproxThick(i)=ri.Area/sum(BWSkel(:)); % This would give you a good idea of the mean thickness of all the object
connec=bwconncomp(BWSkel);
[row,col] = ind2sub(connec.ImageSize,cell2mat(connec.PixelIdxList));
Mask=false(size(BWSkel)); % Mask of the skeletonize image containing only the central region
idxmin=floor(sum(BWSkel(:))*0.4); % Adjust these values to obtain the central region
idxmax=floor(sum(BWSkel(:))*0.6);
Mask(row(idxmin:idxmax),col(idxmin:idxmax))=BWSkel(row(idxmin:idxmax),col(idxmin:idxmax));
EuclImage = bwdist(~bwi); % Euclidean distance
Thickness=EuclImage(Mask);
MeanCentralThick(i)=2*mean(Thickness); % Average thickness of the central region
end
Hope this helps!

추가 답변 (1개)

Image Analyst
Image Analyst 2023년 3월 21일
Basically you compute the Euclidean Distance transform and multiply it by the skeleton of the blobs.
See attached demo:

제품


릴리스

R2020a

Community Treasure Hunt

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

Start Hunting!

Translated by