How to find the endpoint?
    11 Ansichten (letzte 30 Tage)
  
       Ältere Kommentare anzeigen
    
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 Kommentare
Akzeptierte Antwort
  DGM
      
      
 am 8 Jun. 2022
        
      Bearbeitet: DGM
      
      
 am 8 Jun. 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)
6 Kommentare
  DGM
      
      
 am 10 Jun. 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)]
% 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
Weitere Antworten (0)
Siehe auch
Kategorien
				Mehr zu Spline Postprocessing finden Sie in Help Center und File Exchange
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!






