Shortest path in grayscale image

1 次查看(过去 30 天)
How can I find the path with least intenzity between two points (A and B) like on image:

采纳的回答

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