三维坐标变换(旋转矩阵&旋转向量)

矩阵运算显然是计算机三维坐标变换最简单方便的计算方法,因此在 opencv、opengl、工业机器人等开发中,提到位姿旋转变换,多半用的是旋转矩阵。然而,用矩阵来表示一个旋转关系有两个缺点

首先,通过旋转矩阵不能直观地看出旋转的方向和角度,假设给定一个旋转矩阵,要求旋转方向不变,旋转角度变成一半,那么新的旋转矩阵计算起来就比较麻烦了。
另一方面,旋转变换本身只有3个自由度,但旋转矩阵有9个元素,因此旋转矩阵中的元素不是相互独立的,这在非线性优化中会带来问题。

用 opencv 进行过双目相机标定的同学都知道,单目标定 calibrateCamera() 函数能够对每一张标定图像计算出一对 rvec和 tvec,即旋转平移向量,代表世界坐标系到相机坐标系的转换关系。而 stereoCalibrate() 函数则可以计算出旋转矩阵 R 和平移向量 T,代表左右相机坐标系之间的转换关系。

旋转向量

向量旋转公式最早由 Rodrigues 提出,用一个三维向量来表示三维旋转变换,该向量的方向是旋转轴,其模则是旋转角度。

设旋转向量的单位向量为 r,模为 θ。三维点(或者说三维向量) p p p 在旋转向量 r r r 的作用下变换至 p ′ p′ p,则:
《三维坐标变换(旋转矩阵&旋转向量)》

相互转换

转换可以参考半闲居士博客

opencv 中有函数 Rodrigues() 用于旋转矩阵和旋转向量的转换。参照opencv文档,设旋转向量的单位向量 r = [ r x   r y   r z ] T r=[r_x\ r_y\ r_z]^T r=[rx ry rz]T,旋转角度为 θ θ θ,对应的旋转矩阵为 R R R,则 r r r R R R 的转换是:
《三维坐标变换(旋转矩阵&旋转向量)》
旋转矩阵到旋转向量的转换过程如下:
《三维坐标变换(旋转矩阵&旋转向量)》
可得转角 θ θ θ
《三维坐标变换(旋转矩阵&旋转向量)》
对于旋转向量的单位向量 r r r ,旋转轴上的向量在旋转后不发生改变。因此, r r r 是矩阵 R R R 特征值 1 对应的特征向量。

opencv 官方文档中的原话是:

A rotation vector is a convenient and most compact representation of a rotation matrix (since any rotation matrix has just 3 degrees of freedom). The representation is used in the global 3D geometry optimization procedures like calibrateCamera, stereoCalibrate, or solvePnP .

称旋转向量是旋转矩阵方便而且最紧凑的表示方法,被用于一些需要全局三维几何优化的函数中。

    原文作者:云之舟_
    原文地址: https://blog.csdn.net/qq_40851561/article/details/119699570
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞