how to build a graph from a skeleton
19 次查看(过去 30 天)
显示 更早的评论
i got a 2D skeleton from a binary vessel map after applying thinning. Now i would like to build an undirected graph from this skeleton with nodes and edges linked together.
2 个评论
Kamya H
2021-7-7
Hey! I'm facing the same problem! Did you manage to find any answers/code to this question? tried skel2graph-3d too, but I'm getting quite a lot of errors!
回答(2 个)
Mike Wharton
2023-10-18
编辑:Mike Wharton
2023-10-18
Try using this toolbox from Steve Eddins https://www.mathworks.com/matlabcentral/fileexchange/53614-image-graphs
There is a blog post which explains what to do https://blogs.mathworks.com/steve/2015/12/14/image-based-graphs/
I think it is essentially something like this:
g = binaryImageGraph(bw);
figure
plotImageGraph(g)
This should work with a skeletonised binary image.
0 个评论
George Abrahams
2024-1-2
% Load binary vessel map and skeletonize.
img = imread( "binaryVesselMap.png" );
img = bwskel( img );
% Construct an undirected graph from the skeletonized image.
G = bwgraph( img );
% For visual clarity and to save RAM, delete isolated nodes (those with no
% edges).
G = rmnode( G, find( ~img ) );
% Plot the graph, mimicking the layout of the source image.
[ Y, X ] = ind2sub( size( img ), find( img ) );
h = plot( G, 'XData', X(:), 'YData', Y(:), 'NodeLabel', [] );
axis tight equal
set( gca, 'YDir','reverse' )
% As an example application, use graph algorithms to find and highlight the
% longest branch of the graph. Distances are quasi-Euclidean.
d = distances( G );
d( isinf( d ) ) = -Inf;
[ ~, I ] = max( d(:) );
[ row, col ] = ind2sub( size( d ), I );
P = shortestpath( G, row, col );
highlight( h, P, 'NodeColor', 'r' )
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/1580951/image.png)
0 个评论
另请参阅
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!