我想知道我是否可以在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=0
,y=253.44
但是有没有办法确定前两列中是否仅应用旋转或旋转并应用缩放?所以我的意思是让矩阵乘法以某种方式反转?
答案 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。