视觉SLAM理论入门——(6)视觉里程计之特征点法—特征点

 

一个SLAM系统可以分为前端和后端,其中前端称为视觉里程计,其作用是根据相邻图像的信息估计出粗略的相机运动,给后端提供较好的初始值

视觉里程计的算法主要有两大类:特征点法(主流方法)、直接法

 

1、特征点

视觉里程计的核心问题是根据图像估计相机运动。特征点法是从各个图像中选取相同的有代表性的点(相机视角发生少量变化时,这些点保持不变),在这些点的基础上讨论相机位姿估计问题以及这些点的定位问题。在经典SLAM模型中,这些点是路标;在视觉SLAM中,这些点是图像特征

数字图像在计算机中以灰度值矩阵方式存储。在视觉里程计中,希望特征点在相机运动后保持稳定,而灰度值容易受光照、形变、物体材质等影响,在不同图像之间变化很大,不稳定。因此仅凭灰度值不够,需要对图像提取特征点

特征点是图像里一些特别的地方,一般可以分为角点、边缘、区块。区分同一个角点最简单,区分一个区块最难。在大多数应用中,单纯的角点不能满足需求。例如,从远处看是角点的地方,当相机靠近或者旋转,可能就不显示为角点了。因此,研究者们设计了许多更稳定的局部图像特征,如:SIFT、SURF、ORB,它们比一般的角点有更好的特性:

1、可重复性:相同特征可以在不同图像中找到

2、可区别性:不同特征有不同表达

3、高效率:同一个图像中,特征点数量远小于像素点数量

4、本地性:特征只与一小片图像区域相关

 

特征点由关键点和描述子组成。关键点是特征点在图像中的位置,有些特征点还具有朝向、大小等信息。描述子描述了这个关键点周边像素的信息。只要两个特征点的描述子在向量空间上距离很近,就认为它们是同一个特征点

SIFT(尺度不变特征变换)是一种很精确的表达,但计算量较大。一般CPU无法实时计算SIFT特征,因此SLAM比较少采用

FAST关键点(不是特征点,没有描述子)适当降低精度和鲁棒性,提升计算速度

ORB(Oriented FAST and Rotated BRIEF)特征是目前比较有代表性的实时图像特征,它改进了FAST不具有方向性的问题,同时采用速度极快的二进制描述子BRIEF(Binary Robust Independent Elementary Feature),加快图像特征提取速度

 

2、ORB特征

ORB特征的关键点称为Oriented FAST,是改进的FAST角点(计算了特征点的主方向,为BRIEF增加旋转不变形);描述子称为BRIEF(使用先前计算的方向信息)

2.1、FAST关键点

FAST是一种角点,检测局部像素灰度变化明显的地方,速度快。主要思想:如果一个像素与邻域的像素差别较大(过亮或者过暗),它更可能是角点。相比于其他角点检测算法,FAST只需要比较像素亮度,因此速度快

检测过程:

1、在图像中选取像素 p ,假设亮度为 I_p

2、设置阈值 T (例如 I_p 的20%)

3、以像素 p 为中心,选取半径为3的圆上16个像素点

4、假如选取的圆上有连续的N个点的亮度大于 I_p + T 或者小于  I_p - T ,则像素 p 被认为是特征点(N一般取12、9、11,称为FAST-12、FAST-9、FAST-11)

5、循环上面四步,对每个像素执行相同操作

 

在FAST-12算法中,为了高效,添加一项预测试操作,可以快速排出大多数不是角点的像素点。具体操作为:对每个像素点,直接检测邻域圆上的第1,5,9,13个像素亮度,只有当这4个像素中有3个同时大于 I_p + T 或者小于  I_p - T ,像素才可能是一个角点

另外,原始的FAST角点经常出现“扎堆”现象,因此第一遍检测之后,需要用非极大值抑制,在一定区域内仅保留极大值的角点,避免角点集中

针对FAST不具有方向性以及尺度的弱点,ORB添加了尺度和旋转的描述。尺度不变性通过构建图像金字塔,在金字塔每一层检测角点实现。特征的旋转由灰度质心法实现

金字塔是指对图像进行不同层次的降采样,获得不同分辨率的图像。金字塔低层是原始图像,每往上一层,对图像进行一个固定倍率的缩放。较小的图像可以看成是远处看过来的场景。在特征匹配算法中,可以匹配不同层上的图像,从而实现尺度不变性

如果相机在后退,可以从上一个图像金字塔的上层,或者下一个图像金字塔的下层中找到匹配

在旋转方面,需要计算特征点附近的图像灰度质心。质心是指以图像块灰度值作为权重的中心。具体步骤:

1、在一个小的图像块B中,定义图像块的矩 m_{pq} = \sum_{x,y\epsilon B}x^py^qI(x,y), p,q={0,1}

2、通过矩找到图像块的质心: C=(\frac{m_{10}}{m_{00}},\frac{m_{01}}{m_{00}})

3、连接图像块的几何中心 O 和质心 C ,得到方向向量 \underset{OC}{\rightarrow} ,特征点的方向可以定义为 \theta = arctan(\frac{m_{01}}{m_{10}})

 

 

2.2、BRIEF描述子

BRIEF是二进制描述子,描述向量由0,1组成,而0,1编码了关键点附近的两个随机像素(p,q)的大小关系:如果p比q大,取1,反之取0。BRIEF使用随机选点的比较,速度快,适用于实时图像匹配。ORB的改进BRIEF可以利用关键点提供的方向信息,计算旋转后的 "Steer BRIEF" 特征,使ORB描述子具有较好的旋转不变性

 

2.3、特征匹配

特征匹配解决SLAM中数据关联问题:确定当前看到的路标与之前看到的路标之间的对应关系。由于图像特征的局部特性,误匹配情况广泛存在。部分原因是场景中存在大量的重复纹理,使得不同特征点的特征描述非常相似。这时,只利用局部特征解决误匹配很困难

假设图像 I_t 提取了特征点 x_t^m,m=1,2,...,M ,图像 I_{t+1} 提取了特征点 x_{t+1}^n,n=1,2,...,N 

最简单的特征匹配方法是暴力匹配。对每个特征点 x_t^m 和所有的 x_{t+1}^n 测量描述子距离,然后排序,取最近的一个作为匹配点。其中描述子的距离表示了两个特征之间的相似程度

实际运用时可以选择不同距离度量范数。对于浮点类型的描述子,使用欧氏距离;对于二进制的描述子,多数使用汉明距离。两个二进制串之间的汉明距离指的是它们不同位数的个数

当特征点数量很大,暴力匹配运算量很大,不满足SLAM的实时性需求,这时可以采用快速近似最近邻(FLANN)算法


 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实现基于特征点视觉里程计功能,需要进行以下步骤: 1. 安装ROS(Robot Operating System)以及相关的依赖库。 2. 安装视觉SLAM(Simultaneous Localization and Mapping)框架,例如ORB-SLAM、LSD-SLAM、SVO等。 3. 准备相机和IMU(Inertial Measurement Unit)的数据,并进行预处理,例如去畸变、去重采样等。 4. 运行视觉SLAM框架,进行相机位姿的估计和地图构建。 5. 将IMU数据与视觉SLAM估计的位姿进行融合,得到更准确的位姿估计。 6. 对位姿进行优化和滤波,例如使用卡尔曼滤波、扩展卡尔曼滤波等。 以下是基于ORB-SLAM2实现基于特征点视觉里程计功能的具体步骤: 1. 安装ROS以及ORB-SLAM2和相关依赖库: ``` sudo apt-get install ros-kinetic-desktop-full sudo apt-get install ros-kinetic-libg2o sudo apt-get install ros-kinetic-libg2o-dev sudo apt-get install ros-kinetic-pcl-ros sudo apt-get install libglew-dev sudo apt-get install libboost-all-dev ``` 2. 下载ORB-SLAM2源代码并编译: ``` git clone https://github.com/raulmur/ORB_SLAM2.git cd ORB_SLAM2 chmod +x build.sh ./build.sh ``` 3. 准备相机和IMU数据,并进行预处理。可以使用ROS自带的相机驱动和IMU驱动,例如Intel RealSense相机和Intel RealSense IMU。 4. 运行ORB-SLAM2节点,进行相机位姿的估计和地图构建: ``` rosrun ORB_SLAM2 Mono /path/to/vocabulary /path/to/settings ``` 其中,/path/to/vocabulary是ORB-SLAM2的词袋文件路径,/path/to/settings是ORB-SLAM2的配置文件路径。 5. 将IMU数据与ORB-SLAM2估计的位姿进行融合,得到更准确的位姿估计。可以使用IMU数据进行前向运动估计和旋转估计,然后将ORB-SLAM2估计的位姿进行修正。 6. 对位姿进行优化和滤波。可以使用卡尔曼滤波、扩展卡尔曼滤波等进行位姿优化和滤波,得到更精确和稳定的视觉里程计结果。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值