3 views (last 30 days)

Show older comments

I am needing to find the distance of the line outlined in red. I was thinking i could filter the photo and find the line distance by pixel count but havent been able to succeed this way. Anything advice is much appreciated.

The original photo and the edited version are both attached.

The blue line drawn on the original photo is the same as the red boundary on the edited version. It is just for reference.

my code is below-

clear

clc

close all

I = imread('ss3.png');

% imshow(I)

hold on

% J=imcrop(I)

J=rgb2gray(I);

BW1=edge(J,'sobel',.009,'horizontal');

mask = imclose(BW1, true(7));

mask = conv2(double(mask), ones(3), 'same') > 3; % Adjust number to control the size of the new mask.

mask = imfill(mask, 'holes'); % Remove any interior holes

%imshow(mask)

%Auto crop image using set points----------------------------------------

I2 = imcrop(mask,[407.51 0.51 83.98 1037.98]);

imshow(I2,'InitialMagnification', 'fit')

%boundary outline and trace -----------------------------------------

[B,L] = bwboundaries(I2,'noholes');

imshow(label2rgb(L, @jet, [.5 .5 .5]))

hold on

for k = 1:length(B)

boundary = B{k};

plot(boundary(:,2), boundary(:,1), 'r', 'LineWidth', 0.5)

end

Image Analyst
on 22 Jul 2021

J. Alex Lee
on 21 Jul 2021

Assuming that the boundary points are ordered well (adjacently), then you can calculate the cummulative square distance between adjacent points to get the approximate arclength along the curve

x = boundary(:,1);

y = boundary(:,2);

dx = diff(x);

dy = diff(y);

d = sqrt(dx.^2+dy.^2);

L = sum(d)

Walter Roberson
on 21 Jul 2021

The exact distance along a curved line is very likely to be an irrational number.

You have approximations of curves. What distance you measure depends upon the approximation model you use. The more accurately you approximate, the more the answer can change.

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

Start Hunting!