视觉SLAM:ORB视觉里程计的简单实现(四)

1、更新内容

上一篇,使用ORB-SLAM2中的均匀分布的ORB特征点提取算法,对原始的特征提取算法进行替换,使得提取的特征点均匀分布在场景中。这样做的好处在于:

  • 1、集中分布的特征点如果某一特征点出现错误的匹配,那么这一特征点周围可能还存在大量的特征点也同样是误匹配,这样的话产生的误差就可能比较大。
  • 2、均匀分布的特征点可以使得计算的空间三维点分布在场景中的各个区域,这样在使用PNP算法计算位姿时,一般不会产生错误的估计。(PNP算法如果使用平面的三维点去对应二维点,很容易计算出错误的位姿,这也就是均匀分布的好处)

2、均匀分布的ORB算法介绍

使用我在以前论文中的描述做简单的说明:

  • 原始的ORB特征提取算法直接对整个图像进行特征点提取,使得特征点集中分布在图像的某个区域,再通过视差估计深度时容易产生随机误差。因此,需要将图像进行分块,对每一块都提取一定的ORB特征点,以此来保存其均匀分布在图像中,减少随机误差的生成。首先搭建图像高斯金字塔,如图所示:
    在这里插入图片描述
    图中原始图像的大小为640*480,高斯金字塔的尺度为 ,层数 。通过使用高斯金字塔对图像进行尺度分层,对每一层都提取ORB特征点,获得具有尺度不变性的ORB特征点。

  • 然后,对原始图像与金字塔图像进行网格划分,假设原始图像被划分为64*48个网格,由于在高斯金字塔中上一层图像的尺寸比下一层图像的尺寸缩小1.2倍,因此网格的数量同样如此。然后,对每一层的图像都实现ORB特征点提取,假设需要获得的特征点总数为1000个,那么对于每一层需要提取的特征点数量为:
    a m = a 1 s m , a 1 = 1000 ∗ ( 1 − s ) / ( 1 − s n ) a_{m}=a_{1} s^{m}, a_{1}=1000 *(1-s) /\left(1-s^{n}\right) am=a1sm,a1=1000(1s)/(1sn)
    其中:
    m = { 2 , 3 , … , n } m=\{2,3, \ldots, n\} m={2,3,,n}
    根据等比数列前n项和有:
    S n = a 1 ( 1 − s n ) / ( 1 − s ) S_{n}=a_{1}\left(1-s^{n}\right) /(1-s) Sn=a1(1sn)/(1s)
    结合上式面几个式子可以得到,高斯金字塔所有层提取的特征点总数为1000个,与设定的值相等。

  • 对于具体的每层图像中的每个网格的特征点提取,由于每层图像提取的特征点数量是固定的,因此可以设定每个网格提取固定的特征点。设定每个网格的FAST角点的初始阈值为20,当某个网格提取不到角点时,减小该网格的FAST角点阈值继续提取,若阈值小于12之后还是没有角点则放弃对该网格的特征提取。为了保持特征点的旋转不变性,因此对于每一个角点特征,需要在其半径为3像素的圆形区域内计算其的质心位置,以此来获得该特征点的主方向。同时为了进行特征点的匹配,需要计算每一个角点特征的描述子,本文使用BRIEF算法进行角点特征的描述子计算,以此来生成ORB特征点。

  • 此外以上获得的是在高斯金字塔上每一层图像的ORB特征点,对于不在原始层上的特征点,需要通过尺度信息将其映射到原始层,得到该特征点对应的实际像素坐标。同时为了提高ORB特征点使用的效率,如图所示,使用四叉树的方式对提取的ORB特征点进行保存,便于使用和匹配。
    在这里插入图片描述
    按照图中的图像划分,将各个部分中的特征点以此放入四叉树的根节点和叶子节点。若该区域没有其他的特征点,那么就结束划分,否则继续对可以划分的区域添加叶子节点,直到划分结束。

3、实验结果

  • 具体的实现代码已上传到github上,实验结果为:
    在这里插入图片描述
    在这里插入图片描述
  • 相比于原来的算法,现在的特征点均匀分布在空间的各个区域了。

4、整个工程代码及三方库

  • 1
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: ORB-SLAM是一种针对视觉SLAM(Simultaneous Localization and Mapping)的算法,它是一种利用单目相机进行实时定位和地图构建的技术。与传统的SLAM算法相比,ORB-SLAM使用了优化的特征提取与匹配、相机姿态估计、地图点云生成等关键技术,实现了更准确和高效的视觉定位和地图构建。 ORB-SLAM的核心思想是通过提取图像中的ORB(Oriented FAST and Rotated BRIEF)特征点,利用稀疏直接法进行地图点云的生成,然后通过优化的方式估计相机的运动姿态,同时通过特征点匹配和三角测量的方式构建稠密地图。其中,FAST和BRIEF是经典的特征点提取和描述子算法,ORB则是在此基础上进行了优化和改进,使得ORB特征点具有更好的旋转不变性和描述准确性。 ORB-SLAM采用了基于词袋模型的视觉回环检测算法,通过在线构建地图和离线建立数据库来实现回环检测,从而解决了传统SLAM算法的漂移问题。此外,ORB-SLAM还能够自动初始化地图,将相机的初始位置作为关键帧,并在运动过程中持续优化位姿和地图,保持对环境的实时感知。 ORB-SLAM在单目相机定位和地图构建方面表现出色,能够在实时视频流中实现精确的位置跟踪和环境地图的构建。除了单目相机,ORB-SLAM还可以支持双目和深度相机,在各种不同环境和应用场景下都能够取得较好的效果。 总之,ORB-SLAM里程计模块利用ORB特征点提取和匹配、相机姿态估计、地图点云生成等关键技术,实现了精确的实时定位和地图构建,为视觉SLAM技术的应用提供了强大的支持。 ### 回答2: ORB-SLAM(Oriented Fast and Rotated BRIEF-Simultaneous Localization and Mapping)是一种视觉里程计算法。 ORB-SLAM算法结合了FAST角点检测器、ORB特征描述子和BRIEF特征匹配器,通过对相机图像进行处理,可以同时实现实时的定位和构建三维地图。 该算法的视觉里程计部分主要使用FAST角点检测器来检测关键点,然后使用ORB描述子来对这些关键点进行描述。通过匹配两个连续帧之间的关键点,可以计算出相机在三维空间中的运动。同时,ORB-SLAM还会使用RANSAC算法来去除错误匹配,提高精度。 在构建地图方面,ORB-SLAM算法通过观测关键点在连续帧之间的运动来计算相机的轨迹,并且使用三角化方法来恢复场景中关键点的三维位置。这样,就可以逐步构建出一个稠密的三维地图。 ORB-SLAM还具有回环检测和优化的功能。通过检测相机轨迹中的回环,算法可以利用之前观察到的地图和关键点信息,进一步提高定位和地图的准确性。此外,算法还会使用图优化技术来优化地图的结构和相机的轨迹,进一步提高地图的重建质量。 总而言之,ORB-SLAM是一种基于特征点的视觉里程计算法,能够实时地定位相机并构建稠密的三维地图。它的特点是精度高、计算效率高、对环境变化有较好的适应性,因此在机器人导航、增强现实等领域具有广泛的应用前景。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值