Shortest path in grayscale image

조회 수: 4 (최근 30일)
Zuzana Vavrova
Zuzana Vavrova 2017년 5월 25일
답변: George Abrahams 2023년 12월 18일
How can I find the path with least intenzity between two points (A and B) like on image:
  댓글 수: 1
John D'Errico
John D'Errico 2017년 5월 25일
Not a question about MATLAB, unless this is a doit4me.

댓글을 달려면 로그인하십시오.

채택된 답변

Image Analyst
Image Analyst 2017년 5월 25일
Or, if you know the locations of A and B you can use Dynamic Programming or something like A*

추가 답변 (1개)

George Abrahams
George Abrahams 2023년 12월 18일
Hi Zuzana. Late to the party, but one way would be to use my bwgraph function on File Exchange. See the example below.
% im is the image intensity, mask is the allowed pixels.
im = imresize( im2gray( imread( 'eyeScan.jpg' ) ), [ 249 249 ] );
mask = logical( insertShape( zeros( size( im ) ), ...
'FilledCircle', [ 125 125 118 ], 'Color', 'white', ...
'Opacity', 1, 'SmoothEdges', false) );
mask = mask(:,:,1);
% Construct the graph of connected non-zero pixels, use im as weights.
G = bwgraph( mask, NodeWeights=im );
% Calculate the linear indices of the start and end pixels, which are
% used to reference the respective node in G.
sz = size( im );
source = sub2ind( sz, 152, 86 );
target = sub2ind( sz, 132, 221 );
% Find the shortest path between the 2 nodes.
P = shortestpath( G, source, target );
% Calculate the respective pixels for each node in the path.
[ Pi, Pj ] = ind2sub( sz, P );
% Plot the image and path.
figure
imshow( im, [] )
hold on
plot( Pj, Pi, 'r-', 'LineWidth', 1 )

카테고리

Help CenterFile Exchange에서 Graph and Network Algorithms에 대해 자세히 알아보기

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by