【问题标题】:Determine transformation "kinds" from transformation matrix (reversing)从变换矩阵确定变换“种类”(反转)
【发布时间】:2017-08-13 16:52:20
【问题描述】:

我想知道在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=0y=253.44

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

【问题讨论】:

    标签: opencv matrix coordinate-transformation


    【解决方案1】:

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

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

    如果theta = pi,则计算结果为

    -1  0  0
     0 -1  0
    

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-27
      • 2013-03-16
      • 1970-01-01
      相关资源
      最近更新 更多