- Crop ROI
- Segment your image
- Obtain the boundaries and calculate thickness
How can i detect the boundary using bwtraceboundary function ??
3 views (last 30 days)
Show older comments
I want to detect the seperate two boundaries (inner and outer boundary) in our case.. I want to seperately detect inner and outer boundary and calculate the distance between them along the boundaries. In the image.png, I shown the exmple how will i want to do seperate the boundary (red and green colour boundary) which i want to seperate into inner and outer boundary. please give me a solution so i can automatically select the starting point and store the boundary data into two matrix.
Thank you for help
0 Comments
Answers (2)
Antoni Garcia-Herreros
on 2 May 2023
Hello Surendra,
But the general idea would be to:
clear all
close all
I=imread('Original_image (2).png');
%% Crop region
Icrop=I(1:720,400:600);
%% Segment
BW=~imbinarize(Icrop);
se = strel('disk',5);
BWc=imclose(BW,se);
skelImage = bwskel(BWc, 'MinBranchLength', 10); % First guess. Strangely bwskel() doesn't seem to have any short spurs, no matter what MinBranchLength is.
imshow(imoverlay(BWc, skelImage, 'r'));
title('Binary image with skel')
%% Obtain distances
edtImage = bwdist(~BWc); %Distance of to nearest 0 value
radii = edtImage(skelImage); % Extract the distances only along the skeleton
% These are the half widths. Multiply by 2 to get the full widths.
averageWidth = 2 * mean(radii)
%% Find the boundaries
E=edge(BWc); % Find the edges
CC = bwconncomp(E); % Isolate the different components
[rowOut1,colOut1]=ind2sub(size(E),CC.PixelIdxList{1,1});
Pout1=[rowOut1,colOut1]; % Pixels forming Outer boundary 1
[rowIn,colIn]=ind2sub(size(E),CC.PixelIdxList{1,2});
Pin=[rowIn,colIn]; % Pixels forming Inner boundary 1
[rowOut2,colOut2]=ind2sub(size(E),CC.PixelIdxList{1,3});
Pout2=[rowOut2,colOut2]; % Pixels forming Outer boundary 2
figure(2)
imshow(BWc)
hold on
plot(Pin(:,2),Pin(:,1),'.','MarkerSize',2)
plot(Pout1(:,2),Pout1(:,1),'.','MarkerSize',2)
plot(Pout2(:,2),Pout2(:,1),'.','MarkerSize',2)
title('Boundaries')
Hope this helps
3 Comments
Image Analyst
on 5 May 2023
Then why did you accept the answer? It's not how I would have done it. I don't know whether to give you my solution or not -- maybe you've already solved it yourself since it's rather easy if you use bwboundaries instead of bwtraceboundary. Let me know if you need my solution.
Image Analyst
on 5 May 2023
Look at the documentation for bwboundaries. If you get all the output variables, you'll know which are exterior or interior/nested boundaries.
0 Comments
See Also
Categories
Find more on Parallel Computing Fundamentals 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!