下面用直观解释 + 数学形式来回答你“什么是重投影误差”(reprojection error),并结合 ORB‑SLAM3 的使用场景。
一、直观理解
- 场景里有一个三维点(地图点/路标点)。相机在某个位姿下看到它,并在图像上检测到一个像素位置(特征点)。
- 如果我们拿当前估计的相机内参和位姿,把这个三维点“投影”回图像平面,就会得到一个预测的像素位置。
- “重投影误差”就是“观测到的像素位置”和“根据当前估计投影得到的像素位置”的差值。差值越小,说明位姿和地图越与观测一致。
二、数学形式
- 给定三维点 X(世界坐标),相机位姿 T(R,t)和内参 K,投影模型记作 π:
- 相机坐标:Xc = R X + t
- 归一化坐标:(x̂, ŷ) = (Xc/Zc, Yc/Zc)
- 像素坐标:û = fx x̂ + cx, v̂ = fy ŷ + cy(含畸变时还要经过畸变模型)
- 观测像素为 z = (u, v),预测像素为 ẑ = (û, v̂)
- 重投影误差 e = z − ẑ,常用二范数或马氏距离度量:
- 最小化 ρ(e^T W e),ρ 为鲁棒核(如 Huber),W 为信息矩阵(权重)
三、在 ORB-SLAM3 中如何用
- 作用场景
- 跟踪(Tracking):给定地图点与当前帧匹配的特征点,通过最小化重投影误差来优化当前相机位姿(PnP + 迭代优化)。
- 局部/全局 BA(Bundle Adjustment):同时优化关键帧位姿与地图点位置,目标就是所有观测的重投影误差之和最小。
- 回环/闭环后优化(Pose Graph / GBA):闭环约束加入后也通过最小化总体误差(包含视觉重投影和惯性误差)来一致化全图。
- 误差加权与鲁棒性
- ORB 类特征有图像金字塔尺度。ORB‑SLAM 系列会用该尺度对应的方差对误差加权(每个观测有 invSigma2)。
- 使用 Huber 等鲁棒核抑制外点影响。
- 常用卡方检验阈值(例如 2 自由度的 χ² 95% 分位约 5.99)来剔除外点。
- 多传感器与多模型
- 单目:误差是 2D 像素残差 e = (u − û, v − v̂)。
- 立体:通常左目与右目都有观测。对校正过的双目,误差包含左目 2D 残差与右目 u(或视差)残差;v 在理想校正下应一致。
- RGB‑D:深度用于初始化/尺度恢复;视觉优化仍以 2D 重投影误差为主(有实现会额外加入深度一致性项,但 ORB‑SLAM 常见做法是主要优化 2D 残差)。
- 惯性(VI 模式):在视觉重投影误差之外,还加入 IMU 预积分的惯性残差共同优化。
四、为什么重投影误差会大
- 数据关联错误(错误匹配、动态物体)
- 相机标定不准(内参/畸变/外参)
- 时间不同步(与 IMU、双目、或滚动快门影响)
- 初始位姿差太大/漂移积累
- 地图点质量差(深度不准、三角化基线太小)
五、如何降低
- 高质量相机标定(内参、畸变、左 - 右或相机 -IMU 外参)
- 更稳健的匹配策略与外点剔除(RANSAC、金字塔层权重、鲁棒核)
- 充分的视差/基线,避免共面/退化几何
- 良好的时间同步与曝光控制,减少运动模糊与滚快效应
- 定期局部/全局 BA 校正漂移
六、一个极简数值例子
- 假设 fx=fy=500, cx=cy=320,三维点在相机坐标为 (Xc,Yc,Zc)=(1,2,5)
- 预测像素:û=500*(1/5)+320=420,v̂=500*(2/5)+320=520
- 若观测为 (u,v)=(418, 523),则 e=(−2, 3),|e|≈3.6 像素
- 经过尺度方差加权与鲁棒核后进入优化目标
七、和”标定误差报告里的重投影误差”的关系
- 相机标定也会报告“平均重投影误差”,其定义一样:棋盘角点观测与模型投影差。
- 在 SLAM 里,这个概念被推广到任意特征点与地图点/位姿的联合优化。
一句话总结:重投影误差是“观测到的特征点像素位置”与“用当前相机模型和位姿把对应三维点投影回图像得到的像素位置”之间的差异。ORB‑SLAM3 通过最小化所有观测的重投影误差(结合鲁棒核与权重),联合优化相机位姿与地图点,实现稳定、准确的定位与建图。