Covisibility graph(共视图)

**共视图(covisibility graph)**由ORB-SLAM率先提出并推广,是关键帧之上的一个带权无向图:

该图编码了”谁看到了什么”,而与关键帧创建的时间或位置无关。相隔数分钟、但从相同视点拍摄的两个关键帧会紧密相连;而在快速转弯过程中产生的两个连续关键帧,彼此之间的连接却可能十分微弱。这使得共视性成为比时间或欧氏距离更好的视觉地图”邻域”概念。

SLAM系统会不断地查询共视图:

一个密切相关的结构是基本图(essential graph):一个更加稀疏的子图,由关键帧的生成树构成,并加入高权重的共视边和回环检测边。ORB-SLAM在基本图(而非稠密共视图)上运行位姿图优化,以极低的代价获得接近完整优化的大部分精度。

形式化定义与维护

Pi\mathcal{P}_i 为关键帧 KiK_i 观测到的地图点集合。两个关键帧之间的共视权重就是

wij=PiPj,w_{ij} = \left| \mathcal{P}_i \cap \mathcal{P}_j \right|,

且图中保留边 (i,j)(i, j) 当且仅当 wijθw_{ij} \geq \theta。这一过程完全不需要位姿——它纯粹是对观测的记账——这正是它便宜且可增量维护的原因:

在实践中,每个关键帧会将其邻居按权重排序存储,因此像”权重最高的 NN 个共视关键帧”(用于定义局部BA窗口,以及扩展回环候选)这样的查询是 O(1)O(1) 的。值得注意的是ORB-SLAM设计中的非对称阈值:共视图保留相对较弱的边(θ15\theta \approx 15 个共享点),因为局部建图受益于较宽泛的邻域;而基本图只保留强边(θ=100\theta = 100),因为位姿图优化需要少而可靠的约束。

为什么不用时间或距离?

有必要理解一下其他方案的失效模式。时间窗口(最近 NN 帧)在相机重新访问某个地点时就会失效:观测同一场景的旧关键帧被排除在局部BA之外,导致地图局部重复和漂移。度量邻域(半径 rr 米内的关键帧)在方向变化时会失效——一个相距半米但朝向相反墙面的关键帧不共享任何观测,只会带来代价而毫无贡献——而且它依赖于本身正在漂移的位姿估计。共视性通过在观测空间中定义邻域绕开了这两个问题:它恰好是那些测量约束着相同几何结构的关键帧集合,也恰好是局部BA构造一个良态问题所需要的集合。

常见陷阱

对SLAM的意义

共视图是使基于特征点的SLAM能够扩展的数据结构:它限制了局部BA的代价,聚焦了地图点搜索的范围,并为回环检测后的快速全局修正提供了稀疏骨架(基本图)。共视图由ORB-SLAM引入,影响了几乎所有后续基于关键帧系统的地图管理方式,包括ORB-SLAM2/3及其众多衍生系统。

相关条目