SLAM中通过坐标变换计算相机中心

点击查看代码
    // 计算相机中心:c = -R^T * t 
    // 其中R是旋转矩阵(由角轴转换),t是平移向量
    Eigen::VectorXd inverse_rotation = -angle_axis_ref; // 逆旋转(角轴取反)
    // 计算 R^T * t (通过角轴旋转点实现)
    AngleAxisRotatePoint(inverse_rotation.data(),
                         camera + camera_block_size() - 6, // 平移向量位置
                         center);
    // 相机中心 = - (R^T * t)
    VectorRef(center, 3) *= -1.0;

image

image

第三步:解释代码行的逻辑

代码里的这行:
Eigen::VectorXd inverse_rotation = -angle_axis_ref; // 逆旋转(角轴取反)
image
再结合后续的代码,就能串联起完整逻辑:
平移向量 t:显式存储在相机参数块中,通过 camera_block_size() - 6 定位,代码中直接引用、修改、复制,是直观的显式使用。
旋转矩阵 R:不直接存储,以「角轴 / 四元数」为载体隐式存在,通过 AngleAxisRotatePoint 等工具函数内部转换为旋转矩阵完成计算,是间接的隐式使用。
image

点击查看代码
// 后续代码:用逆旋转角轴,旋转平移向量 t,得到 R^T · t
AngleAxisRotatePoint(inverse_rotation.data(),
                     camera + camera_block_size() - 6, // 这里传入的是平移向量 t
                     center);
// 最后取反,得到相机中心 c = -R^T · t
VectorRef(center, 3) *= -1.0;

image

image

posted @ 2026-01-29 10:22  阳光天气  阅读(6)  评论(0)    收藏  举报