APP下载

基于高斯金字塔的视觉里程计算法研究

2020-09-21徐雪松

华东交通大学学报 2020年4期
关键词:角点高斯金字塔

刘 瑞,徐雪松,曾 昱

(华东交通大学 电气与自动化工程学院,江西 南昌330013)

视觉里程计算法[1-2]是视觉定位的方法之一,通过在车辆、机器人等载体上装备的单个或多个相机获取视频信息,然后通过对连续帧图像分析计算运动情况[3]。 相比全球定位系统或惯性导航等定位方式,视觉里程计[4-5]成本更低、累积误差更小,因而在室内和航空航天等领域发挥着重要的作用[6],是对传统定位方式的有效补充[7]。

视觉里程计的主要环节包括图片获取、特征提取与匹配追踪、运动估计等[8]。图片获取可通过相机获得。特征提取与追踪[9-10]是匹配或追踪前后帧的同一特征点。 运动估计则是根据特征点变换信息并结合相机内外参数恢复其运动信息。在特征提取环节中,由于角点检测算法简单、实时性好,为目前常用的提取算法,主要分为基于图像边缘和基于图像灰度的方法两大类[11]。 基于灰度的方法运行速度快、精度高,为主流算法。代表性算法有Moravec、Fast、Harris、Shi-Tomasi 等。但这些算法存在一个共同问题:容易出现角点聚簇现象。

为解决特征分布不均匀的问题,一些学者进行了研究。 如:文献[12]利用相邻匹配特征点之间的空间距离不变性,将特征点分为静态与动态区域,最终只提取静态背景区域的特征点。 文献[13]将图片均匀等分成几个区域,然后对每个区域釆用不同的阈值进行特征提取。这些方法的基本思路都是先将图像分块,然后针对不同块选择不同阈值,以保证每个部分都保留基本的角点信息。对于这类方法,合理分块和选择角点阈值都是很重要的问题。

针对角点分布聚集问题,本文将高斯金字塔[14-15]方法应用到视觉里程计中的角点特征提取过程中,提出了一种新的角点提取方法。该方法通过对金字塔顶层图像进行角点提取,对特征位置进行粗定位;然后映射到金字塔底层图像进行精确定位,从而获取均匀的角点信息。 文章采用KITTI 数据集进行了算法验证,结果表明该方法能够有效改善所提取的角点分布均匀性和所恢复得运动信息的精确度。

1 基于高斯金字塔的角点提取算法

1.1 促进角点信息均匀化的思路

造成角点信息分布不均匀的根本问题在于角点特征反差太大。 对于纹理特征分布不均衡的图像,角点特征都聚集在纹理丰富区域,而纹理稀疏区域则数量很少。 针对该问题,应该对各个区域精准定位,单独提取特征。 基本思路是通过高斯金字塔缩小原图尺度,压缩原纹理丰富区域细节,增加纹理稀疏区域纹理。 通过尺度压缩可以自适应的促使整个图像特征分布均匀化,通过控制每个区域的特征数量来促使不同的图像特征信息保持在一个稳定的范围内。

本文先采用Shi-Tomasi 方法提取小尺度图片角点, 这些角点信息可以提示原图像对应位置特征信息。不过,由于高斯金字塔变换会模糊图像细节,故小尺度图像的角点信息精确度不够。 因此,可将该角点位置映射回原图,在原图相对应位置的周围区域重新分块搜索精确的角点位置,这样一来,既在宏观上保持了角点分布的均匀性,在微观上也能获得更精确的角点位置信息。

1.2 角点提取算法流程

基于高斯金字塔的角点提取算法主要有以下几个步骤:

Step1:用高斯金字塔对原图像进行尺度压缩。

设原图为I,高斯金字塔有N 层,从塔底到塔顶图像为I1,I2,…,IN,则高斯金字塔可以用公式(1)生成

其中:l 为第l 个图层;w(m,n)为高斯滤波窗口函数;1≤l≤N,0≤i≤r,0≤j≤c;r,c 分别是第l 图层的高和宽。

Step2:提取高斯金字塔顶层图像角点信息。

角点提取算法很多,如Sift、Fast、Shi-Tomasi 等。 考虑到Shi-Tomasi 方法稳定性好、自适应能力强、实时性好,本文选用Shi-tomasi 方法对金字塔顶层图像进行角点提取。 具体计算方法如下:

Step2.1:逐个像素点计算金字塔顶层图像IN的横向梯度Ix和纵向梯度Iy。

Step2.2:按公式(2)计算每个像素点的M 矩阵

其中:w(x,y)是窗口滤波函数,通常选择为高斯函数;x 和y 是所选择的平滑窗口内的像素点坐标索引。

Step2.3:逐个像素点计算相应像素点M 矩阵的特征值λ1、λ2,若两个特征值中较小的一个大于最小阈值,则会得到角点,并标记相应位置。 所得角点位置数据集为corners1

其中:i、j 是当前像素点位置索引;n1为角点数阈值。

Step3:将顶层角点位置信息映射回原图,确定原图的角点搜索区域。 该过程分成如下几步:

Step3.1:按公式(4)计算corners1 对应原图像的位置corners2

其中:N 为金字塔层数。

Step3.2:以corners2 中各点为中心,重新确定角点搜索窗口。 由第k 个点构成的窗口范围为

其中:角点搜索窗口的宽度为W+1,高度为H+1。

Step3.3:针对每个搜索窗口,按特定数量阈值Q,采用Shi-Tomasi 方法搜索角点信息,并记录下来。具体计算方法见Step2.1-Step2.3。 第k 个窗口搜索到的角点坐标信息构成角点集corners3k。

Step3.4:将所有窗口搜索结果合成角点集corners,也就是最终结果

2 实验结果及分析

为了验证算法的有效性,本文进行了相关实验。 实验主要分两步进行:第1 步是角点提取算法的比较。分别采用Shi-Tomasi、Fast、Harris 算法和本文算法对相同图像进行角点提取,用来反映四种算法在保证提取信息均匀化方面的性能;第2 步是采用不同的角点提取方法计算载体运动信息精确度的对比,主要是将几种算法应用于视觉里程计,计算载体运动信息,用来观察本文角点提取方法对载体运动信息计算精确度的影响。

采用的硬件平台是Windows10 64 位NVIDIA GeForce MX150,软件平台是vs2017+opencv3.4,用做实验的数据集采用通用的KITTI[16]数据集。

2.1 角点提取算法比较

图片选取的是KITTI 数据集中一张典型的路面信息图,环境单一,路面纹理较弱,图片中一般只有天空、草丛和树叶等信息。因为路旁树木繁茂,纹理丰富;路面光滑,纹理较少,两者反差较大,再加上光线的不确定因素,特征很难提取均匀。在高速公路这种典型的纹理分布不均匀场景中行驶,树叶和天空形成的斑驳印记一般都是角点聚簇的区域,存在大量相似、重复、聚集的角点,这种类型的角点在前后帧追踪时难度较大。如遇转弯或角点聚集在图片边缘等情形,前后帧画面差别较大,大量聚集在边缘的角点易大量瞬间滑出画面,无法保证图片角点个数稳定在一个常数周围。 而且,图像中的角点相对集中,利用不够离散的角点求解位姿不能够代表相邻帧之间的位姿变化。

本文分别采用Shi-Tomasi、Harris、Fast 以及本文算法对图片进行角点提取, 每种方法均提取300 个角点,其中本文算法参数为N=3,W=H=30,n1=147,Q=2。 4 种算法角点分布情况见图1~图4。

图1 Shi-Tomasi 算法提取结果Fig.1 Extraction result of Shi-Tomasi algorithm

图2 Fast 算法提取结果Fig.2 Extraction results of Fast algorithm

图3 Harris 算法提取结果Fig.3 Extraction results of Harris algorithm

图4 本文算法提取结果Fig.4 Extraction results of the text algorithm

从图1 与图4 可以看出,Harris 与Shi-Tomasi 算法角点聚簇现象比较明显, 主要聚集在光线明亮、树叶、草丛等强纹理区域。 Fast 算法则强烈依赖阈值,角点聚集程度很高,而本文算法检测到的角点,原本聚簇、相似的角点被分隔开来,原本光线较暗区域也有角点被提取出来,整张图片各个角落、各个区域都有角点分布,分布均匀、离散。

为验证本文算法可满足角点提取实时性要求, 采用本文算法与Shi-Tomasi 算法、Fast 算法、Harris 算法分别对2 张图片进行不同角点阈值的特征提取,角点检测时间如下表1 所示。 计算中,感兴趣区域的获取以及每个区域进行二次角点提取是导致运行速度慢的的主要原因。 但是尺度化处理缩小了需处理图片的大小,这在一定程度上弥补了感兴趣区域耗时的缺点,满足实时性要求。

表1 计算时间比较Tab.1 Comparison of calculation times

为了检验本文算法对追踪信息的保持能力,采用KITTI 数据集01 序列与10 序列,用金字塔LK 光流法追踪前20 帧图片,并与综合性能表现最好的Shi-Tomasi 方法进行对比。 金字塔LK 光流法是在原光流法的基础上加入了图像金字塔算法,用于解决单纯光流法只适用于相机的微小运动,而在实际情况中经常出现较大的运动幅度的问题。 金字塔LK 光流法为常用的角点追踪算法。

01 序列与10 序列采集的是转弯处数据集,前后帧画面差别较大。 采用召回率来反应光流追踪性能,召回率=追踪角点个数/角点个数,角点个数即第一帧图片检测到的总角点个数,追踪角点个数为之后每一帧追踪到的角点个数。为反映召回率,没有设置追踪角点个数低于某个阈值即重新检测。召回率反映了角点的可区分性,召回率高说明角点可区分性好。

具体情况如图5 所示,随着物体的运动,一些角点会逐渐跑出画面外,所以召回率是逐渐降低的。 从图中可看出,均匀化后的本文算法召回率优于原Shi-Tomasi 算法,更有利于维持不同图像特征点数量的稳定性。

图5 01 序列与10 序列召回率计算结果Fig.5 Recall rate calculation results of Sequence 01 and Sequence 10

2.2 载体运动信息计算精确度对比

为了比较角点检测结果对载体运动信息计算的影响,将本文方法用于视觉里程计计算。 角点提取环节用本文算法与Shi-Tomasi 算法、Harris 算法与Fast 算法对比,然后用金字塔LK 光流法追踪角点,最后根据相机对极几何约束模型恢复运动轨迹。 求出前两帧图片之间的运动尺度k 与相对位姿态信息(Rt,Tt), 后续位姿信息通过Pt=Rt-1Pt-1+Tt-1k计算得到。

数据集采用KITTI 数据集02 左序列前500张。 其真实轨迹由KITTI 数据集groundtruth 提供。 图6 所示为分别采用Shi-Tomasi 算法、本文算法、Harris 算法、Fast 算法对比所得到的角点信息恢复的运动信息。 从实验结果中可看出,四种算法随着时间的推移轨迹都有一定程度的发散现象,这是由于算法本身只计算两帧图片之间的运动信息导致的误差累计。 而本文算法计算得到的运动信息的精度优于另外三种算法。

图6 数据集02 运动信息计算结果Fig.6 Calculation results of motion information in Dataset 02

为了更好的评测视觉里程计的效果,本文没有加入回环检测环节。 如加入回环检测累计误差会小很多。 同时,本文进一步计算了运动信息的误差曲线。 如图7 所示,误差曲线是计算实验值与真实值之间的欧氏距离. 横坐标为图像采样帧号,纵坐标为欧式距离。 从图中可以看出本文算法恢复的运动信息比Shi-Tomasi 算法误差要小,恢复的位姿态信息准确度更高。 而且随着图像采样帧号的增加,因为本文算法的召回率表现更优良,故角点流失也保持在一个稳定的状态,因此误差曲线逐渐趋于稳定,恢复的位姿态信息准确度更高。

图7 02 序列误差曲线Fig.7 Error curve of Sequence 02

3 结论

针对视觉里程计算法中因角点提取不均匀导致恢复的运动信息误差较大问题,本文提出了一种基于高斯金字塔的角点提取算法。实验表明,本文算法能够准确提取图片中的特征信息,有效解决重复纹理与丰富纹理特征聚簇问题,角点分布均匀、离散,提高了算法的鲁棒性。在同等条件下运行本文算法,在视觉里程计中可以得到更加准确的运动信息。

猜你喜欢

角点高斯金字塔
“金字塔”
多支撑区域模式化融合角点检测算法仿真
Great Vacation Places
角点检测技术综述①
数学王子高斯
天才数学家——高斯
基于灰度差预处理的改进Harris角点检测算法
基于FAST角点检测算法上对Y型与X型角点的检测
金字塔是用金子造的吗
从自卑到自信 瑞恩·高斯林