词袋模型 (Bag-of-Words, BoW)

1. 基本概念

词袋模型源于自然语言处理,在计算机视觉中被借鉴用于图像表示和检索。其核心思想是:

  • 将图像看作是由一些基本的“视觉单词”(Visual Words)组成的文档。
  • 忽略特征点的空间布局信息(至少在生成 BoW 向量时),只关心图像中出现了哪些视觉单词以及它们的频率。
  • 目的是得到一个能够概括图像内容的、紧凑的全局描述符。

2. ORB-SLAM2 中的 BoW 实现

a. 视觉词典 (Visual Vocabulary / Dictionary)

  • 构建:这是一个离线预训练的过程。使用大量不同场景下的 ORB 特征描述子,通过聚类算法(如层次 K-Means)构建一个词典树(Vocabulary Tree)
  • 结构:树的叶子节点代表一个视觉单词。每个视觉单词对应着描述子空间中的一个聚类中心。词典通常包含大量(例如 10410^4 - 10610^6)视觉单词。
  • 作用:提供一个标准化的参照系,用于将连续的 ORB 描述子**量化(Quantize)**为离散的视觉单词 ID。

b. 特征描述子量化

  • 对于图像中提取的每一个 ORB 特征描述子,在词典树中进行高效查找,找到与其最相似(距离最近)的视觉单词。
  • 该特征点就被赋予了这个视觉单词的 ID。

c. BoW 向量生成

  • 对整个图像(通常是关键帧),统计其中所有特征点被量化后的视觉单词 ID。
  • 生成一个稀疏向量(BoW Vector),其维度等于词典中视觉单词的总数。
  • 向量的每个元素表示对应视觉单词在该图像中出现的频率权重(常用 TF-IDF - Term Frequency–Inverse Document Frequency - 来计算权重,以突出那些在当前帧常见但在整个数据集中不常见的词,增强区分度)。
  • 这个 BoW 向量可以看作是该图像的全局“指纹”

3. BoW 在 ORB-SLAM2 中的主要应用

BoW 的核心优势在于高效的相似性检索,主要用于:

a. 闭环检测 (Loop Closure Detection)

  • 目标:检测相机是否回到了先前经过的区域。
  • 方法
    1. 将当前帧(或新生成的关键帧)的 BoW 向量与数据库中存储的历史关键帧的 BoW 向量进行比较(计算相似度得分)。
    2. 利用 DBoW2 库中的倒排索引等加速结构,可以非常快速地找到 BoW 向量相似度高的候选关键帧。
    3. 高相似度意味着两个关键帧在视觉内容上可能很接近,是潜在的闭环候选帧。

b. 重定位 (Relocalization)

  • 目标:当跟踪丢失时,确定相机当前在地图中的位置。
  • 方法
    1. 计算当前帧的 BoW 向量。
    2. 在关键帧数据库中搜索与之 BoW 向量最相似的关键帧。
    3. 这些相似的关键帧及其位姿可以为当前帧提供一个初始的位姿估计。

4. BoW 在 ORB-SLAM2 中的次要应用:加速特征匹配

  • 场景:当通过 BoW 向量比较已找到潜在的闭环/重定位候选帧后,需要在当前帧和候选帧之间进行精确的特征点匹配,以进行几何验证和位姿计算。
  • 方法:可以利用特征点所属的视觉单词信息来加速匹配。如果两个特征点是真匹配,它们的描述子很可能属于同一个视觉单词。因此,可以:
    • 优先匹配属于同一视觉单词的特征点对。
    • 在属于同一视觉单词的特征点子集之间进行匹配尝试。
  • 优势:减少了需要进行暴力匹配的特征点对数量,提高了后续几何验证步骤的效率。

5. 与连续帧跟踪的区别

  • 在**连续帧跟踪(Tracking)**过程中,ORB-SLAM2 主要不依赖 BoW 进行特征匹配。
  • Tracking 更多地使用基于上一帧位姿和地图点投影匹配,并结合局部区域搜索(如 Frame::GetFeaturesInArea)来高效、准确地找到匹配。

6. 总结

ORB-SLAM2 中的 BoW 模型是一个强大的工具,它通过将图像内容表示为视觉单词的集合,生成紧凑的全局描述符 (BoW Vector)。这使得系统能够极快地在大量关键帧中检索视觉上相似的场景,是实现高效闭环检测重定位的关键技术。同时,它也能在后续步骤中辅助加速特征点匹配过程。