这个类是关键帧的数据库,主要用于计算闭环检测和重定位时的候选帧,类中维护一个每个元素都是链表的vector容器,容器的每个元素是预先训练好的特征词汇,然后对应的连表上放的都是关键帧,包含这个词汇的关键帧。
类中public的函数及其含义
项目 | Value |
---|---|
KeyFrameDatabase(const ORBVocabulary &voc); | 构造函数 |
void add(KeyFrame* pKF); | 根据关键帧的词包,更新数据库的倒排索引 |
void erase(KeyFrame* pKF); | 关键帧被删除后,更新数据库的倒排索引 |
void clear(); | 清空关键帧数据库 |
变量 | 含义 |
---|---|
std::vector<KeyFrame > DetectLoopCandidates(KeyFrame pKF, float minScore); | 在闭环检测中找到与该关键帧可能闭环的关键帧 |
std::vector<KeyFrame*> DetectRelocalizationCandidates(Frame* F); | 在重定位中找到与该帧相似的关键帧 |
protected的相关变量及其定义
变量 | 含义 |
---|---|
const ORBVocabulary* mpVoc; | 预先训练好的词典 |
std::vector<list<KeyFrame*> > mvInvertedFile; | 倒排索引,mvInvertedFile[i]表示包含了第i个word id的所有关键帧 |
std::mutex mMutex; | Mutex, 多用途的 |
计算闭环候选帧的过程和计算重定位候选帧的过程几乎类似,两者区别在于:计算闭环候选帧时参考的是关键帧,而重定位时参考的是普通帧,因此也就没有像闭环那样剔除关键帧的局部图中的帧。