本文最后更新于:2026年7月9日 上午

词袋模型(DBoW2)给出了回环的"候选"——当前帧可能和某个历史关键帧拍的是同一个地方。但候选只是开始:单帧命中不可靠,真假回环必须经过几何验证、尺度校正、全局优化三步才能确认并消除漂移。这篇接在词袋模型之后,记录"候选之后"的完整流程。

候选的不足

词袋检索给出的是"单帧命中"的候选,但单帧命中不可靠。原因有两层:

  • 感知偏差(perceptual aliasing):不同位置看起来可能很像(走廊、农田、幕墙),BoW 相似度高,但根本不是同一处。词袋本身解决不了——它衡量的就是"看起来像"。
  • 单帧巧合:光照、视角偶然相似,让一帧误命中。

真回环和假阳在时间行为几何一致性上有本质区别,这正是后续三步过滤的依据。

时序与空间一致性

倒排索引给出的候选先过两道廉价判据,避免把昂贵的几何验证浪费在偶然命中上:

时序一致性:真回环在连续多帧里持续命中同一片历史区域;假阳只偶然命中一次、位置跳变。DBoW2 原文的做法是维护一个滑动窗口,对候选 $(q_t,d_t)$(当前帧及其最佳匹配历史帧),回看前几帧的匹配结果,要求它们都落在 $d_t$ 的邻域里。连续几帧都"钉在同一区域"才升级为稳定候选。

空间一致性:回环不应在刚走过的地方检测到(那是前端跟踪的活)。ORB-SLAM 的做法是把互相共视的历史关键帧聚成"组"、候选以组为单位比较,并要求候选在连续 3 个关键帧的候选列表里都出现,才送去做几何验证;同时要求候选离当前帧的图上距离足够远。

这两步把"单帧误报"压到极低,是几何验证之前的廉价过滤器。整体是个三级漏斗:倒排检索命中(多)→ 时序/空间一致性(少)→ 几何验证(极少),每一级用更贵但更准的判据逐级过滤。

几何验证

几何验证是判定的本质。当前帧和候选历史帧做特征匹配(用直接索引只在同词组内匹配,加速),然后 RANSAC 求一个能解释大量匹配的统一几何模型:

  • 一般 3D 场景 → 基础矩阵 F(对极约束 $\mathbf{x}_B^\top F\,\mathbf{x}_A=0$);
  • 纯平面场景 → 单应矩阵 H;
  • 若历史帧已有 3D 路标 → PnP 求相对位姿。

错误匹配是随机散落的,不服从任何单一变换;正确匹配服从同一个几何模型。RANSAC 反复采样最小点集估模型、数内点,内点数(或比例)超阈值就判"同一场景"。再配合 cheirality 检查(三角化几个点确认都在相机前方),排除镜像误报。

判定同场景的原子标准是"存在一个能解释大量匹配的统一几何模型",而不是匹配的绝对数量——一面满是相同窗户的墙能匹配上千个但不服从单一几何,内点反而少。这一条是回环检测最根本的判据。

Sim3 校正

确认回环后,要把当前帧位姿和历史帧位姿对齐。这里有个单目 SLAM 特有的问题:尺度漂移

单目 SLAM 的尺度不可观——本质矩阵只有 5 个自由度,平移方向已知但长度未知。不同时间段的局部地图可能建立在不同尺度上:时刻 $T_0$ 的局部地图尺度是 $s_1$,时刻 $T$ 的是 $s_2$。若 $s_1\ne s_2$,用刚体变换 SE(3)(只有 R, t)对齐就错了,必须用相似变换 Sim3(含尺度因子 s):

$$ \mathbf{X}'=s\,R\,\mathbf{X}+\mathbf{t} $$

Sim3 同时估计旋转 R、平移 t、尺度 s,把回环两端的局部地图对齐到同一尺度。双目 / RGBD / 有 IMU 的系统提供了绝对尺度,理论上可以用 SE(3),但工程上 Sim3 对残余尺度误差更稳健,所以也常用。

全局优化

Sim3 校正只对齐了回环两端,但中间整条轨迹的累积漂移还在。消除它的办法是把回环约束加进位姿图,做全局优化:

  • 位姿图优化:只优化相机位姿(3D 点固定),把回环约束作为一条边加入图,全局调整所有关键帧位姿。秒级,精度中等,用于快速消除漂移。
  • 全局 BA:优化全部相机位姿加全部 3D 点,最精但最贵(分钟级)。实际策略是先位姿图优化快速拉直,再全局 BA 精化。

优化后,原本漂移的轨迹被"拉回"对齐到回环点,整条轨迹全局一致。如果有双目/RGBD/GPS 提供的绝对约束,也一并加入因子图。

地图融合

全局优化调整了位姿后,原本因漂移而"分裂"的重复观测需要合并:把回环两端对应的重复 3D 路标融合为同一个,并对之前因漂移三角化失败的点做重三角化(回环校正后视角关系变好,原本失败的三角化可能成功)。这一步让地图也变得全局一致,不只是位姿。

完整流程

以 ORB-SLAM 为例,回环线程(与跟踪、局部映射并行的第三个线程)的完整流程:

1
2
3
4
5
6
7
8
9
10
当前关键帧
→ 算 BoW 向量,倒排索引检索 → 候选相似帧 + 得分 [词袋干的部分]
→ 得分超阈值 + 时序一致性(连续多帧命中同一候选)
→ 空间一致性(距离够远、共视图分组、3 连续关键帧) [廉价预过滤]
→ 几何验证:特征匹配(直接索引加速)+ RANSAC 求 Sim3 位姿
→ 内点足够 → 接受回环 [判定]
→ Sim3 校正(含尺度)对齐回环两端
→ 位姿图优化沿共视图传播,全局拉直
→ 全局 BA 精化所有位姿 + 路标
→ 地图融合(合并重复点、重三角化) [校正]

关键分工是:词袋负责"粗筛、快速找候选",时序/空间一致性加几何验证负责"精筛、确认",Sim3 加全局优化负责"校正、消漂移"。粗筛只保召回(不漏真回环),精筛只保精度(不误报假阳),两者缺一不可——单靠词袋阈值同时保召回和精度理论上不可能,所以必须级联。

小结

词袋给出的候选只是回环检测的起点。完整流程是:候选 → 时序/空间一致性(廉价过滤偶然命中)→ 几何验证(RANSAC 找一致几何模型,判定真假)→ Sim3 校正(处理单目尺度漂移)→ 全局优化(沿共视图把漂移拉直)→ 地图融合。BoW 衡量"看起来像",几何验证确认"真的是同一处",全局优化把这份确认转化为整条轨迹的一致性——三步合起来,才把 SLAM 从"会漂移的里程计"提升为"全局一致的建图系统"。

参考资料

  • D. Gálvez-López and J. D. Tardós, “Bags of Binary Words for Fast Place Recognition in Image Sequences,” IEEE T-RO, 2012.(DBoW2,时序一致性)
  • H. Strasdat, A. J. Davison, J. M. M. Montiel, “Scale Drift-Aware Large Scale Monocular SLAM,” RSS, 2010.(单目尺度漂移与 Sim3)
  • R. Mur-Artal and J. D. Tardós, “ORB-SLAM2,” IEEE T-RO, 2017.(回环线程、共视图、Sim3)
  • C. Campos et al., “ORB-SLAM3,” IEEE T-RO, 2021.
  • 高翔,《视觉SLAM十四讲》。
  • 相关笔记:词袋模型 BoW 与回环检测(检索候选部分)、SLAM 全景RANSACPnP 算法


文章链接:
https://www.zywvvd.com/notes/study/SLAM/loop-closure-sim3/loop-closure-sim3/


“觉得不错的话,给点打赏吧 ୧(๑•̀⌄•́๑)૭”

微信二维码

微信支付

支付宝二维码

支付宝支付

回环校正
https://www.zywvvd.com/notes/study/SLAM/loop-closure-sim3/loop-closure-sim3/
作者
Yiwei Zhang
发布于
2026年6月18日
许可协议