确定转型"种类"来自转换矩阵(倒转)

时间:2017-08-13 16:52:21

标签: opencv matrix coordinate-transformation

我想知道我是否可以在OpenCV中根据给定的变换矩阵确定转换种类(旋转,平移,剪切......)?

跟进本文:http://docs.opencv.org/2.4/doc/tutorials/imgproc/imgtrans/warp_affine/warp_affine.html

我将得到一个2x3转换矩阵。 E.g:

[ 0.85, 0.20, 0;
 -0.06, 0.37, 253.44]

我知道第三个"列"代表翻译。因此,在这种情况下x=0y=253.44

但是有没有办法确定前两列中是否仅应用旋转或旋转并应用缩放?所以我的意思是让矩阵乘法以某种方式反转?

1 个答案:

答案 0 :(得分:0)

一般来说,这是不可能的。例如,考虑仿射变换:

 cos(theta)  sin(theta)  0
-sin(theta)  cos(theta)  0

如果theta = pi,则评估为

-1  0  0
 0 -1  0

这个仿射变换是缩放-1还是旋转180度?

仿射变换 确实可以写成多个变换的组合,但由于矩阵乘法不是可交换的,因此这些组合的顺序很重要。这甚至适用于翻译。如果旋转然后平移,则生成的变换矩阵与翻译和旋转时不同,因为旋转发生在图像中的(0,0)位置周围。

简而言之,没有独特的分解。如果您知道某些约束,例如缩放是均匀的,或者剪切是均匀的,或者缩放是正的,那么您可能能够获得唯一的分解。有关数学,请参阅here