基于深度相机的障碍物识别
2019-10-30司徒仕忠邱广萍王锦春
司徒仕忠 邱广萍 王锦春
摘 要:为实现机器视觉系统的障碍物信息进行探测和识别,文章提出利用深度相机识别障碍物的方法:以障碍物和平面的距离变化梯度不同为主要判别方式,搭配孔洞填充,中值滤波,漫水填充,数学形态学运算,帧间运算等噪声抑制算法,实现对障碍物的探测。根据周围环境信息提取具有一定形状特征的典型目标物。实验结果表明,此方法能有效分别障碍物和平面。
关键词:障碍识别;深度相机;无人驾驶;机器视觉
中图分类号:TP391 文献标志码:A 文章编号:2095-2945(2019)27-0037-04
Abstract: In order to detect and recognize obstacle information in machine vision system, this paper presents a method of using depth camera to identify obstacles: taking the difference of distance gradient between obstacle and plane as the main discriminant method, matching with hole filling, median filtering, flooding filling, mathematical morphology operation, inter-frame operation, etc. Noise suppression algorithm is used to detect obstacles. According to the surrounding environment, the typical objects with certain shape characteristics are extracted. The experimental results show that this method can effectively distinguish obstacles from planes.
Keywords: obstacle recognition; depth camera; unmanned driving; machine vision
引言
障碍物识别是移动式的机器人的基本能力,只有能识别障碍物,机器人才能在复杂的生产环境中移动和工作。目前识别障碍物的方法有激光雷达、超声波测距、基于单目摄像头的视觉识别和深度相机测距识别等[1]。
激光雷达具有精度高,采集速度快等优点,但激光雷达价格昂贵,让小型经济型的机器人开发难以承受[2]。超聲波测距的器材价格便宜,但单个超声波测量范围较小,要实现对单方向的不同高度的障碍物的识别都需要安装多个超声波传感器,较占用机器人的空间。单摄像头的视觉识别一般基于机器学习,对于障碍物识别需要准备大量的数据集,且对环境光照因素较为敏感。基于深度相机障碍物识别依靠障碍物和平面区域的距离梯度信息的不同,即可大致判断是否存在障碍物,单个深度相机就能对单一方向即时处理,且具有单目摄像头的功能,需要占用的空间少。
本文研究一种适合低速机器人的基于深度相机的障碍物识别算法,通过一款适合工作环境的深度相机,采集的深度图和BGR图,分析深度图中各物品的距离关系,抑制各种图像噪声,分辨出图中障碍物和道路。
1 机器视觉总体设计
本设计基本思路:首先通过标定好的深度相机对环境进行拍摄,获取环境的深度图,先对深度图进行孔洞填充,为因干扰而无法获得深度信息的区域填充距离信息,再进行深度图的卷积计算,得出深度图的数据的梯度变化数据,将梯度变化的数据与阈值比较,将障碍物设为1,平地设为0,形成掩模,对障碍物和道路进行大致的分辨,再通过数学形态学运算和两帧之间进行运算来进行噪音的抑制[3]。算法流程图如图1所示。
2 关键算法
2.1 深度图的孔洞填充
(1)深度图孔洞噪声分析
深度图的噪声主要来源于物体表面的光线反射,或近景的物品遮挡了远景的物品。不同类型的深度相机的孔洞噪音的成因也是不同的。深度图的孔洞噪声表现为在无法探测的区域,是一个固定的值,一般为“0”。因为任何的一种深度图摄像头都无法探测距离摄像头为0物品。因为是一些连续的区域包围着一些数值为0的区域,故称为孔洞噪声[4]。
双目摄像头的孔洞噪音主要来自物品上的纹理太少,导致无法精确定位相应的区域,进行深度计算。或者是因光线问题而无法拍摄到物品上的纹理,或者是近景物品遮挡了远景物品一部分,两个摄像头无法同时获取远景物品的某一部分的纹理信息。而无法获取特征信息来计算两者间的距离。
结构光摄像头的孔洞噪声主要来源于光线的照射。结构光摄像头发送到物体上的结构光,当遇到强光或者物体发生镜面反射时,会造成结构光的信息的丢失,而无法根据编码光进行深度的计算[5]。
根据上述的分析,得出深度图的孔洞噪声主要来自三方面:物品表面纹理信息的丢失(镜面反射),物品表面纹理信息的不足和近景物品的阻挡。
(2)深度图孔洞噪声消除方法
从深度图的信息分析,如无物品的阻挡,深度图同一行的深度信息是大致相同的,物品表面纹理信息的丢失和不足而导致的孔洞噪声可以通过同一行的与孔洞最近的有效值来填补。
孔洞噪声的某一行一般都会有两个值,根据之前的对孔洞噪声的分析,当它是近景物品遮挡远景物品时,那应该拿较大(较远)的数值去填充。而当孔洞噪声是在水平平面时,因为深度图同一行的距离信息一般都是大致相同的,仍可以用较大的数值去填充[6]。孔洞填充效果如图2所示。
2.2 中值滤波
孔洞填充后的深度图,在原本有孔洞噪音的边界会出现一些明显的细长的线型痕迹,这是原本孔洞噪音的边界,这些边界会对深度图的梯度的计算造成一定的影响,应在计算梯度之前将这些线型的噪声滤除。这些噪声的特点是形状细长,弯曲包围着原本的孔洞。选用中值滤波的方法将这些噪声滤除。
中值滤波使用一个滑动窗口来滤除噪声,当窗口越大时,中值可选择的范围就越大,滤波的效果就越大,中值滤波法要先对窗口内的数据进行排序,是一个运算量随着窗口增大而迅速增大的一个算法,当窗口太大时,处理速度会迅速下降,而窗口太小,滤波效果不太好。各个窗口的运行的平均速度如表1所示。
比较使用3×3,5×5,和7×7的滑动窗口滤波后发现,3×3的窗口对噪声的抑制不太好,而7×7的窗口的运行速度降低得很明显,故选用5×5的移动窗口。5×5窗口对噪声的抑制与7×7的效果相仿,但运算速度比7×7明显提高不少。各个窗口中值滤波效果图如图3所示。
中值滤波法可有效地滤除点线形状的噪音。但同时,中值滤波法也可以破坏原图像的点线细节,但深度图的点线细节不是处理的关键,故用中值滤波法将深度图所有的点线滤除[7]。
2.3 距离梯度计算
(1)卷积
卷积是图像处理经常用到的一种运算方式。公式为:输出=输入*系统。输入为图像信号,经过一个特定的系统,即卷积核,会得到一个相应的输出。
(2)卷积核
卷积核是指一组有权重的矩阵,它会应用在图像的某一个区域,并由此生成目标矩阵的一个元素。卷积核可看作是一片毛玻璃,盖在图像的某个区域上时,原图像透过毛玻璃的作用,我们的看到的图像就会发生相应的变化[9]。
算法是通过深度图找出图像中的障碍物和平面,主要原理是通過对深度图进行梯度的卷积运算,找出深度图中梯度变化小的区域。
微分卷积核,也称微分算子。Prewitt算子和Sobel算子,Laplacian算子,Marr算子是图像处理常用的一些微分算子[10]。使用这些卷积核分别和深度图进行卷积,得到卷积后的梯度数据,再得到这些数据的绝对值。找出梯度数据中所有在有参考价值范围内的值,这个参考价值的范围要根据每个梯度算子而定,一般算子的矩阵越大,或者算子的数值权重越大,这个范围就越大。而大于这个范围的可视为噪声去除。可运用可视化的方式找出,可先从0~500开始寻找,将梯度数据在0~500内的数据找出,运用直方图,0~500内的数值显示出来,再根据直方图的疏密程度进一步调整这个范围。各算子卷积后的梯度直方图如图4所示。
其中Laplaction算子对中间数据和4邻域的梯度,造成梯度过于集中,在本算法中对距离梯度的计算并不适用,Marr算子shape较大,对细小障碍物造成误判,故在对障碍物识别有高要求的时候不适用。
(3)判断阈值的设定
障碍物的阈值分布的范围,就是平面分布的梯度的分布范围[11]。将平面区域设为“0”。障碍物区域卷积后得到了深度图的梯度数值,然后就是根据梯度数值判断平面区域和障碍物区域。根据直方图得出的数据,逐步选出障碍为“1”。阈值判断后的场景图如图5所示。
通过阈值判断的图像存在众多噪声,但明显,障碍物区域的黑色明显少于平面区域的黑色。
2.4 漫水填充
因为硬件的限制,深度相机获取的深度图存在众多的噪音,这些噪音会对图像的处理存在严重的干扰,运算后的得出的掩模会存在众多的错误的判断的区域,如障碍物区域会有许多判断为平地的小区域。比如, 平面的区域,通过卷积运算得出的判断大部分是正确的,所以得出的掩模是众多的“0”包围了少数的“1”,要用漫水填充去消除这些“1”,反之亦然。
(1)漫水填充
漫水填充是一种用特定颜色填充连通区域,通过设置可联通像素的上下限以及联通的方式来达到不同的填充效果的方法。漫水填充经常被用来标记或分离图像的一部分,以便对其进一步的处理和分析。简单概括就是将选定的种子像素点联通的区域替换为指定的颜色[12]。在OpenCV和MATLAB中都有相应的函数实现。
运用漫水填充处理平面区域(“0”区域)掩模,漫水填充后的平面区域如图6所示。
(2)漫水填充的局限
漫水填充是用特定颜色填充连通区域,但当区域不连续的时候,可能将一些不同的区域漏填了,导致效果不够完美[13]。这个可以通过从深度图的多个地方寻找同一属性的种子进行多次漫水填充。最后用或运算将不同的掩模合成到一张掩模上。这可以有效防止不连续的区域漏填。
2.5 数学形态学运算
数学形态学(Mathematical morphology)是一门建立在格论和拓扑学基础之上的图像分析学科,是数学形态学图像处理的基本理论[14,15]。数学形态学的最基本操作有两种,分别为腐蚀和膨胀:
二值腐蚀会把前景物体的边缘腐蚀掉。原理是卷积核沿着图像滑动,如果与卷积核对应的原图像像素都是1,那么中心元素保持原值,否则为0。效果是靠近前景的像素被腐蚀为0,前景物体变小,图像白色区域减少,对于去除白噪声很有用,可以断开两个连接在一起的物体。
二值膨胀是与二值腐蚀相反的操作。当二值膨胀时,卷积核当中只要有一个值是1,中心元素值就是1。此操作会增加前景中的白色区域。
2.6 帧间对比消除噪音
因为光影和硬件本身的问题,每一帧的深度图的数据都会有一定的波动,采用两帧之间的掩模进行比较可以进一步抑制噪声。因为障碍物的掩模标记为1,而平地的掩模标记为0,当两帧掩模之间进行或运算时,可以有效抑制障碍物区域的噪声,两帧之间进行与运算时,可有效消除平地区域的噪声[16]。利用帧间对比抑制噪音可有效抑制帧间的波动。
3 实验验证
3.1 实验平台
本文采用Intel公司的realsense D435深度摄像头,具有双目测距和红外测距,两种方式互补,可生成精度更高,噪声更少的深度图。通过Intel提供的SDK可对摄像头进行快速配置开发。
3.2 实验测试过程
采用本算法,将探测范围设定为150厘米,并将掩膜上范围外的区域置零。实验开始时将障碍物置于摄像头前方,缓慢推进摄像头,当障碍物进入测距范围时,障碍物被识别出来。但边沿拟合效果不好,利用OpenCV内置函数将掩模的识别出的区域找出,并在BGR图中标识出来。效果如图7所示。
4 结束语
本文基于深度摄像头,对障碍物识别的方法进行了研究,得到以下结论:
(1)通过一款优秀的深度相机,提取出准确的深度图,再结合本文的算法,根据深度相机的参数和电脑的性能调节算法相应的参数,能较好地分辨出障碍物和平面。
(2)但算法依然存在缺陷,受深度相机的性能优劣和测量距离对算法的效果影响相当大,可能会为结果引入众多的噪声;而且不同类型的深度相机对光照,场景类型的鲁棒性都是不同的,需要为特定的场景选用特定的摄像头。对于反光的平面,深度相机无法有效分辨。
(3)深度相机识别障碍物虽然具有较好的识别效果,但面对复杂多变的道路情况,更好的方式是采用多传感器融合,深度相机可搭配超声波、激光雷达等,从而对环境有更加全面和准确的感知。
参考文献:
[1]黄如林,梁华为,陈佳佳,等.基于激光雷達的无人驾驶汽车动态障碍物检测,跟踪与识别方法[J].机器人,2016,38(4):437-443.
[2]刘志.基于多传感器的导盲机器人同时定位与地图构建[D].江苏科技大学,2017.
[3]Chen C, Jafari R, Kehtarnavaz N. UTD-MHAD: A multimodal dataset for human action recognition utilizing a depth camera and a wearable inertial sensor[C]//2015 IEEE International conference on image processing(ICIP). IEEE,2015:168-172.
[4]赵洋,刘国良,田国会,等.基于深度学习的视觉SLAM综述[J].机器人,2017,39(6):889-896.
[5]娄达平,王晓东,富显祖,等.基于深度引导空洞填补的虚拟视点绘制方法[J].计算机应用与软件,2017,34(6):162-168.
[6]Raffle H S, Starner T E, Weaver J, et al. Method and system for input detection using structured light projection: U.S. Patent 8,955,973[P]. 2015-2-17.
[7]Bai M, Wu J. Efficient deblending using median filtering without correct normal moveout-with comparison on migrated images[J]. J. seism. Explor,2017,26:455-79.
[8]韩萍,韩宾宾.基于典型散射差异指数的PolSAR图像Lee滤波[J].系统工程与电子技术,2018,40(2):287-294
[9]常亮,邓小明,周明全,等.图像理解中的卷积神经网络[J].自动化学报,2016,42(9):1300-1312.
[10]王正来,黄敏,朱启兵,等.基于深度卷积神经网络的运动目标光流检测方法[J].光电工程,2018,48(8):43-52.
[11]陈存祺.汽车自主驾驶中基于单目视觉的障碍物检测[D].吉林大学,2013.
[12]陈佳鑫,贾英民.一种基于漫水填充法的实时彩色目标识别方法[J].计算机仿真,2012,29(03):4-9.
[13]罗云岗.特定目标的检测与识别技术研究[D].上海交通大学,2014.
[14]Li H, Wang R, Cao S, et al. A method for low-frequency noise suppression based on mathematical morphology in microseismic monitoring[J]. Geophysics, 2016,81(3):159-167.
[15]邓仕超,黄寅.二值图像膨胀腐蚀的快速算法[J].计算机工程与应用,2017,53(5):207-211.
[16]辛浩,李玲玲.基于帧间差分与背景消减的视频摘要算法研究[J].淮北师范大学学报(自然科学版),2017(2):13.