变换四元数相机旋转矩阵- OpenCV

Transforming Quaternion to Camera rotation matrix - OpenCV

本文关键字:OpenCV 旋转 四元数 相机 变换      更新时间:2023-10-16

几周以来我一直试图用精确的四元数来扭曲几张照片,但没有运气。下面的方程式似乎没有旋转相机的位置,以及我期望从确切的位置。我做得对吗?我是不是漏掉了什么?

我明白,简单地传递一个四元数是不足以缝合照片,但它应该足以对齐照片?

公式如下:

double divmult = 2.0 / lsq;
double xx = divmult * x * x;
double yy = divmult * y * y;
double zz = divmult * z * z;
double wx = divmult * w * x;
double wy = divmult * w * y;
double wz = divmult * w * z;
double xy = divmult * x * y;
double xz = divmult * x * z;
double yz = divmult * y * z;
cameras_global[imageCounter].R = (Mat_<float>(3, 3) << ( 1 - yy - zz ),    -( xy - wz ),   -( xz + wy ),
                                  ( xy + wz ),        -( 1 -xx -zz ), -( yz - wx ),
                                  ( xz - wy ),        -( yz + wx ),   -( 1 -xx -yy )   );

OpenCV不直接支持四元数。与其修正你的计算,我宁愿采用一个更简单的转换。它所拥有的最接近的东西是表示3D旋转的轴角向量(也称为罗德里格斯角)。我将转换成轴角,然后将轴乘以角度得到罗德里格斯角。之后,您可以使用OpenCV的内置函数,例如cv::Rodrigues转换为3x3旋转矩阵。