嗯,标题并不完全准确。我正在处理的变换是一个透视变换,它可以很好地近似为仿射变换 - 但它并没有产生接近我对仿射变换所期望的结果,甚至当我< 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]])
这里发生了什么?这是完全相同的转换(除了翻译),但翻译价值与我所期望的完全不同。
对于我的无知道歉,我从未正式研究过矩阵或转换。答案可能非常明显。