opencv(cv2.estimateRigidTransform)的相似变换无法预测3点输入

时间:2016-01-19 13:38:03

标签: python opencv affinetransform

我正在使用opencv' 2.4.12'。我得到一些输入的合理结果,但它以不可预测的方式失败。

src = np.array( [(164, 215), (128, 8), (480, 72)] ).reshape(1,-1,2)
dst = np.array( [(175, 237), (146, 44), (486, 99)] ).reshape(1,-1,2)

print cv2.estimateRigidTransform( dst, src, False )

[[  1.03569069e+00 -2.16529654e-03  -2.09931922e+01]
 [  2.16529654e-03   1.03569069e+00  -3.34366192e+01]]

这工作正常,但如果dst略有改动:

dst = np.array( [(141, 221), (102, 23), (471, 10)] ).reshape(1,-1,2)

print cv2.estimateRigidTransform( dst, src, False )

None

在我看来,第二和第三输入的y坐标需要增加(如44-> 99但不是23-> 10)。否则,估计的变换有太多的错误,以至于不会从函数返回任何结果,尽管应该处理旋转。我只是猜测为什么......但我不知道这里发生了什么。

只是目视检查输入,这两种情况并没有那么不同。所以,我应该得到一个类似的变换,但旋转方向相反。

有没有办法解决这个限制?或者,opencv中的替代函数用于相似变换(旋转+缩放+平移)?

(编辑)

也许旋转是最难以理解的参数。我实际上可以自己校正旋转(因为我知道第二和第三点在我的情况下定义角度)并让opencv计算出比例和平移。但这不是一般解决方案。

(编辑2) 包括一点(e.i.,4分)似乎有很多帮助。

0 个答案:

没有答案