由于在ORB-SLAM2中扩展图像识别模块,因此总结一下BoW算法,并对DBoW2库做简单介绍。

1. BoW算法

  BoW算法即Bag of Words模型,是图像检索领域最常用的方法,也是基于内容的图像检索中最基础的算法。网络上有各种各样的原理分析,所以这里只是简单提一下。

  Bag of Words本是用于文本检索,后被引用与图像检索,和SIFT等出色的局部特征描述符共同使用(所以有时也叫Bag of Feature,BOF),表现出比暴力匹配效率更高的图像检索效果,它是直接使用K-means对局部描述符进行聚类,获得一定数量的视觉单词,然后量化再统计词频或TF-IDF加权之后的权重系数。

但是随着图像数据库的扩大,图像数据增加,所使用的码书规模也越来越大,K-means的效率就比较低了。为了改善大规模图像检索场景下的图像检索效果,有人提出了Vocabulary Tree(VT)算法,它是对BoW算法的一种改进算法,也就是我们现在常看见的分层量化的BoW算法。按照VT论文表述,这种算法不用进行图像表达向量的相似性计算,而是根据倒排文件系统进行打分,按照打分的高低进行排序,获得最相似的图像,至于怎么打分,这里就不多说了,从图上可以看出来。倒排文件存储就是每个叶子结点下有哪些对应的图像。

2. DBoW

  了解了上述两种算法之后再看DBoW算法就小菜一叠了,但是仍然有几个概念需要注意。DBoW2中计算图像之间相似度时仍然计算的是BoW向量之间的距离(根据描述子的不同可能选择Hamming距离或者余弦距离),而视觉单词分层的作用则引出了正向索引和反向索引的概念。

  反向索引即倒排文件系统,即每个叶子结点都有一个关联的文本文档,里面存储着当前节点的索引值和落在该节点下的图像索引值。反向索引的作用和倒排文档是一致的,加速图像的匹配过程,当query图像来时,只要和对应节点下图像计算相似性即可,这就大大缩小了待匹配图像的规模。

  正向索引,即中间层中每一节点下存储着该节点的索引值和对应的某一张图像的特征。正向索引可以加速特征之间的匹配,因为在图像检索的过程中,通常也是先经过BoW或者其他检索算法检索出最相似的N张图像,然后再通过特征匹配(暴力匹配)的方式确定最相似的一张或几张图像。使用正向索引时需要指定一个层数,即在与该层下的某个节点所包含的特征进行特征匹配,这同样也大大降低了特征匹配的规模,这种方法在ORB-SLAM中也用于特征匹配的加速,如跟踪时的关键帧模型等。

  BoW算法或DBoW库的一个缺点就是需要离线训练一个规模较大的码书(ORB-SLAM2中这个码书达到了一百三十多兆),感觉就像一个瘤子一样(...)。

3 总结

  下面会使用DBoW库训练自己的码书,并且在ORB-SLAM的基础上进行图像检索的任务,把AR部分融合进来。还有就是希望可以想想办法把这个“瘤子”去掉。

BoW算法及DBoW2库简介的更多相关文章

  1. BoW算法及DBoW2库简介(二)

    一.BoW算法 用OpenCV实现了最简单的BoW算法进行了一次小规模的图像检索任务,使用UKbench数据库,算法原理和网上的描述差不多,使用K-means算法进行聚类,这里使用KDTree算法进行 ...

  2. DBoW2库介绍

    DBoW2库是University of Zaragoza里的Lopez等人开发的开源软件库. 由于在SLAM回环检测上的优异表现(特别是ORB-SLAM2),DBoW2库受到了广大SLAM爱好者的关 ...

  3. BerkeleyDB库简介

    BerkeleyDB库简介 BerkeleyDB(简称为BDB)是一种以key-value为结构的嵌入式数据库引擎: 嵌入式:bdb提供了一系列应用程序接口(API),调用这些接口很简单,应用程序和b ...

  4. MXNet深度学习库简介

    MXNet深度学习库简介 摘要: MXNet是一个深度学习库, 支持C++, Python, R, Scala, Julia, Matlab以及JavaScript等语言; 支持命令和符号编程; 可以 ...

  5. Python3.x:第三方库简介

    Python3.x:第三方库简介 环境管理 管理 Python 版本和环境的工具 p – 非常简单的交互式 python 版本管理工具. pyenv – 简单的 Python 版本管理工具. Vex ...

  6. python学习--大数据与科学计算第三方库简介

    大数据与科学计算  库名称 简介 pycuda/opencl GPU高性能并发计算 Pandas python实现的类似R语言的数据统计.分析平台.基于NumPy和Matplotlib开发的,主要用于 ...

  7. LevelDB库简介

    LevelDB库简介 一.LevelDB入门 LevelDB是Google开源的持久化KV单机数据库,具有很高的随机写,顺序读/写性能,但是随机读的性能很一般,也就是说,LevelDB很适合应用在查询 ...

  8. logging日志模块,hashlib hash算法相关的库,

    logging: 功能完善的日志模块 import logging #日志的级别 logging.debug("这是个调试信息")#级别10 #常规信息 logging.info( ...

  9. php spl标准库简介(SPL是Standard PHP Library(PHP标准库)(直接看代码实例,特别方便)

    php spl标准库简介(SPL是Standard PHP Library(PHP标准库)(直接看代码实例,特别方便) 一.总结 直接看代码实例,特别方便易懂 thinkphp控制器利眠宁不支持(说明 ...

随机推荐

  1. Vue 修饰符once的方法使用

    once:只执行一次 代码: <!doctype html> <html lang="en"> <head> <meta charset= ...

  2. LeetCode 136:只出现一次的数字 Single Number

    题目: 给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次.找出那个只出现了一次的元素. Given a non-empty array of integers, every e ...

  3. jemalloc内存占用问题

    最近,有部分越南的服务器内存不断上涨,怀疑是内存泄漏,因为框架提供的内存报告里,C内存和Lua占用内存都不大,和ps里看的差好多.总内存在12G左右,C和Lua的加起来约4G,两者相差了8G 经过一番 ...

  4. operator ->重载是怎么做到的?

    https://stackoverflow.com/questions/8777845/overloading-member-access-operators-c struct client { in ...

  5. 死磕 java同步系列之Semaphore源码解析

    问题 (1)Semaphore是什么? (2)Semaphore具有哪些特性? (3)Semaphore通常使用在什么场景中? (4)Semaphore的许可次数是否可以动态增减? (5)Semaph ...

  6. Java生鲜电商平台-用户管理的架构与实战

    Java生鲜电商平台-用户管理的架构与实战 在电商后台中,用户管理是运营人员管理用户的模块.这里的用户区别于运营人员,会在权限的角色管理中分别阐述.这里的用户包含平台的一般用户,会员用户等.本文将分享 ...

  7. sharepointOnline的外接应用创建

    #CODE STARTS HERE $programFiles = [environment]::getfolderpath("programfiles") add-type -P ...

  8. Discuz! X3 数据表、数据字段说明

    pre_common_admincp_cmenu 后台菜单收藏表 字段名 数据类型 默认值 允许非空 自动递增 备注 id smallint(6) unsigned    NO 是   title v ...

  9. linux权限管理-特殊权限

    目录 linux权限管理-特殊权限 一,特殊权限 Linux权限属性chattr概述 linux进程掩码umask linux权限管理-特殊权限 一,特殊权限 1.suid(4000) SetUID( ...

  10. [20190821]关于CPU成本计算.txt

    [20190821]关于CPU成本计算.txt --//有人问链接http://blog.itpub.net/267265/viewspace-2653964/中CPU成本如何计算的,实际上一般在优化 ...