关键帧数据库通过预先训练好的词典,维护一个向量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的,均当作闭环候选帧。

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

ORB-SLAM(五)KeyFrameDataBase类的更多相关文章

  1. (转)Qt Model/View 学习笔记 (五)——View 类

    Qt Model/View 学习笔记 (五) View 类 概念 在model/view架构中,view从model中获得数据项然后显示给用户.数据显示的方式不必与model提供的表示方式相同,可以与 ...

  2. Typescript 学习笔记五:类

    中文网:https://www.tslang.cn/ 官网:http://www.typescriptlang.org/ 目录: Typescript 学习笔记一:介绍.安装.编译 Typescrip ...

  3. c++ 吕凤翥 第五章 类对象一

    一   类的声明和实现 1. class tdate   //声明部分 { public: void setdate(int y,int m,int d); int isleapyear(); voi ...

  4. Java基础复习笔记系列 五 常用类

    Java基础复习笔记系列之 常用类 1.String类介绍. 首先看类所属的包:java.lang.String类. 再看它的构造方法: 2. String s1 = “hello”: String ...

  5. Java编程思想学习(五) 复用类

    1.继承与组合 复用类的方法有两种:继承与组合.继承就不多说了,组合就是直接在类中new一个对象. 数组也是对象,使用数组也是组合的一种. 2.初始化基类 当创建一个导出类的对象时,该对象包含一个基类 ...

  6. C#基础(五)——类中私有构造函数作用

    如果类成员有private修饰符,就不允许在类范围以外访问这个类成员.对类构造函数应用private修饰符时,则禁止外部类创建该类的实例.尽管看上去有些不好理解(既然不能实例化,那么这个类还有什么用处 ...

  7. Java解惑五:类之谜

    本文是依据JAVA解惑这本书,做的笔记.电子书见:http://download.csdn.net/detail/u010378705/7527721 谜题46 函数重载的问题. JAVA重载解析过程 ...

  8. PHP学习笔记二十五【类的继承】

    <?php //定义父类 class Stu{ public $name; protected $age; protected $grade; private $address;//私有变量不会 ...

  9. 深入struts2.0(五)--Dispatcher类

    1.1.1       serviceAction方法 在上个Filter方法中我们会看到例如以下代码: this.execute.executeAction(request, response, m ...

随机推荐

  1. 移动端 html基值(转载)

    (function () { document.addEventListener('DOMContentLoaded', function () { var html = document.docum ...

  2. 快速搭建一个SSM框架demo

    我之所以写一个快速搭建的demo,主要想做一些容器的demo,所以为了方便大家,所以一切从简,简单的3层架构 先用mysql的ddl,后期不上oracle的ddl ; -- ------------- ...

  3. springmvc使用map接收form表单的参数

    其实只需要在map前面加上@RequestParam参数即可,jsp的name等都不变 public String queryByCondition(@RequestParam Map<Stri ...

  4. PHP-----JSOM类型数据

    JS里的数据类型 JS里的一种数据类型,JSOM类型数据 JSOM这种数据类型,在使用JS和jquery时经常使用的到,比较重要.用起来比较简单. <title>无标题文档</tit ...

  5. 挖矿病毒——test用户的ld-linux-x86-64任务

    表现:24核48线程的机器,极度占用系统CPU资源(约60%) 通过top查看之后可以看到排在首位的是test用户的ld-linux-x86-64任务. solution: 首先,/etc/passw ...

  6. 【luogu P3393 逃离僵尸岛】 题解

    题目链接:https://www.luogu.org/problemnew/show/P3393 被占领的点可以先连在一个点上然后只需要对这一个点bfs一遍就可以求所有的危险点 #include &l ...

  7. 【题解】POJ 3417 Network(倍增求LCA+DP+树上差分)

    POJ3417:http://poj.org/problem?id=3417 思路 我们注意到由“主要边”构成一颗树 “附加边”则是非树边 把一条附加边(x,y)加入树中 会与树上x,y之间构成一个环 ...

  8. 关于JS的clone()函数编写的一些问题

    问题讲述:用js 实现一个clone()克隆函数,该函数会把输入进去的不同类型值Number,String,Undefined,Boolean,Function,Null,Object,Array,R ...

  9. String.Format() 方法

    一 定义 String.Format() 是将指定的 String类型的数据中的每个格式项替换为相应对象的值的文本等效项. string p1 = "Jackie"; string ...

  10. js实现点击按钮可实现编辑

    <script type="text/javascript">//修改密码//抓取到的数据 function edit() { document.getElementB ...