如何根据matlab中另一个坐标矩阵中各点之间的距离对坐标矩阵进行排序?

时间:2018-06-12 12:06:16

标签: image matlab image-processing matrix

我正在使用matlab的内置函数Procrustes来查看两个图像之间的旋转平移和缩放。但是,我只是使用图像中最亮点的坐标,并围绕图像中心旋转这些坐标。 Procrustes比较两个矩阵,并为您提供旋转,平移和缩放。但是,如果矩阵的顺序相同,则procrustes只能正常工作。

我获得了一个图像和一个单独的比较坐标矩阵。最终目标是找出与坐标矩阵相比旋转,平移和缩放图像的程度。我可以使用Procrustes,但我需要正确排序从图像中找到的坐标以匹配比较坐标矩阵中的顺序。我的想法是比较坐标矩阵中每个可能的点组合之间的距离,并将其与我在图片中找到的坐标进行比较。我只是不知道如何编写这段代码,因为如果有n个坐标,就会有n!可能的组合。

1 个答案:

答案 0 :(得分:0)

寻找最短的距离并不是那么难。

A = rand(1E4,2);
B = rand(1E4,2);
tic
idx = nan(1,1E4);
for ct = 1:size(A,1)
    d = sum((A(ct,:)-B).^2,2);
    idx(ct) = find(d==min(d));
end
toc

plot(A(1:10,1),A(1:10,2),'.r',B(idx(1:10),1),B(idx(1:10),2),'.b')

在我的电脑上花了半秒钟。

当集合A中的两个点与集合B中的相同位置匹配时,问题就会开始。

length(unique(idx))==length(idx)

这可以通过几种方式解决。最好的(imho)是根据距离(通常是指数减少的东西)确定B点与A点匹配的概率,并解决最可能的情况。

更简单的方法(但更容易出错)是从集合B中删除匹配点。