1 ./Vocabulary/ORBvoc.txt
为何要加载orb vocabulary?他的作用是啥?
一句话概括,ORB中vocabulary的作用是特征空间的划分和Bag-of-Words Vector的计算。 为了减少累积误差,目前Visual SLAM都加入回环检测了,并通过后端优化来纠正整个回环中的姿态估计误差。要实现回环检测,SLAM系统需要回答一个问题:这个场景之前我是不是见过?而且是在可能出现平移+绽放+旋转的情形下,判断当前帧与之前记录过的帧是不是来源于同一个场景。这个问题落入到基于内容的图像检索范畴。 ORB-SLAM采用的是Bag-of-Words的方式将图像中的多个局部描述符表示成一个定长的全局特征,而Vocabulary Tree是局部描述符量化和索引的一种高效数据结构。Vocabulary Tree 建立Vocabulary Tree流程是这样的:
- 对应用场景下的大量训练图像离线提取局部描述符(words)(每张图像可能会有多个描述符);
- 将这些描述符KNN聚成k类;
- 对于上一步的每一子类,继续KNN聚成k类;
- 按这个循环,直到聚类的层次数达到阈值L。
最后的聚类结果组织成一棵树,叶子节点表示一个word,中间节点则是聚类的中心。与叶子节点相关联的还有权重,用来表示这个word的重要程度,典型的如IDF,与文本搜索中的IDF是一样的道理。Vocabulary Tree实际上就是通过学习(Learning)的方法实现对原始特征空间的一种划分而已。