所有质心坐标组合之间的成对距离-Matlab

所有质心坐标组合之间的成对距离-Matlab,matlab,Matlab,下面的脚本根据图像中的对象的质心为其添加标签。如何在所有质心坐标组合(无重叠)之间预先设定成对距离,并在表格中返回结果?我正在考虑使用pdist2,但我不知道如何构造for循环 谢谢 脚本: clc; clear all; I = imread('E:/Elli.png'); imshow(I); BW =imbinarize(I); BW = imfill(BW, 'holes'); BW = bwlabel(BW); s = regionprops(BW,'Area', 'Boundi

下面的脚本根据图像中的对象的质心为其添加标签。如何在所有质心坐标组合(无重叠)之间预先设定成对距离,并在表格中返回结果?我正在考虑使用pdist2,但我不知道如何构造for循环

谢谢

脚本:

clc;
clear all;
I = imread('E:/Elli.png');
imshow(I);
BW  =imbinarize(I);
BW = imfill(BW, 'holes');
BW = bwlabel(BW); 

s = regionprops(BW,'Area', 'BoundingBox', 'Eccentricity', 'MajorAxisLength', 'MinorAxisLength', 'Orientation', 'Perimeter','Centroid');


imshow(BW)
hold on
for k = 1:numel(s)
    c = s(k).Centroid;
    text(c(1), c(2), sprintf('%d', k), 'HorizontalAlignment', 'center', 'VerticalAlignment', 'middle');
end
hold off 

与其使用在两个列表中查找点之间距离的
pdist2
,不如使用
pdist
获取单个列表中的所有点,并查找每对点之间的距离

在您的示例中,
s.Centroid
给出了一个以逗号分隔的点列表,因此我们需要使用以下命令将其强制为一个点数组:

现在,我们可以将此列表提供给
pdist

dist_list = pdist(point_list);
pdist
返回从质心
i
到质心
j
的距离列表,以便
i

{1->2}, {1->3}, {1->4}, ... {1->n}, {2->3}, {2->4}, ..., {2->n}, {3->4}, etc.
在有28个质心的示例中,这将为您提供总共378个距离

如果您希望将其转换为矩阵形式,其中元素
(i,j)
是从质心
i
到质心
j
的距离,您可以使用:

对于28个质心,这将为您提供完整的28x28距离矩阵

{1->2}, {1->3}, {1->4}, ... {1->n}, {2->3}, {2->4}, ..., {2->n}, {3->4}, etc.
dist_mat = squareform(dist_list);