仿射转换不像预期的那样与翻译合成

时间:2017-08-03 04:42:56

标签: python opencv numpy matrix transform

嗯,标题并不完全准确。我正在处理的变换是一个透视变换,它可以很好地近似为仿射变换 - 但它并没有产生接近我对仿射变换所期望的结果,甚至当我< em> do 使用纯仿射变换,结果仍然以意想不到的方式修改转换的翻译部分。

我从代表转换矩阵的numpy数组开始,如下所示:

transformation = np.array([[.5, .1, 40],
                           [.06, -.18, 725],
                           [.00003, .00001, 1]])

real_affine= np.array([[.5, .1, 40],
                       [.06, -.18, 725],
                       [0, 0, 1]])

translation = np.array([[1, 0, 0],
                        [0, 1, 50],
                        [0, 0, 1]])

然后我撰写它们,期望得到(至少近似)transformation.dot(translation)的结果:

np.array([[.5, .1, 40],
          [.06, -.18, 775],
          [.00003, .00001, 1]])

real_affine.dot(translation)的这一个:

np.array([[.5, .1, 40],
          [.06, -.18, 775],
          [0, 0, 1]])

即,修改了y平移值的完全相同的转换。相反,我得到了这个:

>>> transformation.dot(translation)
array([[  5.00000000e-01,   1.00000000e-01,   4.50000000e+01],
       [  6.00000000e-02,  -1.80000000e-01,   7.16000000e+02],
       [  3.00000000e-05,   1.00000000e-05,   1.00050000e+00]])

>>> real_affine.dot(translation)
array([[  5.00000000e-01,   1.00000000e-01,   4.50000000e+01],
       [  6.00000000e-02,  -1.80000000e-01,   7.16000000e+02],
       [  0.00000000e+00,   0.00000000e+00,   1.00000000e+00]])

这里发生了什么?这是完全相同的转换(除了翻译),但翻译价值与我所期望的完全不同。

对于我的无知道歉,我从未正式研究过矩阵或转换。答案可能非常明显。

0 个答案:

没有答案