APP下载

智能小车对障碍物识别的研究与实现

2022-08-09

南方农机 2022年15期
关键词:像素点轮廓障碍物

李 婉

(陕西国防工业职业技术学院,陕西 西安 710300)

1 障碍物识别原理及算法

智能小车在避障时,识别障碍物的轮廓边缘非常重要。在图像处理中,灰度值变化是在图像边缘最明显的特征之一,所以边缘检测是障碍物识别的核心。对图像中各像素点进行求微分或二阶微分来找到边缘像素点,这样就可以完成边缘检测[1]。

对于图像边缘检测,国内外常用的算法有一阶导数和二阶导数边缘检测算法[2-4]。Canny算法是目前最优的一阶边缘检测算法,其他算法在处理图像时,图像必须要经过提前降噪等一系列处理,而Canny算法可以省略这一步,因为Canny算法本身可以完成对图像的降噪等预处理。Canny边缘检测的主要步骤如下。

1)高斯滤波。滤波的主要目的是对图像处理算法进行降噪,采用高斯滤波会使图像变平滑并增大边缘的宽度。在一个位于(a,b)的像素点上,其灰度值可用f(a,b)来表示,高斯滤波的过程就是让高斯矩阵和每一个像素点相乘,最终经过高斯滤波的灰度值gσ(a,b)如公式(1)所示:

2)计算梯度大小和方向。在图像处理中,通常会采用梯度来表示灰度值变化比较大的像素点,其变化包括程度与方向,因此对于边缘图像灰度值变化的计算,常采用一阶导差分数法,将图像矩阵f(a,b)与卷积模板J1、J2进行卷积,J1、J2如公式(2)、(3)所示:

卷积后分别得到像素点(a,b)处水平方向的幅度值gx(a,b)与垂直方向的幅度值gy(a,b),再通过梯度公式(4)和(5)计算得到梯度值和梯度方向。

3)非极大值抑制。在对图像进行降噪处理时,采用的高斯滤波会将图像边缘增大,使得原本不是边缘的像素点,也会被列入到图像边缘,所以需要采用非极大值抑制来过滤不是边缘上的像素点,目的就是让图像边缘的宽度尽可能为1个像素点,即位于图像边缘的像素点在梯度方向上的梯度值达到最大。这里添加一个类似于判断函数,判断像素点是否在梯度方向上的梯度值是最大,将最大值设为T,否则不是边缘,将灰度值设为0。

4)使用双阈值进行边缘连接。经过上述三步后,已经能得到边缘质量较高的图像,但不能排除所有“伪边缘”存在。Canny使用了高低两个阈值作为滞后阈值,若像素值小于低阈值则去除该像素;若大于高阈值则认为是边缘;介于高低阈值中间的像素需要进一步计算选择连接的像素点,直到图像闭合。

2 障碍物识别过程实现

智能小车障碍物识别如图1所示,选用深度相机与Jetsion TX1作为硬件平台来进行智能小车周围环境的获取与处理[5]。

图1 智能小车采集环境信息示意图

示意图中红色空间直角坐标系(Zm-Ym)为智能小车运行坐标系,蓝色直角坐标系(Zc-Yc)为深度相机视觉范围坐标系。在障碍物识别过程中,需对图像的深度进行分析,而深度相机对障碍物图像进行采集时,采集到的是像素点数据,无法直接显示图片的深度,所以需将深度图的数据先转化为灰度图。为了降低灰度化的图像轮廓上出现突起等问题,需进行形态学滤波、边缘检测等一系列操作,将障碍物标记出来。具体过程如图2所示[1]。

图2 障碍物识别流程图

2.1 深度图灰度化处理

本文深度相机采集的像素点实际数据是障碍物到相机的距离。距离范围在0.1 m~25 m之间,但智能小车因体型的局限,实际可用范围在0.5 m~3 m之间,所以在设置安全距离时,将3 m以外的距离内障碍物设置为0,拍摄的照片及深度图如图3所示。

图3 拍摄的照片及深度图

在深度图灰度化处理的这一步中,需要进行数据格式转换,即对深度相机采集的深度图像数据格式采用OpenCV的convertTo函数进行转换[6]。

2.2 图像二值化

将采集到的图像进行深度灰度化处理后,对图像继续进行二值化处理。灰度图有256个亮度等级,为了让图像只出现黑色或白色,采用图像二值化让图像上包含的所有像素点灰度值为0或255。经过图像二值化处理后的图像如图4所示。

图4 二值化图像

环境等不确定因素会使采集的图像中包含一些非障碍物,若这些非障碍物不做处理,经过二值化处理后可能会被误判成障碍物,所以需要设定一个阈值,阈值将采集的所有数据分为两部分,即定义当灰度大于阈值时为最大值,灰度小于阈值时为0,这里用到的二值化函数原型为:cv2.threshold(img, threshold, maxval, type)。

2.3 形态学滤波

深度相机受外界环境影响,物体上会出现小洞,为了填充小洞,需采用闭运算来去除黑洞,并平滑边界。而形态学滤波对于图像处理来说本质和滤波器一样,能对图像进行降噪、边缘增强等作用。本文中采用形态学滤波主要是为了进行闭运算处理[7]。最终运算处理后的结果如图5所示。

图5 形态学滤波后的图像

2.4 目标物体边缘检测

障碍物图像边缘检测可大幅减少数据量,剔除不相关信息,保留图像结构属性。本过程采用Canny函数来进行处理图5图形的边缘检测。

最终通过Canny算子处理后,再进行取反操作得到的图像如图6所示。

图6 障碍物边缘检测图

2.5 标记轮廓与凸包

经Canny算法可以检测出障碍物轮廓边缘的像素,但输出的图片并没有将每一个像素点进行连接,因此需要在OpenCV函数库先查找图像边缘每个像素点,然后使用drawContours函数将像素点轮廓绘制出来,最终得到的图像如图7所示。

图7 绘制的边缘轮廓

本实验中采集的图像相对较简单,而实际中遇到棱角比较多且突出的障碍物时,根据以上的步骤难以分辨哪些区域可以在安全范围内通过。实际应用中,人的手掌指缝外部范围可以通过,而指缝是不能通过的,若不将指缝的间距进行特殊标记,经过算法识别后会判别可以通过,这种误判会影响智能小车的行驶路径,所以这些区域要在算法上进行排除处理。将手掌轮廓外部每个部分最突出的点进行连接,如图8所示,直线连接后形成一个闭合的轮廓。在图像处理中将这种围成的边界称为图像的凸包,当实际的图像形成凸包后,可以近似认为整个凸包为障碍物,这样做的目的是增大小车安全有效的路径行驶。

图8 凸包

所以需要算法能准确找出凸包轮廓像素点,此过程本文采用的是OpenCV中的convexHull函数来寻找凸包,使用drawContours函数来绘制凸包轮廓像素点。

对图7进行凸包轮廓像素点的绘制,得到图如图9所示,图中红色线条(凸起部分)为识别出来的障碍物轮廓,黑色线条(平滑部分)为障碍物轮廓的凸包[1,8]。随后将凸包进行形态学膨胀,目的是将轮廓凸包加粗外扩,如图10所示。

图9 轮廓凸包

图10 膨胀后凸包图

2.6 图片尺寸调整

避障只是智能小车行驶过程中的功能之一,在识别完障碍物后还需对行驶的路径进行规划。为了使智能小车能及时地做出路径规划,则需要对图片进行压缩处理,压缩图片不会使图像变形,反而使计算的像素点减小,缩短了识别时间[9-10]。本文使用的深度相机采集到的图片大小为1 080×720,用OpenCV中的resize函数将图像进行压缩,最终压缩为200×200。

为了验证此算法是否适用于识别复杂的环境信息,用采集的室外图像11(a)进行验证,最终得到识别出的障碍物图像如图11(b)所示。因此提出该算法可以实现智能小车对障碍物的识别。

图11 采集的室外图像与识别结果

3 结论

本文介绍了障碍物识别的相关原理及算法,核心选用Canny算法对障碍物轮廓进行识别。在智能小车移动的过程中,采用深度相机对一定范围内的环境进行图像采集,并将图像采用OpenCV函数进行二值化、滤波、边缘检测、标记轮廓凸包、调整图像尺寸等一系列算法的处理,得到障碍物识别图。最终经过验证,不论在简单或复杂的环境中均可以识别出障碍物。

猜你喜欢

像素点轮廓障碍物
图像二值化处理硬件加速引擎的设计
基于局部相似性的特征匹配筛选算法
高低翻越
赶飞机
跟踪导练(三)
基于像素点筛选的舰船湍流尾迹检测算法
月亮为什么会有圆缺
基于canvas的前端数据加密
儿童筒笔画
创造早秋新轮廓