2017-08-13 65 views
0

我想知道是否可以从OpenCV中确定仅仅从给定的转换矩阵转换种类(旋转,平移,剪切等)?从转换矩阵(反转)确定转换“种类”

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

我会得到的2x3变换矩阵。例如:

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

我知道第三个“列”代表翻译。所以在这种情况下x=0,y=253.44

但是有没有一种方法来确定是否在前两列只有旋转或旋转和缩放应用?那么我的意思是让矩阵乘法颠倒过来?

回答

0

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

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

如果theta = pi,那么这个计算结果为

-1 0 0 
0 -1 0 

这是仿射变换比例-1,或旋转180度?

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

总之,没有独特的分解。如果你知道某些约束条件,比如缩放是均匀的,或者剪切是均匀的,或者缩放比例只是正数等,那么你可能会得到一个独特的分解。数学见here