How to measure the average thickness at the center region of binary image
6 ビュー (過去 30 日間)
古いコメントを表示
Timilehin Oyinloye
2023 年 3 月 21 日
コメント済み: Timilehin Oyinloye
2023 年 3 月 22 日
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.
0 件のコメント
採用された回答
Antoni Garcia-Herreros
2023 年 3 月 21 日
Hello Timilehin,
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
2023 年 3 月 21 日
Basically you compute the Euclidean Distance transform and multiply it by the skeleton of the blobs.
See attached demo:
0 件のコメント
参考
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!