SVD 正交化旋转 原理 📅 2026/7/13 19:01:42 frobenius 范数矩阵元素的平方和,开根号4. 对应 ORB-SLAM3 代码中的实现代码实锤在MLPnPsolver.cc中这一段逻辑直译为cpp// 对线性估计出的矩阵 R_est 做 SVD 分解 Eigen::JacobiSVDMatrix3d svd(R_est, Eigen::ComputeFullU | Eigen::ComputeFullV); Matrix3d U svd.matrixU(); Matrix3d V svd.matrixV(); // 计算 U * V^T 的行列式 double det (U * V.transpose()).determinant(); // 处理反射如果行列式为负将 U 的第三列取反 if (det 0) { U.col(2) -U.col(2); } // 得到最终的正交旋转矩阵 Matrix3d R U * V.transpose(); 一句话总结SVD 正交化的本质是在最小二乘意义下用最优的正交矩阵去逼近一个含噪的任意矩阵。通过切掉奇异值矩阵 Σ只保留 U 和 V我们舍弃了噪声带来的“尺度畸变”同时利用行列式修正保证旋转方向正确从而将线性解“拉回”到合法的旋转流行 SO(3) 上。/category: 计算机视觉 - 数学优化category: 计算机视觉 - SLAM