How to select the highest number of branches/branch points?
Show older comments
good day I want to detect branches by applying 8 component and find the branch with highest pixel. i tried first with finding the branch points..but since there are many branch split i could not perform the operation i needed can somebody help me . so far i have tried this..with this i get a image with all branch points
bp =bwmorph(vesimg,'branchpoints')
[row column] = find(bp)
branchPts = [row column]
figure;imshow(vesimg);
hold on ;
plot(branchPts(:,2),branchPts(:,1),'+');
% branches = mn;
% branchesLabeled = bwlabel( branches, 8 )% label connected components
% sts = regionprops( branchesLabeled, 'Area', 'Perimeter' )
my input image is

Answers (1)
Sean de Wolski
on 10 Mar 2014
Edited: Sean de Wolski
on 10 Mar 2014
One way to approach this would be to:
- First, remove the branchpoints from the skeleton image (dilate them first to make sure you sever the branches in 8-connectivity on)
- Now loop over branch points and add them back in. Do a connected components analysis (bwconncomp) and look at the NumObjects field of the connected components structure. The number of branches connected to each branch point is the original number of objects (image without branchpoints) subtracted from the number of objects in the image with that branchpoint restored.
Pseudocode
skeletonize
branchpoints
dilate branchpoints
ccbranches = bwconncomp(dilated branchpoints)
number of branchpoints = ccbranches.NumObjects
vessel without branches = vessel
vessel without branches(dilate branchpoints) = 0
cc = bwconncomp(vessel without branches)
Noriginal = ccbranches.NumObjects;
for ii = 1:number of branch points
X = vessel without branches
X(branchii) = true;
ccii = bwconncomp(X);
numbranches(ii) = ccii-Noriginal
end
[maximumbranches,index] = max(numbranches)
12 Comments
Sean de Wolski
on 10 Mar 2014
My code was pseudocode outlining the idea.
vidya
on 11 Mar 2014
vidya
on 11 Mar 2014
Sean de Wolski
on 11 Mar 2014
That code was actually pretty-non-pseudoish. Copyu and paste it.
X = vessel_without_branches; % whatever variable this is,
vidya
on 11 Mar 2014
Sean de Wolski
on 11 Mar 2014
Apparently, you have not defined a variable branch so MATLAB is calling the obsolete Robust Control Toolbox function branch
Image Analyst
on 11 Mar 2014
Not all your branches extend out without overlap from the optic nerve. Many branches seems to connect with other branches, forming loops. What do you plan to do about that?
vidya
on 11 Mar 2014
Edited: Image Analyst
on 11 Mar 2014
Image Analyst
on 11 Mar 2014
By my count, if you cut out the optic disk, then you have only two major branches that are separate. In each of those two there are numerous other branches that are connected into loops. I don't see what your plan does. How are you going to count the number of vessels on each branch? Are you going to count the endpoints of the skeleton? This plan does not look well thought out, to me at least.
Sean de Wolski
on 11 Mar 2014
@IA, Are you referring to Vidya's plan or my pseudocode above?
vidya
on 12 Mar 2014
Categories
Find more on Image Arithmetic 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!