Effacer les filtres
Effacer les filtres

How to find the endpoint?

12 vues (au cours des 30 derniers jours)
ZWY
ZWY le 8 Juin 2022
Commenté : ZWY le 10 Juin 2022
Hi, i have an image and wanted to find the location of endpoints as shown in red circle.
I am using the
bw=bwmorph(bw,'endpoints')
however, it returns "0" instead of the location of endpoints.
How can I do with this? Thank you.
  2 commentaires
Rik
Rik le 8 Juin 2022
From what I recall, you need to skeletonize your image first.
ZWY
ZWY le 10 Juin 2022
Thanks Rik.

Connectez-vous pour commenter.

Réponse acceptée

DGM
DGM le 8 Juin 2022
Modifié(e) : DGM le 8 Juin 2022
% image recovered from screenshot
A = imread('vessel.png');
A = A>128; % binarize
% skeletonize
B = bwskel(A,'minbranchlength',50);
% fill loops
B = imfill(B,'holes');
% skeletonize to get rid of filled loops
B = bwskel(B,'minbranchlength',50);
imshow(B) % display interpolation makes fine lines look spotty
% get endpoints as a logical image
endpts = bwmorph(B,'endpoints');
imshow(endpts) % again, display interpolation hides most of the dots
That result can be used for logical indexing if needed. If for some reason, you can't use it directly and need indices instead, you can use find().
% if you really truly need indices instead
endptidx = find(endpts)
endptidx = 21×1
807 124117 134946 246304 371291 453988 479473 492705 497657 526278
  6 commentaires
DGM
DGM le 10 Juin 2022
I'm not sure if your x,y for the reference center are flipped. it's outside the image region.
% image recovered from screenshot
A = imread('vessel.png');
A = A>128; % binarize
% skeletonize
B = bwskel(A,'minbranchlength',50);
% fill loops
B = imfill(B,'holes');
% skeletonize to get rid of filled loops
B = bwskel(B,'minbranchlength',50);
% get endpoints as a logical image
endpts = bwmorph(B,'endpoints');
% these might be flipped
x=500;
y=1000;
[endpt_Y endpt_X] = find(endpts); %[row col]
% this is the square of the euclidean distance
% if all you need is to optimize distance, there's no need for sqrt()
% if you actually need the distance for something else, you can add it.
Dsquared = sum(([endpt_Y endpt_X] - [y x]).^2,2);
% find most distal endpoint
[~,mxidx] = max(Dsquared);
mostdistal = [endpt_X(mxidx) endpt_Y(mxidx)]
mostdistal = 1×2
818 19
% plot some stuff
imshow(B); hold on
plot(x,y,'x','markersize',20) % specified centroid
plot(mostdistal(1),mostdistal(2),'o','markersize',20)
ylim([0 1050]) % adjust axes to show marker
ZWY
ZWY le 10 Juin 2022
I got it. Thanks all for helping, really appreciate it!

Connectez-vous pour commenter.

Plus de réponses (0)

Catégories

En savoir plus sur Matrices and Arrays dans Help Center et File Exchange

Produits


Version

R2021b

Community Treasure Hunt

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

Start Hunting!

Translated by