Discover MakerZone

MATLAB and Simulink resources for Arduino, LEGO, and Raspberry Pi

Learn more

Discover what MATLAB® can do for your career.

Opportunities for recent engineering grads.

Apply Today

How to find length of branch in a skeleton image?

Asked by Kirti on 14 Mar 2013

I have skeleton image as shown in following link. I have to find the length of branch or branches in a skeleton image. I have tried bwtraceboundry function for checking the connectivity but i did not get the any value. Also, i have tried using repmat as follows d = [ 1 0; -1 0; 1 1; 0 1; -1 1; 1 -1; 0 -1; -1 -1]; Then the neighbors of location loc =[i j] are neighbors = d+repmat(loc,[8 1]); for finding neighbours of a pixels. 'neighbors' giving me 8 pixel coordinates. But i want to check connectivity of white line for finding branch length. image link: http://www.flickr.com/photos/92388309@N03/8555556765/in/photostream

Can any one help me in this.

0 Comments

Kirti

Products

No products are associated with this question.

2 Answers

Answer by Teja Muppirala on 14 Mar 2013

You can first find the branch points and endpoints using BWMORPH, and then call BWDISTGEODESIC to get the distance from the branches. Assuming your image is binary and called "I", this is all it takes:

It = bwmorph(I,'thin','inf');
B =  bwmorph(It,'branchpoints');
[i,j] = find(bwmorph(It,'endpoints'));
D = bwdistgeodesic(It,find(B),'quasi');
imshow(I);
for n = 1:numel(i)
    text(j(n),i(n),[num2str(D(i(n),j(n)))],'color','g');
end

1 Comment

Kirti on 14 Mar 2013

Thank you for your reply. I am using MatLab 7.9.0(R2009b)and bwdistgeodesic is not available. Can we do that without using function, just by checking connectivity from end point to branch point.

Teja Muppirala
Answer by Image Analyst on 14 Mar 2013

Find the branchpoints using bwmorph. Then subtract that image from the original to get disconnected branches. Then call regionprops(binaryImage, 'area') to get the length of all the branches.

3 Comments

Kirti on 14 Mar 2013

Thanks Image Analyst. If I substract branchpoints from original image does it not break the line on which branches are located and consider that line as a branch while calculating area using regionprops?

Image Analyst on 14 Mar 2013

Yes it does. If you want to disconnect only short branches then you need to look at the angle to reconnect longer branches that became disconnected/broken. Do a web search on "edge linking". http://www.csse.uwa.edu.au/~pk/Research/MatlabFns/#edgelink

Cedric Wannaz on 14 Mar 2013

Thank you for the link, this seems to be a great resource!

Image Analyst

Contact us