【问题标题】:How can I sort a coordinate matrix based on the distance between points in another coordinate matrix in matlab?如何根据matlab中另一个坐标矩阵中点之间的距离对坐标矩阵进行排序?
【发布时间】:2018-11-21 19:54:53
【问题描述】:

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

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

【问题讨论】:

  • 文字太多,信息太少!你的标题可以用几行来演示。阅读How to Askminimal reproducible example
  • 另外,看看图像处理文献。你想找一个仿射变换,这在图像处理中很常见
  • @AnderBiguri:我认为这与转型无关。 Affine 或 Procrustes 都可以。这是关于将注册点相互匹配。找到两组点之间的最小距离。
  • @Dalton Macres:两个矩阵中是否正好有 N 个坐标?换句话说:每个坐标是否总是与另一个矩阵中的另一个坐标匹配?
  • 是的,两个矩阵都包含相同的N个坐标。

标签: image matlab image-processing matrix


【解决方案1】:

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

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 中删除匹配点。

【讨论】:

    猜你喜欢
    • 2018-06-16
    • 2013-06-20
    • 2017-02-20
    • 2012-06-13
    • 1970-01-01
    • 1970-01-01
    • 2018-04-09
    • 1970-01-01
    • 2011-03-18
    相关资源
    最近更新 更多