由`cv2.getRotationMatrix2D`返回的Map矩阵

时间:2018-01-24 01:43:13

标签: opencv matrix rotation

我正在查看返回的map_matrix(即矩阵运算符)  函数cv2.getRotationMatrix2D。通过我的计算,自从  操作员围绕任意点旋转图像并缩放  矩阵,运算符可以按(-x,-y)计算为翻译,  然后是轮换,接着是(+x,+y)的翻译  乘以标量k,如下所示:

  

eqn_line01   eqn_line02   eqn_line03   eqn_line04

其中C = cos(theta)S = sin(theta)。 (见Rotation Matrix and of rotation around a point)。  这与OpenCV在其文档中列出的内容非常接近,但并非如此  完全相同(你可以看到k /比例不会成倍增加  整个(1-C)术语和beta的符号都会被翻转:

  

eqn_OpenCV

我知道旋转矩阵是偏斜对称的,因为,如果  theta是一个负数,然后因为正弦是一个奇数函数,我们  会有

  

eqn_RotMtx

在上面,但我们仍然得不到与显示相同的结果  OpenCV。我错过了什么吗?我在派生的某个地方搞砸了吗? OpenCV如何达到他们的等式?

1 个答案:

答案 0 :(得分:0)

有人检查我......

  1. 我忘了我们使用非标准坐标。如上所示的旋转矩阵用于笛卡尔坐标,其中y指向“向上”。但是,在计算机图形学中,y轴指向左上角的下方。 (参见本维基百科链接上的“坐标系的非标准方向”部分[旋转矩阵] [1]。)
  2. ImageCoordAxes

    因此,要使逆时针旋转为正,我们需要在旋转矩阵中输入-theta

    1. 如果我们在上面交换kT(x,y) ,并且用同构坐标代表替换k,我们就会到达正确的方程式。即,上面我有kI,其中I是单位矩阵。相反,我应该使用这个
    2. HomgeneousCoords

      计算机图形中需要均匀坐标,因为我们正在对2D点进行变换,但需要将操作表示为3x3矩阵,以使数学运算。

      最后,从最终结果中删除不必要的[0 0 1]行,然后获得OpenCV所具有的内容。 (您将2x3矩阵乘以3x1点向量(即[x y 1].T;记住齐次坐标)以获得2x1输出。