首页 > 解决方案 > 如何根据matlab中另一个坐标矩阵中点之间的距离对坐标矩阵进行排序?

问题描述

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

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

标签: imagematlabimage-processingmatrix

解决方案


仅仅寻找最短的距离并不难。

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)

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

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


推荐阅读