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

时间:2019-06-01 10:21:58

标签: matlab

enter image description here下面的脚本根据图像的质心标记图像中的对象。我如何在所有形心坐标组合之间预成两两的距离(不重叠)并将结果返回到表中?我当时在考虑使用pdist2,但我不知道如何构造for循环。

谢谢。

脚本:

UPDATE products 
SET discount = 25 
WHERE category_id IN (1,4,5,6 etc..);

1 个答案:

答案 0 :(得分:2)

使用squareform而不是使用EXC_BAD_ACCESS来查找两个列表中点之间的距离。 pdist2将所有点集中在一个列表中,并找出每对之间的距离。

在您的示例中,pdist给出了逗号分隔的点列表,因此我们需要使用{{3}}将其强制为点数组:

s.Centroid

现在我们可以将此列表提供给point_list = vertcat(s.Centroid);

pdist

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

i < j

在您的示例中,有28个质心,这将使您总共有378个距离。

如果要以矩阵形式而不是元素{1->2}, {1->3}, {1->4}, ... {1->n}, {2->3}, {2->4}, ..., {2->n}, {3->4}, etc. 是从质心(i,j)到质心i的距离,则可以使用{{3}}:

j

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