OpenCV的车道线检测方法
2021-07-30李军钟鹏
李军, 钟鹏
(重庆交通大学 机电与车辆工程学院, 重庆 400074)
车道线检测经过多年的研究发展,主要分为基于特征、基于模型和基于机器学习的3种检测方法[1],基于模型检测方法的效果主要取决于模型的选取.储开斌等[2]虽提出一直有效的边缘噪声消除方案,但最后使用的是直线拟合车道线,此方法在测试曲率较大的道路时,效果较差.洪伟等[3]使用抛物线模型的随机抽样一致(RANSAC)算法拟合提取车道线,该方法虽在曲率较大的弯道有较好的结果,但在弯道末端依然未能拟合,并且计算量很大.由于RANSAC算法的检测性能并不稳定,所以Moon等[4]提出一种使用和声搜索(HS)算法估算消失点的新方法,相较于RANSAC算法,该方法可稳定估计消失点.近年来,机器学习的高准确性和高适应性使它成为近年的研究热潮,刘彬等[5]对Enet网络进行改进优化,对车道线进行像素级的语义分割,检测准确率较高.除使用Enet网络以外,崔文靓等[6]根据车道线固有特点,将YOLOv3结构进行改良完善,检测的平均准确率可达95%.田锦等[7]基于改进的MaskR-CNN模型对道路图像进行分割,结合直线和多项式进行拟合,生成优化的车道线参数方程,可提高检测速度和检测精度.基于模型的检测方法虽然在特定的道路环境下准确度很高,但选取和建立能够适应复杂多变道路的车道线模型难度很大.
基于机器学习的方法虽然检测精度高、适应性好,但其计算复杂且依赖大量的已标定样本数据;而且用于训练的数据集中还需要包含待检测数据的样本,计算成本也较高,难以满足快速处理和实时性[8].基于上述原因,本文基于开源计算机视觉库(OpenCV),提出一种更加便捷的轻量级车道线检测方法.
1 车道线检测步骤
车道线检测步骤,如图1所示.对输入图像进行灰度化处理、双边滤波和Canny边缘检测,使用速度更快的渐进概率Hough变换(PPHT)检测车道线.
图1 车道线检测步骤
2 灰度化处理
目前,灰度化处理常用的方法有以下3种[9],对应的公式如下:
1) 最大值法
Gray(i,j)=max(R(i,j),G(i,j),B(i,j)),
(1)
2) 平均值法
Gray(i,j)=[B(i,j)+G(i,j)+R(i,j)]/3,
(2)
3) 加权平均法
Gray(i,j)=0.299×R(i,j)+0.587×G(i,j)+0.114×B(i,j).
(3)
式(1),(2)只是简单地取最大值或平均值,无法最大限度地保留原有值,进而影响后续的梯度计算和边缘提取;而式(3)符合人眼观察特性,故有利于后续的操作.灰度化处理后的图像,如图2所示.
图2 灰度化处理后图像
3 双边滤波
车道线检测的滤波应是在达到滤除噪声的基础上,为了增加边缘检测的准确性,尽力保留图像边缘信息.双边滤波是一种综合考虑滤波器内图像空域信息和像素灰度值相似性的滤波算法,在保留区域信息的基础上实现对噪声的去除.双边滤波对高频率的波动信息起到平滑作用,同时,保留大幅值变化的信号波动,进而保留图像边缘信息[10].
双边滤波器与其他滤波器的不同之处在于,其他滤波器大多只计算图像的值域信息,而双边滤波器还计算图像的空域信息,使滤波器对边缘附近的像素进行滤波时,距离边缘较远的像素值不会对边缘上的像素值影响太多,从而保留边缘的清晰性.
双边滤波原理的数学表达式为
(4)
式(4)中:ω(i,j,k,l)为加权系数.
空域滤波器和值域滤波器的乘积决定加权系数取值,空域滤波器表示形式为
(5)
值域滤波器表示形式为
(6)
两者相乘后,加权系数为
(7)
4 Canny边缘检测
Canny算法能够在准确提取图像边缘的前提下,不受噪声的影响,且能够识别图像中的弱边缘和强边缘[11-13].对于车道线略微残损的道路,相较于其他算法,Canny算法鲁棒性较强,并综合强弱边缘的位置关系,给出图像整体的边缘信息.该方法的检测过程有以下5个步骤.
3) 使用非极大值抑制的方法,比较当前像素的梯度强度与沿正、负方向上的两个像素,当当前像素梯度强度均大于其余两个像素梯度强度时,该像素点为边缘点;反之,该像素点被抑制.
4) 检测强边缘和弱边缘.设置两个一大一小阈值,将检测到的边缘点的梯度值与双阈值进行比较,若边缘点梯度值小于较小阈值,则消除该点;若边缘点梯度值大于较小阈值,小于较大阈值,则确定为弱边缘;若边缘点梯度值大于较大阈值,则确定为强边缘.
5) 清除单独的弱边缘.在步骤4中确定的弱边缘点的8邻域范围中寻找强边缘,若存在,则保留;若不存在,则去除该弱边缘.最后,输出结果.
Canny边缘检测图,如图3所示.
图3 Canny边缘检测图
5 PPHT检测车道线
Hough变换虽然不易受噪声的影响,但计算复杂、峰值不易确定[14-15].为此,使用计算时间更少的PPHT检测车道线.
渐进概率Hough变换的步骤如下:1) 随机获取边缘图像上的前景点,映射到极坐标系画曲线;2) 当极坐标系里面的交点达到最小投票数时,找出该点对应x-y坐标系的直线L;3) 搜索边缘图像上前景点,将直线L上的点(点与点之间距离要小于maxLineGap)连成线段,然后,全部删除这些点,并且记录该线段的参数(起始点和终止点),线段长度要满足最小长度;4) 重复步骤1,2,3.
渐进概率Hough变换除了计算一条独立直线的方向外,还计算它的延长线,并且它没有对平面中的每一个可能点进行累积,而是只累积其中的一小部分.所以,相较于标准Hough变换的累积平面中每一个点的时间,渐进概率Hough变换的速度更快.在Microsoft Visual Studio 2017的编译环境下,利用OpenCV,在California Institute of Technology SURF project数据集上进行测试,测试的PC设备为intel i5-4200H CPU 2.8 GHz.经过渐进概率Hough变换检测后的车道线检测图,如图4所示.
(a) 在不同车道时的检测图 (b) 阴影路面检测图
6 结束语
OpenCV库有大量的可用于视觉处理的函数,可减少开发过程的周期时间.但同时应当看到,虽然在滤波和车道线检测两个部分各使用一些改进优化方法,能够达到预期检测车道线的目标,却仍然难以避免误检和漏检.后续为解决误检和漏检的问题,可在渐进概率Hough变换检测后,基于车道线的宽度特征匹配对检测出的线段进行筛选过滤,去除车道线以外的直线.