基于特征提取的车道线快速检测方法研究*
2023-03-23徐嘉雯魏明洋张慧蒙刘学渊
徐嘉雯,何 超,魏明洋,张慧蒙,罗 鑫,刘学渊
(西南林业大学机械与交通学院,昆明 650224)
0 引言
随着全球智能网联汽车行业的快速发展,如何进一步实现汽车的智能化受到人们的广泛关注。研究表明[1],大部分交通事故都是由于驾驶员注意力不集中或疲劳驾驶造成的,而先进驾驶辅助系统(Advanced Driving Assistance System,ADAS)可以在事故发生前采取必要的举措,从而减少事故和驾驶员的工作量[2]。车道偏离报警系统(Lane Departure Warning System,LDWS)[3]和车道 保 持 辅 助 系 统(Lane Keeping Assist Systems,LKAS)[4]等内容是ADAS 的基本内容。因而,车道偏离报警系统和自动驾驶技术的应用是提高道路安全的重要创新技术,可以有效减少发生交通事故的概率[5]。随着对LDWS 的深入研究,辅助驾驶功能也在不断完善和发展。其中,车道检测是先进驾驶辅助系统的基础,道路场景中车道线的正确检测对自动驾驶的应用也具有重要影响[6-8]。从现有技术水平来看,影响基于视觉的LDWS可靠性的最重要因素是车道线检测算法。因此,对于车道线的检测仍有很多研究需要继续[9]。
目前,根据研究者们所提出的车道线检测方法,主要可以分为基于特征、模型和语义分割的方法[10-12]。针对基于特征和模型的方法,张勉等[13]通过统计得到车道线方向角的均值和方差,用以确定方向可调滤波器的方向和概率霍夫变换的极角范围,有效地抑制了干扰、减小了搜索范围、提高了检测速度。Shen 等[14]提出了一种针对复杂环境的车道线快速提取的方法,通过感兴趣区域(Region of Interest,ROI)的动态调整以及改进的firefly 边缘检测算法,使其在复杂场景下具有较高的检测效果。Hajjouji等[15]设计了一种适用于直线车道线检测的霍夫变换(Hough Transform,HT)硬件结构,优化了HT的结构和计算复杂度,减少了累加器的尺寸,使得检测速度有所提升。Gong 等[16]提出了一种通用的快速车道线提取方法,通过提出的双阈值算法进行ROI 区域的提取,并运用卡尔曼滤波快速预测后续图像序列的最佳阈值,从而实现了车道线的实时校正。Kumar 等[17]针对在光线阴暗场景检测算法鲁棒性低的问题,利用Kalman滤波跟踪检测车道线,然后通过B样条曲线对车道线进行拟合,具有较好的拟合效果。而基于语义分割的检测方法通过大量数据集对模型进行训练,使模型具有较强的特征提取能力,然而,随着模型的不断迭代,整个网络模型变得越来越复杂,也需要强大的计算能力来支持。
目前,在一些场景中仍存在着车道线检测精度不足,道路场景中的车道线无法快速准确提取的情况,因此需要不断改进算法,在降低开发成本的同时提高算法的性能。而基于特征和模型的方法最为简单,直接提取图像特征,并进行车道线拟合,具有计算量小、效率高等特点,且在实时准确性方面具有优势,但其场景适应性差。鉴于上述原因,本文基于PyCharm 软件,针对多种场景的变换提出了一种更加快速便捷的车道线检测方法,具体检测算法的流程如图1所示。
图1 车道线检测流程
1 道路图像预处理
为减少数据运算,首先需要将采集到的视频中的单帧图像灰度化,把原图的R、G、B 三个通道转为单个通道,最终得到灰度图。
通常有平均值法、最大值法、加权平均法3 种处理方法, 而加权平均法能够得出最能反映人眼特征的灰度值,灰度图的亮度Gray(x,y)公式如下:
式中:(x,y)为像素点坐标;R(x,y)、G(x,y)和B(x,y)分别为像素点在红、绿和蓝通道中的灰度值。
本文采用式(1)方法对图像进行灰度化处理,结果如图2所示。
图2 灰度图
2 车道线特征提取
2.1 Canny边缘检测
为使车道线边缘提取的效果更好,本文采用Canny检测算法寻找像素点局部最大值,也就是寻找图像中灰度变化量最大的位置。具体Canny 边缘检测算法主要可分为以下几个步骤。
(1)采用高斯滤波来平滑尖锐的噪声点,防止噪声点影响后续Hough变换直线的判断。
为达到模糊图像从而实现去噪的目的,用到的二维高斯函数的计算公式为:
式中:G(a,b)为点像素的灰度值;(a,b)为像素点坐标;σ为标准差。
本文在此采用(5×5)的高斯卷积模板并利用cv2.GaussianBlur()函数对灰度图进行处理。
(2)计算梯度,找寻图像的强度梯度。
主要是计算各梯度方向上的一阶导数(垂直、水平和两对角方向)。此步骤可使用Sobel 算子计算水平和竖直方向的图像梯度(Ga和Gb),并进一步求得边缘的梯度(G)和方向(θ),公式如下:
(3)使用非极大值抑制的方法将模糊的边缘变得清晰,从而消除边缘误检。
基本原理:比较像素点沿梯度方向的梯度强度变化量,把同一梯度方向上梯度值为极大值的像素点看作边缘点。
(4)利用双阈值的方法来划分出可能的边缘点。
尽管找出了可能是图像边缘的像素点,但是仍无法判定具体多大的像素梯度属于真正的边缘点,所以Canny使用了双阈值来进行划分,即梯度值大于高阈值的像素点被认为是强边缘,去除小于低阈值的像素点,并且在双阈值之间的弱边缘只有连接强边缘时才是真正的边缘点。
传统Canny 算子人为设定高、低阈值,耗时较长,难以满足车辆的实时性要求。在此,本文为更好地体现图像边缘特征,设计了两种方法。
方法一是制定一个窗口,给定高低阈值一个范围,调节阈值大小,从而能够更好地找到图像特征提取的最佳阈值范围,如图3(a)所示。为了检测车道线的边缘,需要降低高阈值。经过反复实验后,确定高低阈值为50~200以内的变化量是合适的。
图3 自适应高、低阈值的设定
方法二即采用cv2.adaptiveThreshold()函数对高斯滤波后的图像进行自适应阈值分割,最大灰度值设为255,自适应方法选择cv2.ADAPTIVE_THRESH_GUASSIAN_C,二值化方法选择cv2.THRESH_BINARY,分割计算的区域大小为15,被减常数为3。由此得到如图3(b)所示的阈值分割结果图。
综上,本文在此将函数中的高、低阈值参数分别设置为200 和50,运用cv2.Canny()函数实现对灰度图像的边缘检测,如图4所示。
图4 Canny边缘检测效果图
2.2 ROI区域提取
蓝天、栏杆、远处建筑物等这些干扰因素都会影响车道线检测的速度和精度。所以,为提高检测效率和减少检测时间,本文对图像进行边缘检测后,通过绘制掩码图(mask),并与检测到的边缘图结合,进而提取到更为精准的车道线特征,保证了算法的鲁棒性和实时性。
在此本文自适应地选取掩码区域的方法,可以调整不同场景下感兴趣区域(ROI)的形状,用较少的像素点准确地提取出车道线区域,掩码区域可以是矩形、三角形、梯形及不规则的多边形。本文在此提取梯形的掩码区域,最终得到的ROI区域效果如图5所示。
图5 ROI区域的提取效果图
3 车道线检测
3.1 霍夫变换
霍夫变换通常可用于检测曲线、圆、直线等,其中最广泛的应用是检测图片中的直线。
本文选用概率霍夫变换函数cv2.HoughLinesP()进行车道线检测。为了能更加清楚地检测直线,主要有如下改进。
(1)设置最短长度阈值(minLineLength)。如果检测到的直线段小于minLineLength,则抑制这条直线。
(2)设置最大允许像素间距(maxLineGap)。只有当直线像素间的间距小于maxLineGap 才会被当作车道线信息。
最终采用概率霍夫变换得出的效果图如图6(a)所示。为体现概率霍夫变换相较标准霍夫变换的优点,本文在此分别运用两种霍夫变换进行检测,对比如图6所示。由图可得,标准霍夫变换会检测到更多的直线,而概率霍夫变换检测的车道线更为精确,从而提高了检测的精度。
图6 两种霍夫变换的对比
3.2 离群值过滤
完成初步的Hough 变换后,图像中依然存在许多噪点,为了进一步消除噪点,就需要进行离群值过滤,具体步骤主要有以下几点:(1)计算Hough 变换后的所有直线的斜率;(2)通过斜率值的正负进行分类,将直线分为左右车道线;(3)计算同一类直线的斜率均值;(4)再将直线斜率与均值进行对比,如若相差过大,超过了设定的阈值s,就判定这样的直线为噪点,删除该直线,直到所有的直线与均值的差距都小于设定的阈值停止迭代。
通过这样的离群值过滤可以更加有效地消除图像中一些无关信息的影响。本文在此设定阈值s=0.2,最终左车道线从28 条直线过滤为25 条;右车道线从20 条直线过滤为19条。
3.3 最小二乘法拟合直线
由于霍夫变换会检测出多条直线段,仍无法准确确定该条直线的具体位置,因此需要将同一类型的线段拟合成一条线段,用来唯一确定这条直线。所以,本文采用最小二乘法来对车道线拟合,具体求解步骤如下。
假设直线模型的表达式为:
在此,最小二乘法就是求解Q的最小值,因为Q最小,对应θ值最优,所以将上式看成一个Q关于变量θ的函数,问题转成一个求极小值问题,即对θ1和θ2分别求偏导,化简后得到:
求解出多项式系数后,即可根据直线表达式得到直线的两个端点坐标,从而用来唯一确定这条直线。并将最终直道车道线位置使用cv2.line()函数绘制到原图中,检测效果如图7 所示。图中,黄线绘制的是左车道线,绿线绘制的是右车道线,拟合效果良好,证实了利用最小二乘法可使车道线拟合具有较高的精度和实时性。
图7 车道线拟合效果图
4 实验结果与分析
本文采用PyCharm 软件进行仿真实验,调用OpenCV库中的相关函数进行车道线的特征提取,从而验证本算法的检测准确性。实验测试集主要从车载采集到的北京某段高速公路上的视频中筛选出不同路况条件下的图像,约为1 697 帧,图片大小为992×362,且测试场景主要包括正常光照、路面干扰和弱光环境3 种情况,并以30 ms/帧进行视频播放。本文采用实验设备配置:CPU 为i5-4600U@2.10GHz,RAM 为16 GB,并对提出的算法进行验证,最终不同场景下的车道线信息如图8所示。
图8 各场景下的车道线检测结果
本文在此对不同场景下的车道线检测情况分别进行统计,测出其平均每帧图像的检测时长,并计算出准确率,从而能够更有力地验证本文检测车道线算法的准确性和实时性,具体数据如表1所示。
表1 车道线检测情况统计
为体现本文算法的优越性,在此分别举例出两篇文献中检测算法的平均准确率和检测时长进行对比分析,如表2 所示。由表可知,本文算法处理一帧图像所用平均时长为13.9 ms,对比25.6 ms、22.9 ms、19.0 ms 可看出检测速度有了明显提升,能够满足车道偏离报警系统实时性的需求。再者,本算法进行车道线检测的平均准确率为97.6%,和94.9%、97.1%、96.3%对比也有了明显提高,具有很好的检测效果。由此可得,本文算法对比其他文献中的方法,平均准确率更高,检测所耗时长较短,更能体现车道线检测任务中的准确性和实时性要求,具有一定的应用价值。
表2 车道线检测的准确率和检测时长
5 结束语
(1)本文在图像边缘特征提取时,选用Canny 算法对道路边缘进行检测,提出自适应选取高、低阈值的方法,解决了传统Canny算子设定双阈值的复杂性问题。
(2)本文采用渐进式概率霍夫变换(PPHT),从而排除了更多的干扰信息,正确判别了方向,使检测到的直线段更为精确。
(3)本文使用传统的图像处理方法进行特征提取,从而能够更加快速实时地检测出车道线,平均每帧图像检测时长达到13.9 ms/帧,节省了时间,提高了检测效率,具有一定的应用价值。
(4)通过实验验证了各场景下的车道线检测效果,结果表明,该算法平均准确率高达97.6%,能正确检测出不同条件下的车道线,具有很好的鲁棒性和实时准确性。