SLAM BOW词袋重定位

2023-10-19 23:59
文章标签 slam 定位 词袋 bow

本文主要是介绍SLAM BOW词袋重定位,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

visual bag of words 词袋用于SLAM重定位

  • DBOW
    • Binary features
    • Image database
    • Loop detection
      • A. Data base query
      • B. Matching grouping
      • C. Temporal consistency
      • D. Efficient geometrical consistency
    • 结果分析
  • ORBSLAM2 中的Relocalization
    • 根据词袋计算得到候选
    • 下一步计算位姿
  • 使用方法
    • 1. 创建图像数据集并且提取对应的特征点数据
    • 2. 创建Vocabulary
    • 3. 新图像匹配
    • 4. 增加新图片进数据库
  • VINS 的重定位模块
  • 使用FBOW匹配特征点
      • 1. 首先整理关键帧图像数据库
      • 2. 提取新输入图片的向量
      • 3. 从数据库中匹配得到匹配值最高的图片
      • 4. 选取candidate进行特征点匹配
  • ORBSLAM2 implementation DOW2

DBOW

bags of binary words for fast place recognition in image sequence (https://ieeexplore.ieee.org/document/6202705) 这篇文章参考了前文,是ORBSLAM2中重定位模块的基础。首先按照文章的结构介绍这一篇文章。

Binary features

  • 文章中使用FAST特征点和BRIEF描述子。
  • FAST和BRIEF特征点计算速度快。
  • 使用二进制的BRIEF描述子计算二进制距离可以使用位运算符(xor),计算hamming距离。

Image database

来自原文章

  • 预先离线收集图像,建立vocabulary。主要包括Inverse index 和Direct index。Inverse index是针对每一个词袋的单词,并且记录每个单词在每个关键帧的权重。Direct index是对每个层的记录,记录了在一张图片在当前层有哪些节点包含了图片中的特征word。
  • 使用k means和k medians clustering。使用tf-idf作为权重。
  • Inverse index是为了以后计算中更快的访问每个单词的权重。
  • Direct index是为了更加方便的存储每张图片的每个节点的特征信息。
  • 对于一张新图片,对每个特征点在词袋中寻找hamming距离最近的word。最终encoding成一个t维的向量(t为单词的数量)。

Loop detection

A. Data base query

  • 简单的来说就是寻找队列中距离最近的一个关键帧。
  • 文章中使用一个归一化的score。具体定义可以参见原文章。

B. Matching grouping

  • 如果当前的图片和候选人X很“接近”,那么当前图片和X邻近的的一些关键帧也会同样接近。这不是我们想要的。
  • 所以文章提出讲候选图片先grouping据类成一个个island。每个island中只会有一个最终的结果。

C. Temporal consistency

  • 如果当前图片和某一个候选人很接近,那么上一帧应该和这个候选人很接近才对。
  • 所以下一步的检验是候选人帧和上一帧的匹配检测。
  • 最终得到最终候选人。

D. Efficient geometrical consistency

  • 在获取最终的候选人之后要进行几何验证。
  • 首先是使用之前的Direct index找到可能相似的特征匹配候选。
  • 使用RANSAC fundament matrix匹配。

结果分析

  • BRIEF特征点找到的匹配大多数是中距离和远距离的。因为BRIEF没有scale信息。
  • SURF特征点点对近距离的特征效果更好。

ORBSLAM2 中的Relocalization

根据词袋计算得到候选

  • 这一个流程基本和前面的ABC思想一致。
  • 在所有关键帧中找与当前帧有公用单词的帧。
  • 提取中存在足够过共有单词的关键帧。
  • 计算相似分数,并且根据co-visibility累积分数。
  • 返回所有高分的候选。

下一步计算位姿

  • 类似上面的C步骤,使用Direct Index寻找特征点匹配。
  • 使用PnP RANSAC,寻找更加准确的匹配点,并且设置位姿初始值。
  • Pose optimization (bundle adjustment)优化位姿,得到最终结果。

使用方法

下面以FBOW为例子,介绍BOW的整个使用步骤。

1. 创建图像数据集并且提取对应的特征点数据

提取方式有很多,这里就不赘述了。

2. 创建Vocabulary

根据上面提取的特征点数据,将描述子的格式转变为一个vector。然后选择适当的创建参数,最后开始创建。整个过程需要一段

这篇关于SLAM BOW词袋重定位的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/243233

相关文章

无人叉车3d激光slam多房间建图定位异常处理方案-墙体画线地图切分方案

墙体画线地图切分方案 针对问题:墙体两侧特征混淆误匹配,导致建图和定位偏差,表现为过门跳变、外月台走歪等 ·解决思路:预期的根治方案IGICP需要较长时间完成上线,先使用切分地图的工程化方案,即墙体两侧切分为不同地图,在某一侧只使用该侧地图进行定位 方案思路 切分原理:切分地图基于关键帧位置,而非点云。 理论基础:光照是直线的,一帧点云必定只能照射到墙的一侧,无法同时照到两侧实践考虑:关

js定位navigator.geolocation

一、简介   html5为window.navigator提供了geolocation属性,用于获取基于浏览器的当前用户地理位置。   window.navigator.geolocation提供了3个方法分别是: void getCurrentPosition(onSuccess,onError,options);//获取用户当前位置int watchCurrentPosition(

flume系列之:记录一次flume agent进程被异常oom kill -9的原因定位

flume系列之:记录一次flume agent进程被异常oom kill -9的原因定位 一、背景二、定位问题三、解决方法 一、背景 flume系列之:定位flume没有关闭某个时间点生成的tmp文件的原因,并制定解决方案在博主上面这篇文章的基础上,在机器内存、cpu资源、flume agent资源都足够的情况下,flume agent又出现了tmp文件无法关闭的情况 二、

一次生产环境大量CLOSE_WAIT导致服务无法访问的定位过程

1.症状 生产环境的一个服务突然无法访问,服务的交互过程如下所示: 所有的请求都是通过网关进入,之后分发到后端服务。 现在的情况是用户服务无法访问商旅服务,网关有大量java.net.SocketTimeoutException: Read timed out报错日志,商旅服务也不断有日志打印,大多是回调和定时任务日志,所以故障点在网关和商旅服务,大概率是商旅服务无法访问导致网关超时。 后

定位cpu占用过高的线程和对应的方法

如何定位cpu占用过高的线程和对应的方法? 主要是通过线程id找到对应的方法。 1 查询某个用户cpu占用最高的进程号 top -u 用户名 2 查询这个进程中占用cpu最高的线程号 top –p 进程号-H    3 查询到进程id后把进程相关的代码打印到jstack文件 jstack -l pid > jstack.txt 4 在jstack文件中通过16进制的线程id搜索到

Autoware 定位之ndt定位(八)

0. 简介 这一讲按照《Autoware 技术代码解读(三)》梳理的顺序,我们来说一说Autoware中的ndt定位,这个软件包有两个主要功能:1. 通过扫描匹配进行位置估计,2. 通过ROS服务使用蒙特卡洛方法估计初始位置 1. 代码阅读 1.1 debug.cpp 这段代码是一个用于生成用于调试的可视化标记数组的函数。它接受时间戳、坐标系、缩放比例、粒子信息和索引作为输入,并返回一个

python 定位元素

获取元素列表gg = driver.find_elements_by_css_selector("div.offer-attr-item")循环元素列表for g in range(0,len(gg)):获取元素列表下面的元素,==定位元素后,可以继续定位gname = driver.find_elements_by_css_selector("div.offer-attr-item")[

物联网-标识定位

标识技术 一维条码 商品条码-UPC EAN ISBN码 977-期刊ISSN 二维码

激光SLAM如何动态管理关键帧和地图

0. 简介 个人在想在长期执行的SLAM程序时,当场景发生替换时,激光SLAM如何有效的更新或者替换地图是非常关键的。在看了很多Life-Long的文章后,个人觉得可以按照以下思路去做。这里可以给大家分享一下 <br/> 1. 初始化保存关键帧 首先对应的应该是初始化设置,初始化设置当中会保存关键帧数据,这里的对应的关键帧点云数据会被存放在history_kf_lidar当中,这个数据是和

镭射定位灯激光定位使用注意事项?

在现代工业、建筑测量、舞台设计以及科研实验等领域,镭射定位灯(常称激光定位器)因其高精度、远射程和直观性而得到广泛应用。然而,激光作为一种高强度光束,其使用若不当,不仅可能损害设备,还可能对人体健康造成危害。因此,掌握镭射定位灯激光定位的正确使用方法及注意事项至关重要。下面就跟着鑫优威一起来了解一下。   一、安全为先,做好防护   首先,操作者必须佩戴符合标准的激光防护眼镜,以防止激光直