how to build a graph from a skeleton
조회 수: 17 (최근 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' )

댓글 수: 0
참고 항목
카테고리
Help Center 및 File Exchange에서 Graph and Network Algorithms에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!