Python从两组点获得转换矩阵

时间:2017-03-22 14:02:01

标签: python algorithm image-processing regression linear-algebra

我需要图像,一个模拟,一个真实数据,有亮点。

模拟: Simulation

现实: reality

我可以很好地检测斑点并获得坐标。现在我需要计算两个坐标系之间的变换矩阵(比例,旋转,平移,可能是剪切)。如果需要,我可以手动选择一些(5-10)对应点来给算法

我已经尝试了很多方法,包括: ICP的2个实现: https://engineering.purdue.edu/kak/distICP/ICP-2.0.html#ICP

https://github.com/KojiKobayashi/iterative_closest_point_2d

实施仿射变换: https://math.stackexchange.com/questions/222113/given-3-points-of-a-rigid-body-in-space-how-do-i-find-the-corresponding-orienta/222170#222170

仿射变换的实现: Determining a homogeneous affine transformation matrix from six points in 3D using Python

how to perform coordinates affine transformation using python? part 2

他们中的大多数人都是这样失败的: enter image description here 红点是模拟中转化为现实 - 坐标系的点。

到目前为止,最好的方法是how to perform coordinates affine transformation using python? part 2产生这个: enter image description here

如您所见,缩放和翻译大部分都有效,但图像仍然需要旋转/镜像。

关于如何获得工作算法的任何想法?如果需要,我可以提供我当前的非工作实现,但它们基本上是链接的。

1 个答案:

答案 0 :(得分:0)

我发现了错误。

我使用plt.imshow来显示模拟和真实图像,然后从中选择要从中计算变换的参考点。

原来,由于通常的数组到图像索引 - 翻转 - 伏都教(或者对我的转换的错误认识),我需要从模拟中切换参考点的x和y索引图像。

有了这个,一切正常,使用这个如何使用python执行坐标仿射变换?第2部分算法。