zoukankan      html  css  js  c++  java
  • ORB-SLAM(五)KeyFrameDataBase类

    关键帧数据库通过预先训练好的词典,维护一个向量std::vector<list<KeyFrame*> > mvInvertedFile; 该向量中mvInvertedFile[i]表示包含了第i个WordId的所有关键帧;

    我们需要知道关键帧对应的vBowVec向量是一个map:

    std::map<WordId, WordValue> // WordId以及单词值,WordId是唯一的,和一个特征绑定
    KeyFrameDatabase::KeyFrameDatabase (const ORBVocabulary &voc):
        mpVoc(&voc)
    {
        mvInvertedFile.resize(voc.size()); // number of words
    }

    该类的主要作用是在回环检测和重定位中,根据词袋模型的特征匹配度,找到闭环候选帧和重定位候选帧,两者之间的区别在于,需要参考关键帧去寻找闭环候选帧,而重定位则参考普通帧。

    主要步骤是:

    1. 找出与当前帧pKF有公共单词的所有关键帧pKFi,不包括与当前帧相连的关键帧;

    2. 统计所有闭环候选帧中与pKF具有共同单词最多的单词数,只考虑共有单词数大于0.8*maxCommonWords以及匹配得分大于给定的minScore的关键帧,存入lScoreAndMatch;

    3. 对于第二步中筛选出来的pKFi,每一个都要抽取出自身的共视(共享地图点最多的前10帧)关键帧分为一组,计算该组整体得分(与pKF比较的),记为bestAccScore;

    所有组得分大于0.75*bestAccScore的,均当作闭环候选帧。

    若想改变闭环检测候选帧的参数,根据场景鉴定闭环的阈值,可以在这里修改参数。

  • 相关阅读:
    《财富自由之路》读后感及读书笔记
    echarts3.x 入门
    Ubuntu 16.04 硬盘安装
    语义化版本控制的规范(转载)
    appcan IDE 无法 请求数据
    jQuery extend 函数
    63342 接口 奇遇 IDEA
    C++调用Java的Jar包
    无法打开 源 文件“stdafx.h”的解决方法
    CString的头文件
  • 原文地址:https://www.cnblogs.com/shang-slam/p/6421229.html
Copyright © 2011-2022 走看看