image - 如何根据matlab中另一个坐标矩阵中点之间的距离对坐标矩阵进行排序?
问题描述
我正在使用名为 Procrustes 的 matlab 内置函数来查看两个图像之间的旋转平移和缩放。但是,我只是使用图像中最亮点的坐标,并围绕图像中心旋转这些坐标。Procrustes 比较两个矩阵并为您提供旋转、平移和缩放。但是,只有当矩阵的比较顺序相同时,procrustes 才能正常工作。
我得到一个图像和一个单独的比较坐标矩阵。最终目标是找出与坐标矩阵相比图像已旋转、平移和缩放的程度。我可以为此使用 Procrustes,但我需要正确排序从图像中找到的坐标,以匹配比较坐标矩阵中的顺序。我的想法是比较坐标矩阵中每个可能的点组合之间的距离,并将其与我在图片中找到的坐标进行比较。我只是不知道如何编写这段代码,因为如果有n个坐标,就会有n个!可能的组合。
解决方案
仅仅寻找最短的距离并不难。
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 中删除匹配点。
推荐阅读
- javascript - Stripe Javascript库confirmCardPayment不返回
- python - 使用 pyarrow 的 topandas() 返回空数据框
- javascript - 事件委托不适用于动态按钮
- python - 查看值是否与 ManyToManyField 相关
- ios - 为什么我的页面内容从屏幕开始然后向下调整?
- python - python中pyqtsignal和emit的使用
- mysql - 即使提供正确的 mysql 服务名称,Spring-boot 也无法连接到 mysql 容器
- javascript - sinon.js:存根调用不会增加 callCount
- mongodb - asyncData 从 db 获取配置文件
- vb.net - 主题改变事件?