【问题标题】:Transforming Quaternion to Camera rotation matrix - OpenCV将四元数转换为相机旋转矩阵 - OpenCV
【发布时间】:2016-08-09 07:21:37
【问题描述】:

几周以来,我一直在尝试用精确的四元数扭曲几张照片,但没有成功。下面的等式似乎并没有像我期望的那样旋转相机位置。我做对了吗?我有什么遗漏吗?

我知道仅仅传递一个四元数不足以拼接照片,但它应该足以对齐照片?

公式如下:

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 )   );

【问题讨论】:

    标签: c++ opencv quaternions


    【解决方案1】:

    OpenCV 不直接支持四元数。我不会修正你的计算,而是进行更简单的转换。它最接近的是表示 3D 旋转的轴角向量(也称为罗德里格斯角)。我会convert to axis-angle,然后将轴乘以角度以获得罗德里格斯角。之后,您可以使用 OpenCV 的内置函数,例如 cv::Rodrigues 转换为 3x3 旋转矩阵。

    【讨论】:

    • 如果我错了,请纠正我,但您引用的链接似乎与您所说的相反。它似乎将角速度转换为四元数?
    • 完美,谢谢!最后一个问题,(如果它是一个菜鸟问题,请提前抱歉),但是 - 在我转换四元数 - > rodrigues 角度之后,我是否使用从 rodrigues 到 camera_global[0].R 的返回?或者我该如何处理这些角度?
    • 罗德里格斯(v, camera_global[0].R)
    • 请在这里查看我的最新问题:stackoverflow.com/questions/38861985/…,您可以通过简单地传递上面的等式来查看结果。这算不算“好”?还是我会通过转换为 Rodrigues 获得更准确的结果?
    猜你喜欢
    • 2010-12-06
    • 1970-01-01
    • 2017-10-14
    • 2013-01-27
    • 2019-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多