sift算法双向匹配剔除不匹配点_基于改进光流算法的SLAM系统有何优异表现?

2023-05-16

眼睛是人类心灵的窗口,也是人类最重要的感知器官,利用视觉捕捉到的东西在人看来都十分生动形象,但是图像在计算机中的表示就是用一个一个的数字来表示的,远不如人类理解的生动和直观。人类对图片的理解就是通过图像中的物体或者说图像中的特征来进行理解的,因此我们也可以通过计算机提取图像中的特征,实现计算机对图像的理解。在视觉SLAM算法中,前端是一个视觉里程计(visualOdometry),主要是利用相邻图像中的相同特征进行跟踪,利用跟踪到的特征来估计相机的相对运动。

随着局部特征点检测算法快速发展,人们对于特征的认识也越来越深入,近几年来许多学者提出了许许多多的特征检测算法及其改进算法,在众多的特征提取算法中,不乏涌现出佼佼者。从最早期的Moravec,到Hars,再到SIFT、SUSAN、GLOH、SURF算法,特征提取算法层出不穷。各种改进算法PCA-SIFT、ICA-SIFT、P-ASURF、R-ASURF、Radon-SIFT等也是搞得如火如茶。上面的算法如SIFT、SURF提取到的特征也是非常优秀( 具有较强的不变性),但是时间消耗很大,而在一个SLAM系统中,特征提取仅仅是一部分,还要进行特征点匹配、剔除错误匹配、位姿求解等后续算法。因此,我们需要一种提取速度快、鲁棒性好、跟踪稳定的特征点。

角点是一种最简单的图像特征,它们是轮廓之间的交点,在同一场景即使视角发生变化也具有稳定的性质,在该点区域附近的像素点无论在梯度方向上还是在梯度幅值上都有着较大的变化。

5f50571d06d4aab10afc89a8d4e47235.png

Harris角点就是角点特征中的一种,Harris 角点算法的基本思想是使用一个固定窗口在图像上进行任意方向上的滑动,比较滑动前后的两种情况窗口中的像素灰度变化程度。如果存在任意方向上的滑动,都有着较大灰度变化,那么我们可以认为该窗口中存在角点:

c7aedfffbe343d63bfd6218bd540127f.png

将I(x + u,y + v)泰勒展开:

63d52d84603439f0a4e83bff3ba67a29.png

将式(3.2) 代入式(3.1) 得:

89faeb57a8858bf950431597bb1055b3.png

E(u,v)即为该点像素附近的协方差矩阵,对该协方差矩阵进行特征值分解,得到两个特征值。图3.2中对两个特征值进行判断,如果该点是一个较好的特征点,那么该点的两个特征值都比较大,即该点的两个方向都具有较大的灰度变化。“

49e799279a641e539c9ff9bf873cde7e.png

Harris角点是一种较好的图像特征的提取方法,但是这种角点缺少一种表示方法,即两帧图像中的那些角点与上一帧图像里的角点是一样的。这样我们才可以对特征点进行跟踪或者进行回环检测的跟踪,因此我们就需要对特征点进行描述,即用描述子来表示特征点。

Edward Rosten和Tom Drummond经过研究,于2006 年提出了一种FeaturesFrom Accelerated Segment Test特征点,简称FAST。Ethan Rublee, VincentRabaud,Kurt Konolige 以及Gary R.Bradski在2011年一篇名为“ORB: An Efficient Alternative to SIFT or SURF"的文章中提出一种ORB (Oriented FAST and RotatedBRIEF)特征点,从它的名字中可以看出它是对FAST特征点与BRIEF特征描述子的一种结合与改进。ORB特征点结合了FAST特征点与BRIEF特征描述子,并在此基础上做了改进和优化,拥有尺度不变性,旋转不变性,对噪声鲁棒性强,并且计算速度很快,是SIFT 的100倍,是SURF的10倍。

FAST角点:若某像素与其周围邻域内足够多的像素点相差较大,则该像素可能是角点。图3.3与表3.1对FAST角点提取方法进行了详细介绍。

37daba33efc0adf9a0a39a473084ada1.png

图3.3FAST角点

087fcbcb8ec9ac9b5e2165d3f36420b6.png

如何确定ORB特征点的方向?

现在我们已经知道如何在当前尺度空间中提取FAST特征,而特征点除了坐标/尺度属性之外,还需要确定特征点的方向。ORB特征确定特征点方向的思路很简单,首先根据“矩”概念确定当前特征点邻域块的重心位置C,然后根据当前像素点中心O和C的连线方向确定特征点方向。

像素块区域的“矩“定义为:

7d41ee6524503dd3c276b7b8cafffa57.png

重心坐标公式为:

fa811a09c04dbf731e55528fdc019a76.png

特征点的方向角度定义为:

d38234a4c3ccb2d2fcf210d62c394797.png

为了提高方法的旋转不变性,需要确保x和y在半径为r的圆形区域内,即x,y∈[-r,r],r等于邻域半径。这样就可以保证ORB特征点的旋转不变性了。

了解完角点等图像中的特征,我们再来看看光流法:

光流的概念是Gibson 在1950 年首先提出来的。光流法是空间运动物体在观察成像平面上的像素运动的瞬时速度,是利用图像序列中像素在时间域上的变化以及相邻帧之间的相关性来找到上一帧跟当前帧之间存在的对应关系,从而计算出相邻帧之间物体的运动信息的一种方法。因此它也可以用来进行记录特征点的运动。

光流法需要以下几种假设:

①亮度恒定:相同的点在不同图像帧的投影保持亮度一致;

②微小运动:图像中的点的运动幅度不能太大;

③空间连续性:图像中的点和它周围的点具有相同的运动。

f25f4b469015c90a688c1b34dd40ca40.png

图3.4光流法

在t和t+dt时刻,亮度保持不变:

0024d356381ac46ea86946b244be6022.png

将等式左侧进行泰勒展开得到:

719c3bfaf59f833d349d4358e3a0d227.png

因此

560762519f562678c650f07f6d22efc5.png

同时除以DT

87f5f7700fafde5ae1df393355d3d688.png

917b6683ca22c17aca1cee3df419e19e.png

我们得到了一个方程,但是它有两个未知数u,v,如何进行求解呢?在这里利用空间连续性假设,假设在一个窗口内的像素具有相同的运动。我们用一个5x5的窗口用来估计这个运动,那么我们就可以得到一个包括25个方程的等式:

073c8725f3fe517e00ec529094e8086c.png

这是一个过约束的线性方程式,求解最小二乘解。当t取离散时刻而非连续时间时,就可以估计某块像素在下一帧图像中出现的位置了,光流法的假设之一是微小运动, 那么如何定义微小运动假设?为了能够应付运动较大的情况,最好是挑选一个比较大的窗口,来进行运动的估计,但是较大的窗口造成对特征点的跟踪的准确率不高,挑选的窗口的大小是在局部准确性和鲁棒性的一个权衡。为了能够解决这个问题,可以对图像建立高斯金字塔。

aae5a2204274d0db8281642a0a1db343.png

图3.5图像金字塔

图3.5是利用高斯模糊建立起来的高斯图像金字塔,随着金字塔层数的提高,图像尺寸变小,并且会变得模糊。通过建立图像金字塔,我们可以从高层到低层逐层进行光流法跟踪,并将高层光流法跟踪得到的结果作为初值代入低层的金字塔,如图3.6所示,这样不仅能够应对运动范围较大的情况,并且可以得到一个相对准确的跟踪结果,从粗略到精准的记录对特征点进行跟踪,很好地平衡了光流法跟踪的局部准确性和鲁棒性这个问题。

b9027bc179a1503efb0247d06286d56a.png

OpenCV中已经对光流法进行了实现,以最常用的Lucas- Kanade稀疏光流法为例,给出其算法的时间复杂度。Lucas-Kanade的目标是将一一个图形模板T(x)与输入图像I(x)对齐,其中x=(x,y)t为包含像素坐标的列向量,而W(x,p)表示参数化集合,在这里可以取为仿射变换。

5417ff08b24b2c5f529bec318a6ba67c.png

W(x,p)将原来的像素坐标映射到亚像素级的坐标。Lucas-Kanade的目标函数为最小化:

03dd540c8ef8fec2f0067f46868976be.png

假设n为W(x,p)中仿射函数的参数的个数,N为模板中的像素点的个数,则每次迭代的算法复杂度为O(n2N + n3)。

下面我们根据SLAM系统,来改进光流算法:

光流法是一种很强的假设,需要满足亮度恒定、微小运动、空间连续性等条件,但是在实际的SLAM过程中,我们采集的图像并不完全满足这些条件,因此在特征点的跟踪过程中会发生特征点跟踪失败、跟踪错误、甚至完全无法跟踪的情况。

但是对于一个SLAM过程中,对于特征点的跟踪必须稳健、快速,以满足SLAM系统实时性和鲁棒性的要求。因此,我们对光流法进行了改进。

考虑到SLAM系统对特征点跟踪的要求,我们从以下两方面对光流法进行了改进,特征点的跟踪速度,特征点的跟踪的准确性。

在特征点利用光流法跟踪速度方面,参考3.2中的光流法的计算流程,可以从以下方面进行改进:

①减少跟踪的特征点的数量;

②减少高斯金字塔层数; .

③减小特征点跟踪时窗口的大小。

以上的几种方面均可以改善光流法的跟踪速度,但是这些方法,都会降低特征点跟踪的正确性。考虑到光流法跟踪时进行了大量的并行计算,因此如何重点放在如何对这部分并行计算进行加速。普通光流法的这部分计算都是在CPU上完成的,虽然随着CPU技术的发展,运算的速度和频率越来越高,但是在处理大量并行的数据时,GPU在处理能力和存储器带宽上相对于CPU有明显优势,在成本和功耗上也不需要付出太大代价。

一般而言适合GPU运算的应用有如下特征:运算密集、高度并行、控制简单、分多个阶段执行。符合这些条件或者是可以改写成类似特征的应用程序,就能够在GPU上获取较高的性能。得益于开源的OpenCV中,光流算法已经通过CUDA进行了实现,可以很便捷的为我们所用, 图3.7 为通过GPU进行加速时的数据流的流向。

a715ed993b9187c869bdad21880fa0ec.png

图3.8与表3.2为改进光流法的算法,算法的时间复杂度不变,为O(n2N +n3)。假设p1与p1’为两帧图像中的对应点,如果光流法跟踪正确,那么我们可以从p1跟踪到p1’也可以从p1’跟踪到p1,但是由于各种误差存在,不能保证利用光流法对特征点的跟踪100%正确,假设单次光流法跟踪特征点的正确率为q,跟踪正确率的定义如下:

bb9bbda04995d76ec4e5778b45b6931d.png

则通过两次光流法跟踪正确率为:

fb37b1727020637b238b39c658dc93f5.png

当q=0.7时,改进后光流法跟踪正确率为0.91,q=0.8时,改进后光流法跟踪正确率为0.96,通过两次光流法,特征点跟踪正确率会取得较大的提升。

f430868321300aa829eaa728d2c7e431.png

图3.8改进光流法

efb5d36c7de537b7bd888e5243329614.png

091b3d48114e653345a85485205f1ed2.png

84b40d581d05911ceb002cb0c745ba3b.png

图3.9为通过GPU加速的改进光流法消耗时间与普通光流法消耗时间的对比,经计算,通过改进光流法对特征点进行跟踪的平均耗时为0.0026s,通过CPU进行普通光流法平均耗0.0636s,利用GPU加速的光流法即使进行了两次光流,总耗时也远远小于在CPU上进行一次普通光流法的时间,这对一个SLAM系统来讲是非常重要的,对特征点的高速跟踪大大提高了SLAM系统的实时性。

图3.10为通过改进光流法跟踪到的特征点与普通光流法跟踪到的特征点的对比,普通光流法跟踪的特征点存在着较多错误的特征点的跟踪,而改进光流法则有效剔除了错误的特征点,在本例中正确跟踪的特征点几乎为100%,目视无错误的特征点的跟踪。为了能够应对实际SLAM中的各种场景,我们选择了在SLAM过程中经常遇到的各种场景进行实验,验证改进光流法能否在各种复杂情况下能够满足SLAM的需求,我们选择了亮度变化、特征匮乏、因相机抖动模糊、环境过暗等几种情况进行测试,每种场景分别选取了两张图像,上图两张图像间的位移较小,下图两张图像位移较大。

经过改进光流法的特征点的跟踪结果如图3.11,表3.3所示,改进光流法对特征点的正确跟踪率在90%以上,具有较高的跟踪正确率,但是特征点的跟踪数量和成功率会随着图像间位姿的增大而减小,因此在SLAM过程中,应尽量减少相机的瞬间高速移动。

fe95bcd9d3b6fbdfb8468361a9a2b57d.png

图3.11改进光流法实验

高效率的改进光流法对特征点进行跟踪,保证了SLAM系统的实时性要求,高准确率的特征点的跟踪,保证了较为准确的进行运动估计,从而保证了SLAM系统的准确、实时。

本次主要对图像所使用到的特征以及光流法进行了研究,主要介绍了图像中Harris角点和ORB角点的提取方法,对跟踪图像特征点的光流法从算法原理层面进行了研究;考虑到光流法的特征,我们对光流法进行了改进,利用GPU对光流法进行加速,并通过两次光流法对错误的特征点跟踪进行剔除,提高了光流法跟踪的速度和跟踪的正确率,为后续SLAM的系统的实时性和鲁棒性打下了良好的基础。

随着SLAM系统在无人机、无人驾驶、移动机器人等领域的广泛应用,对于SLAM方面的研究也越来越深入,一些企业为助力SLAM研究,开发出专业的SLAM研发平台。已经开发好的视觉SLAM研发平台,可与无人机的完美结合,形成了全套的无人机控制平台研发、视觉图像采集、位姿估计、回环检测、三维地图生成,导航避障算法解决方案。

2ec7509ad18ad34988da249c2b69c894.png

系统组成完善,具有前瞻性

1)无人机平台

可提供多种无人机飞行平台,飞行平台集成光流、激光定高等传感器,均可稳定悬停。飞行平台均提供完善的二次开发接口,支持C++、Python、ROS、Matlab等多种开发接口。

2)视觉传感器

支持Intel D435i、小觅等多种双目视觉相机。

可根据客户需求选配可见光相机、激光雷达、红外相机等多种其他类型的传感器。为客户提供完善的驱动程序支持和二次开发接口。

3)机载计算机

可搭载TX2、树莓派、Intel NUC等多种机载计算机。

4)开发工作站

提供双目视觉slam实时状态可视化界面和自主导航避障轨迹显示界面。

5)视觉导航集成开发环境

提供全套基于机器视觉无人平台自主导航避障系统软件开发体系:包括VIO定位开发框架,MAVROS无人机二次开发SDK、自主导航避障框架、视觉仿真环境等。

6)实验指导书

提供航线飞行和自主导航避障案例以及常见故障解决方案。

47b5839660499ff9257265b963ce26e2.png

平台所具备的特点及应用价值

1) 紧扣目前无人机研究的热点,提供视觉导航、SLAM、视觉避障、人工智能等领域最新的技术。

2)该系统提供全套的学科教学课程、示例算法,包括课程PPT及例程操作指导视频等,可快速展开相关课程设计,进行实际教学应用阶段。而且平台由硬件平台和软件平台组成,可实现slam理论教学和硬件实操。

可开设实验课程如下:

⦁SLAM教学;

⦁飞思视觉slam硬件平台介绍;

⦁飞思视觉slam软件平台介绍;

⦁相机原理、点云原理、GPU加速原理简介;

⦁飞思视觉slam平台支持的视觉slam架构,包括VINS,ORB_SLAM和Rovio,降低学校教师或学生学习SLAM的门槛;

⦁视觉slam主流技术介绍,包括多传感器融合算法,KLT光流算法双目VIO;

⦁视觉词袋技术介绍;

⦁回环检测技术介绍,包括重定位技术、全局位姿估计技术;

⦁无人机通信技术,包括Mavlimk介绍和Mavros介绍;

⦁自主导航避障算法介绍;

⦁飞思视觉slam平台应用实例介绍;

⦁航线飞行实例,自主导航避障实例。

3)提供全套的机器视觉与视觉导航的开发环境、仿真环境、硬件平台,所提供的硬件均提供完善的二次开发接口和实例代码,省去用户从头搭建开发平台的繁杂工作。

4)提供完整的无人平台控制、通讯链路、视觉图像采集、图像识别、三维重建、定位解算等软件算法解决方案。提供了VIO、LocalPlanner等多种实例程序,用户只需要简单配置即可实现完整的自主定位、自主建图、自主导航、自主避障等功能。

de54c38ccddd91f8cbc9bbebeaf300e4.png

SLAM技术有着严密的数学理论基础,在经典时代( 1986-2004) 使用到了贝叶斯法则、卡尔曼滤波、扩展卡尔曼滤波、粒子滤波、马尔科夫假设等基于概率统计的SLAM方法,利用迭代方法递推机器人位姿和周围环境特征点位置等状态变量的变化。在意识到SLAM问题的稀疏性以后,进入了算法分析时代(2004-今),在算法分析时代深入研究了SLAM系统的基础性质,包括了系统的观测、收敛、连续等性质,并发展了基于图优化的优化方法,将整个SLAM的系统每个时刻的状态当做一个稀疏性的优化问题进行整体解决。

1305a62b0d5ffc84d0cfb7a8693a3b0c.png

d5e91319b02a790f7867e124429d448c.png往期精彩01视觉SLAM—关于无人机精准定位和场景重构VIO有话说02视觉SLAM中这个算法用的好,会让开发工作事半功倍0 3视觉SLAM开源方案——如何利用RTAB-MAP解决在线闭环检测问题 298ebabbb4caf9112a2203f3c99bc4d6.png 6daa15ca9f0cc05a620d2c3c7c8d6ae4.gif

飞思实验室

让无人智能科研更简单

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

sift算法双向匹配剔除不匹配点_基于改进光流算法的SLAM系统有何优异表现? 的相关文章

随机推荐