Shortest path in grayscale image

조회 수: 2 (최근 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 )

Community Treasure Hunt

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

Start Hunting!

Translated by