基于Jetson Nano的车道线检测与识别
2020-12-24卜国富聂永怡余京晓郑誉煌
卜国富,聂永怡,余京晓,郑誉煌
(1.广东第二师范学院 物理与信息工程系,广东 广州 510303;2.广东第二师范学院 教务处,广东 广州 510303)
0 引言
近年来,人工智能以及新能源技术研究的发展获得社会的高度重视,在汽车工业领域,传统的汽车机械化模式逐渐发展为自动机械化结合人工智能化模式。在复杂环境中,人工智能的应用在自动驾驶汽车的感知决策中发挥极大作用[1]。汽车在自动驾驶时,需要综合计算多方向传感参数,如车道线检测、四周车辆与建筑等物体进行识别及相对距离检测等,均需要利用数字图像处理。
计算视觉识别技术是人工智能化的主导技术,在自动驾驶汽车中高级驾驶辅助系统起关键作用,可在原本传感的自动化基础上附上视觉感的智能化。车道线的边缘检测概念于1959年被提出,随后众多研究者提出不同原理的检测算法,目前有Roberts Cross算子、Prewitt算子等常用的车道线检测算子,但是Canny算子对车道线检测效果更优,张道芳等[2]研究的语义分割DeeplabV3+模型在性能与效果上也优于传统的检测算法。本文以Jetson Nano智能小车为研究平台,结合开源机器学习(ML)框架、计算机视觉和机器人开发的框架和NVIDIA AI平台,基于开放源代码计算机视觉库(OpenCV)采用Python语言对图像灰度化处理、高斯模糊、Canny边缘检测算子、ROI感兴趣区域截取、霍夫变换等过程对车道线进行检测。
基于Jetson Nano的车道线检测与视觉识别流程图如图1所示。
图1 车道线检测流程
1 图像灰度化、二值化处理
首先通过cv.imread()函数读取由高精度视觉摄像头获取的原图像,获取的数字图像由像素组成,原始图像的像素RGB数值错综复杂,且同一场景的RGB数值受光照强度的影响较大,对图像进行灰度化处理后可降低其他色彩对车道线检测效果,可利用Open CV库中的cvtColor()函数对图像进行灰度化转换。在计算机视觉库中有超过150种颜色空间的转换方法,研究人员常用加权平均算法,即公式(1)。
GRAY=R×0.30+G×0.59+B×0.11
(1)
其中GRAY表示图像中某像素点的数值大小,R,G,B分别表示红色、绿色、蓝色在该像素点的分量值。研究人员可以通过OTSU算法对图像进行自适应的二值化处理,把图像转换成明显黑白照片效果,加强算法对光照的鲁棒性[3],更有利于车道线检测与识别。图像二值化可通过cv.threshold()函数实现图像转换,原图像、灰度化图像、二值化图像对比如图2所示。
图2 原图像、灰度化、二值化对比图像
2 图像高斯模糊
图像模糊算法种类有很多,其中一种常用的算法是高斯模糊(也称高斯平滑)[4]。由于噪声对边缘检测有影响,因此需要平滑操作滤除部分噪声,高斯模糊的原理是加权平均的算法,即输入图像与高斯核作卷积,选取图像中某像素点作为中心点,中心点附近的像素点离中心点越近权重比例越大,反之则越小。记高斯核坐标为(x,y),μ为平均值,σ为方差,则一维高斯函数方程如公式(2)所示。
(2)
把高斯核视为图像原点,μ取值为0,得到二维高斯函数方程式如公式(3)所示。
(3)
标准差与高斯矩阵的尺度成正比,通常采用3*3或5*5的高斯核,经过高斯模糊的图像更加柔和平滑,图像中的高频噪声也被滤除。对图像进行高斯平滑处理可通过OpenCV视觉库中的cv.GaussianBlur()函数实现,二值化图像与高斯模糊后的图像对比如图3所示。
图3 二值化与高斯模糊化对比图像
3 Canny边缘检测算子
经过高斯模糊的图像只是单阈值处理,并没有计算设置图像像素边缘梯度的幅值与方向,由于原图像的边缘梯度方向是随机指向,可以使用Canny算子指定图像的垂直和水平方向,并与图像作卷积计算梯度。Canny算子可计算某像素点的梯度幅值,对边缘梯度的幅值进行双阈值限制,实现非极大值抑制的滞后阈值处理,达到检测到弱边缘的效果。Canny边缘检测算子对图像处理的主要过程为:
(1)计算像素点的梯度幅值和方向。
(2)对图像非极大值抑制。
(3)进行双阈值检测。
Canny算子处理后的图像抗干扰能力强、噪声小、图像更平滑、边缘连续性更好[5]。可利用cv.Canny()函数实现对边缘进行处理,高斯模糊图像与双阈值边缘连接处理的图像对比如图4所示。
图4 Canny边缘检测处理后的图像
4 图像ROI区域
在视觉识别处理中,感兴趣区域(ROI)指对处理的图像加一层自定义多边形框架截取作为需要处理的区域。在获取的初始图像中更精准检测出直线车道,可去除车道线以外的干扰图像,如图5(a)所示,研究人员可以建立不规则ROI区域,加上一层掩膜,只保留红色线以下区域用于霍夫变换。本文通过array函数使用顶点定义ROI截取区域,利用ZEROS函数获得图像ROI区域的一层mark图像,最后通过bitwise函数,将原图像和mark图像位操作,提取ROI区域达到预期效果,如图5(b)所示。图像ROI截取的处理可减少周围建筑及其他物体对车道线检测的影响[6],提高直线检测的成功率。
(a)预截取图像
5 霍夫变换与最小二乘法拟合
霍夫变换是对Canny图像检测直线并通过画线把检测的直线标记出来,是图像处理提取特征的一种算法。霍夫变换的原理是把直角坐标下的方程转化为极坐标系形式的直线方程,假设极坐标的一条直线由(r,α)表示,其中r为直线长度,α为该直线与X轴夹角,如图6所示。
图6 霍夫变换的直角坐标
计算直线斜率与其均值的差,并迭代计算去除最大值与最小值,得到的数值拟合最小二乘法确定最终的直线参数。假设有n条直线,则拟合一条直线为公式:
f(xn)=axn+b
(4)
求出最小误差平方和公式为公式5:
(5)
但对于车道线曲线检测,直线拟合的模型并不适用曲率较大的曲线车道线,因此对曲线拟合模型可采用三阶线性方程,设L0为小车方向的斜率,L1为直线斜率,L2为曲线曲率,L3为曲率变化率,则方程式为公式6[7]:
(6)
通过OpenCV视觉库中的HoughLinesP函数实现霍夫变换检测ROI区域的直线,由for循环结构绘制不同颜色直线,使车道线检测结果更直观,综合以上5个步骤可成功检测出直线车道线,其检测结果如图7所示。
图7 霍夫变换车道线检测图像
6 结语
本文通过对原始图像的ROI区域截取处理,去除图像车道线以外的物体,降低车道线检测的失误率。基于OpenCV 开源计算机视觉库并采用python语言在Jetson智能小车平台上成功识别并检测车道线,如何对检测的车道线进行追踪行驶是今后的研究方向。