How to find minimum distance between two cylindrical objects from binary image?
6 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
Naseeb Gill
am 13 Dez. 2017
Kommentiert: Akira Agata
am 6 Mai 2018
Hello,
I have this binary image
in which I have two cylindrical objects and I want to find out the minimum distance between these. How to do that? I have read this answer but I cannot understand this. Can anyone help to calculate minimum distance in a more simple way? Thanks.
0 Kommentare
Akzeptierte Antwort
Akira Agata
am 16 Dez. 2017
By using bwperim, regionprops and pdist2 functions, you can obtain the minimum distance and corresponding points on each object, like:
% Import your image and binarize
I = imread('aa.jpg');
BW = imbinarize(rgb2gray(I));
% Measure the minimum distance
BW2 = bwperim(BW,8);
stats = struct2table(regionprops(BW2,'PixelList'));
dist = pdist2(stats.PixelList{1},stats.PixelList{2});
[dmin,idx] = min(dist(:));
[r,c] = ind2sub(size(dist),idx);
pt1 = stats.PixelList{1}(r,:);
pt2 = stats.PixelList{2}(c,:);
% Show the result
imshow(BW)
hold on
plot([pt1(1) pt2(1)],[pt1(2) pt2(2)],'r-o','LineWidth',2)
disp(sprintf('Min. distance: %f [pixel]',dmin))
The minimum distance in pixel was measured to be:
Min. distance: 476.822818 [pixel]
4 Kommentare
mridul ghosh
am 6 Mai 2018
Bearbeitet: mridul ghosh
am 6 Mai 2018
Sir, pls tell what modification is required in your code in case the distances between more than two objects are needed in an image..
Akira Agata
am 6 Mai 2018
If your image has N objects, the minimum distance and corresponding points between i th and j th objects can be calculated by modifying the code as follows (note: 1 <= i,j <= N and i ~= j).
dist = pdist2(stats.PixelList{i},stats.PixelList{j});
[dmin,idx] = min(dist(:));
[r,c] = ind2sub(size(dist),idx);
pt1 = stats.PixelList{i}(r,:);
pt2 = stats.PixelList{j}(c,:);
Weitere Antworten (0)
Siehe auch
Produkte
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!