How can I measure the length of these line segments in this image mask?

10 views (last 30 days)
I have a binary image (BW_roi.mat attached) like this. And I wanted to measure the length of every line segment.
I tried the solution given in this link hough-transform. But it does not work out for me. It just measured the length of some lines as shown below.
I tried the other code
boundaries = bwboundaries(BW);
patchno=1
b = boundaries{patchno}; % Extract N by 2 matrix of (x,y) locations.
x = b(:, 1);
y = b(:, 2);
It though give me points (x,y) that make up these polygons. But how can I get the length of the sides of these patches?

Answers (1)

yanqi liu
yanqi liu on 5 Feb 2021
clc; clear all; close all;
load BW_ROI.mat
b = BW_roi_nodot;
b = ~b;
% measure the length of every line segment
% b([1 end],:) = 1;
% b(:,[1 end]) = 1;
b = logical(b);
b2 = imfill(b, 'holes');
b3 = b2 - b;
b3 = logical(b3);
b4 = imclose(b3, strel('disk', 5));
b5 = imopen(b2, strel('square',7));
b6 = b2 - b5;
b6 = logical(b6);
[L, num] = bwlabel(b3);
stats = regionprops(L,'ConvexHull');
figure; imshow(BW_roi_nodot); hold on;
for i = 1 : num
p = stats(i).ConvexHull;
plot(p(:,1), p(:,2),'LineWidth',2);
end
  1 Comment
Masood Salik
Masood Salik on 5 Feb 2021
The code directly give us the boundries of the part. We don't need further refinement.
boundaries = bwboundaries(BW_roi_nodot);
I need a code or algoritam that find the vertices of the polygons, generated by bwboundries. Then afterward I can find the lengths easily.

Sign in to comment.

Products


Release

R2019b

Community Treasure Hunt

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

Start Hunting!