我正在查看返回的map_matrix
(即矩阵运算符)
函数cv2.getRotationMatrix2D
。通过我的计算,自从
操作员围绕任意点旋转图像并缩放
矩阵,运算符可以按(-x,-y)
计算为翻译,
然后是轮换,接着是(+x,+y)
的翻译
乘以标量k
,如下所示:
其中C = cos(theta)
和S = sin(theta)
。 (见Rotation Matrix and
of rotation around a
point)。
这与OpenCV在其文档中列出的内容非常接近,但并非如此
完全相同(你可以看到k
/比例不会成倍增加
整个(1-C)
术语和beta
的符号都会被翻转:
我知道旋转矩阵是偏斜对称的,因为,如果
theta
是一个负数,然后因为正弦是一个奇数函数,我们
会有
在上面,但我们仍然得不到与显示相同的结果
OpenCV
。我错过了什么吗?我在派生的某个地方搞砸了吗? OpenCV
如何达到他们的等式?
答案 0 :(得分:0)
有人检查我......
y
指向“向上”。但是,在计算机图形学中,y轴指向左上角的下方。 (参见本维基百科链接上的“坐标系的非标准方向”部分[旋转矩阵] [1]。)
因此,要使逆时针旋转为正,我们需要在旋转矩阵中输入-theta
。
k
和T(x,y)
,并且用同构坐标代表替换k
,我们就会到达正确的方程式。即,上面我有kI
,其中I
是单位矩阵。相反,我应该使用这个
计算机图形中需要均匀坐标,因为我们正在对2D点进行变换,但需要将操作表示为3x3矩阵,以使数学运算。
最后,从最终结果中删除不必要的[0 0 1]
行,然后获得OpenCV所具有的内容。 (您将2x3
矩阵乘以3x1
点向量(即[x y 1].T
;记住齐次坐标)以获得2x1
输出。