智能车辆车道线识别方法研究
2022-03-23王源隆井志强张峻玮王亮国季子杰赵万忠
王源隆,井志强,张峻玮,王亮国,季子杰,赵万忠
(南京航空航天大学 能源与动力学院, 南京 210016)
车道线是道路中的基础信息。良好的车道线检测结果是实现无人驾驶技术[1-4]的保障。车道线边缘[5]、几何形状[6]和纹理信息[7]是车道线检测中显著的特征。依据检测算法不同的原理,车道线检测算法可以分为三类:基于特征、基于模型和基于深度学习的检测算法。
基于特征的车道线算法依据车道线的边缘、颜色、纹理等特征,利用阈值过滤等一系列图像处理得到车道线[8]。辛超等[9]提出了改进的Hough变换算法,并采用了自适应阈值Canny算法提取车道线。王智宇等[10]提出了一种区别于Hough变化算法的自适应模型参数估计算法,这种方法使在图像噪点占比大时仍能保证较高的拟合精度。M.Bertozzi等[11]的GOLD系统采用透视变换法和自适应阀值的亮度变换法来识别车道线,但是图像清晰度不高,存在干扰因素时容易得到不准确的边缘特征信息。基于模型的车道线算法是依据车道线的几何特征,采用直线、抛物线和双曲线等曲线模型来拟合车道线。范宝正等[12]采用具有动态连接点的直线-抛物线模型方法检测车道线。郭磊等[13]将双曲线作为拟合车道线的曲线模型,使用聚类算法对分段的车道线进行聚类,根据计算出的车道线消失点位置计算双曲线模型。M.Fairhurst等[14]运用了B-Spline的思路,使用透视变换将原始图片转变成鸟瞰图,采用随机一致性采样(RANSAC)算法拟合车道线。此类方法不用考虑道路干扰,具有很好的自适应能力。区别于前面两类传统车道线检测算法,深度学习的方法基于数据集让神经网络根据损失函数不断进行“学习”总结,最终得到拟合精度最高的模型。姜立标等[15]采用了基于VGG-16卷积神经网络结构代替人工设计的检测方式来自主识别图像中的车道线特征。深度学习方法在复杂场景中具有高精度、高准确度、鲁棒性好等优点,但是需要结构优秀的卷积神经网络以及大量的训练数据。
针对基于特征的车道线识别算法识别不佳的问题,提出了一种基于OpenCV的车道线识别算法来改进车道线的识别。在检测算法的基础上,提出了一种当一侧车道线模糊不清甚至消失时的车道线重构的解决方案,以及一种车辆偏移量的计算方法。
1 车道线图像预处理
1.1 图像灰度化
彩色图像一般由RGB 3个通道组成,为了方便后续的图像检测工作,需要对图像的三通道进行合并处理,转化为灰度图像。灰度化方式是将彩色图像中的所有通道RGB的像素值重新分配权重[16],最终合并成1个通道。由于车道线的颜色主要有白色(255,255,255)和黄色(255,255,0)。因此,综合了白色和黄色车道线的灰度像素值特点,采用以下公式计算灰度值[17]:
Y=0.5R+0.5G+0B
(1)
式中:Y为灰度化后灰度值;R为红色通道的灰度值;G为绿色通道的灰度值;B为蓝色通道的灰度值。处理效果如图1所示。
图1 道路图像灰度图
1.2 感兴趣区域划分
车道线在车载摄像头中基本保持在一个固定的区域,截取包含车道线的主要区域[18]。可以将天空、周围的树木和车辆等干扰因素剔除,提高算法的准确率,同时可以减少检测数据量,加速算法的运行,提高算法的运行效率。图2为行车记录仪视频中截取的一帧图片,图3中的绿色边框区域为设定的感兴趣区域。
图2 行车记录仪视频中截取的一帧图片
图3 感兴趣区域划分示意图
2 图像二值化
2.1 边缘检测
采用阈值过滤的目的在于提取车道线特征并得到清晰的车道线像素,进一步获取车道线的位置信息。考虑到处理过程的速度和处理结果的准确率两方面因素,选择OpenCV中的积分图法进行图像阈值过滤及图像二值化。
Viola等[19]首先在目标检测框架中使用了积分图像原理。积分图法能够高效地获得一张图像中方形区域像素值之和,即基于获得检测图像的积分图,可以使用时间维度小的四则运算计算出图像中需求的方形区域的像素值之和。因此,在计算机视觉图像处理方面使用积分图法能够极大地提高程序的运行速度。积分图的概念可用图4表示:点A(x,y)的值等于该点左上区域的像素值之和,即灰色区域部分的像素值之和。
图4 积分概念示意图
积分定义如式(2)所示:
(2)
式中:ii(x,y)为某点的积分值,i(x′,y′)为某点的像素值。通过积分图能快速地计算出特定区域的像素值之和,如式(3)所示:
ii(D)=ii(4)+ii(1)-ii(2)-ii(3)
(3)
式中:ii(1)为图5区域A的像素值之和,ii(2)为区域A+B的像素值之和,ii(3)为区域A+C的像素值之和,ii(4)为区域A+B+C+D的像素值之和。
图5 积分区域示意图
使用积分图得到图像中感兴趣区域(D区域)的像素值之和,从而可计算出D区域内像素值的平均值A(D)。车道线大部分为白色或黄色,其灰度值较高,而感兴趣区域内车道线像素占整体路面像素的比例较小,因此,若D区域中一像素点的像素值大于等于1.25倍D区域内像素值的平均值A(D),就把该像素点的灰度值重置为255,即该像素点被认定是车道线部分像素点。否则,当D区域中的一像素点的灰度值小于1.25倍D区域内灰度值的平均值A(D),就将该像素点的灰度值重置为0,即该像素点被认定为背景部分像素点[10],如式(4)所示。
(4)
式中:Pnew(x,y)为重置后的像素值,P(x,y)为重置前的像素值,A(D)为D区域内像素值的平均值。
在光照强度变化的干扰下,积分图法一般具有比RGB、HLS颜色空间阈值过滤方法更好的抗干扰能力。原因在于在光照强度过大或者过小的路况下,RGB三通道的像素值会受到光照强度大小的影响,超出正常的白色阈值范围,从而导致检测效果较差。而积分图法是根据区域内平均像素值设定车道线阈值,具有更好的抗光照干扰能力。积分图法二值化后的效果如图6所示。
图6 积分图法二值化效果示意图
2.2 边缘检测形态学去噪
形态学去噪是针对图像中像素区域的形状而进行的一系列处理[20]。腐蚀和膨胀是2种常见的形态学处理方式。腐蚀的原理是将设定好的卷积核与图像作卷积运算,当卷积核对应的区域中的所有灰度值都是255,则中心元素的灰度值保持不变,否则将其灰度值重置为0。膨胀的原理是将设定好的卷积核与图像作卷积运算,当卷积核对应的区域中的所有灰度值中只要有一个是255,那么中心元素的灰度值就重置为255。根据不同的处理要求,还可以将这2种形态学操作结合起来,获得所需求的目标效果。
根据形态学原理以及二值化车道线特征具有少量噪声边缘的特点,本文算法对二值化图像先后进行OpenCV中的膨胀和腐蚀操作(开运算),处理后效果如图7所示,有效地去除非车道线的少量噪声像素,只留下左右车道线的像素。
图7 开运算效果示意图
3 透视变换
由于车载摄像头视角与路面存在一定的夹角,而且路面可能存在凹凸不平等情况,导致获取到的图像几何特征变化很大和过高阶次的曲线拟合。使用透视变换的方法将原图像平面转化为鸟瞰图,可以以更加全面完整视角的图像来检测车道线。透视变换的原理是投影中心、原图像平面上的点、新图像平面的点三点共线,按沙尔定理将承影面绕迹线旋转一定的角度,改变先前的投影关系,始终可以保持承影面上的几何形状不发生改变。透视投影能使原始图像中原本不相平行的两条直线在投影面后互相平行,改变一张图像目标的形状和尺寸,但不能精确地反应投影后的图像中目标的真实形状和尺寸。其原理如图8所示。
图8 透视变换原理示意图
透视变换是根据光学原理将图像投影到另一个平面,其变换公式如下:
(5)
式中:u,v为初始图像坐标,w数值为1,经过透视变换后的表达式为:
(6)
式中:x、y表示经过逆矩阵变换后得出的图片横、纵坐标。OpenCV中的逆矩阵变换需要8个参数即4个点的坐标进行求解。经过透视变换转变为鸟瞰图的效果如图9所示。
图9 透视变换后的鸟瞰图
由图9可知,新图像呈现出了正投影(垂直朝下)的效果。在这个视角中,左右两车道线互相平行,与实际中摄像机垂直朝下的视角基本一致。因此,这就使图像从三维透视角度转变为二维投影的图像,方便后续的车道线拟合工作。
4 车道线识别
4.1 基准点定位
通过图像二值化获得的鸟瞰图仍然存在一定的干扰因素,为了更准确识别出车道边界,需要进一步确定车道线像素点的位置,因此选用滑动窗口进行检测,可有效减小噪点对整体拟合结果的影响。在滑动窗进行检测之前需要确定车道线像素的基点位置,即图像最下方车道线像素的横坐标。因为车道线像素在鸟瞰图上一般都会集中在x轴的一定范围内,所以把图片一分为二,检测左右两边在x轴上的像素分布峰值。图10为不同场景下鸟瞰图的x轴像素分布。
由图10(a)中的鸟瞰图可以看出,当左右车道线是标准的双实直线时,干扰像素少,在x轴像素分布图中左右两部分各有一个明显的峰值。在图10(b)的鸟瞰图中,左边车道线是实直线,经二值化处理后其边缘变成2条曲线,右边车道线是虚直线,经处理后形成多个长条形区域,因此在像素分布图中左边出现2个距离较近峰值,右边出现一个较低的峰值。在图10(c)的鸟瞰图中,左右车道线是标准的双实线,但是图中仍存在较多干扰像素,所以在像素分布图中左右两边均出现多个峰值。像素分布图内两侧的最高峰值仍然对应着车道线像素的集中位置。图10(d)的鸟瞰图中,由于车辆在弯道中,左边车道线为实曲线,右边车道线为虚曲线,所以测试图中峰值出现的位置相对分散,峰值处呈现上窄下宽的形状,但车道线像素的位置仍大致与像素分布图中,左右两边的峰值的横坐标对应。综合上述的多个场景,x轴像素分布图中左右两侧最高峰值的横坐标可以作为车道线初始基准的横坐标。
图10 不同场景下识别鸟瞰图x轴像素分布图
4.2 滑动窗多项式拟合
本文算法使用了滑动窗检测法[21]采集车道线参数估计样本点。图11展示了滑动窗口检测的整个流程,首先设定滑动窗的迭代数量n,根据滑动窗的数量计算滑动窗的高度,并根据上一步得到的基准点确定左右两滑动窗的基点位置,然后设定滑动窗内获取有效像素点坐标个数的最小值。在程序循环中,滑动窗自下而上进行滑动取样,即对滑动窗内的像素点进行遍历并记录像素值为255的有效车道线像素点的坐标,将有效点的坐标存储进入数组。当一次滑动窗记录的有效点坐标个数大于预先设定的最小值,则以当前滑动窗内记录的所有点横坐标的平均值用作下一次滑动窗的基点位置。当一次滑动窗记录的有效点坐标个数小于预先设定的最小值,则记录一次不满足条件次数,并进入下一个循环。循环结束后,使用最小二乘法进行曲线拟合。
图11 滑动窗检测的基本流程框图
如图12所示,黄色部分表示车道线像素点,红色部分表示拟合出的左侧车道线曲线,蓝色部分表示拟合出的右侧车道线曲线,绿色矩形框则是设定的滑动窗边框。
图12 滑动窗拟合曲线过程图
图12(a)中左右两车道线为实直线,存在少量干扰像素,滑动窗滑动平顺,基本滑动方向沿着车道线延伸方向,拟合结果较好。图12(b)中左车道线为实直线,右车道线为虚直线,同时图像几乎不存在干扰像素,拟合结果良好。图12(c)中左右两车道为实直线,同时存在着大量的干扰像素。由于实直线的像素数量充足和对滑动窗的宽度的限制,因此也得到了理想的拟合结果。图12(d)中左车道线为实曲线,右车道线为虚曲线,同时图像几乎不存在干扰像素。与左侧相比,右滑动窗因车道线像素区域间隔较大而滑动不够平顺且最上方区域的一部分车道线像素没有被采集,因此拟合结果一般。图12(e)中左车道线为实直线,右车道线为虚直线,同时图像存在大量的干扰像素。左车道线为实线,像素点充足,拟合结果优秀。右车道线周围存在大量的干扰像素,上方滑动窗采集到了大量的干扰像素,因此拟合结果出现了偏差。最终将拟合出来的车道线再次通过透视反变换并与原道路图像叠加,可得到车道线的最终检测结果以及车道区域。
5 实验结果及分析
5.1 车道线检测
为验证本文车道线识别算法的准确性与识别效率,用车道线识别算法对行车记录仪拍摄的行车视频进行车道线识别,并进行结果分析。本次实验使用的PC机的配置为:Intel Core i5-6300HQ CPU 2.3 GHz。利用python3.5配置OpenCV4.0.0.21环境进行本算法的实验。检测的图片截取自行车记录仪视频,其中的每一帧图片大小为961×540,视频的帧率为30帧/s。
本文算法在检测双实线时,视频图片效果优秀且稳定,原因在于实线车道线能检测到的像素多,抗干扰能力强,如图13(a)(c)(d)所示。
图13 不同场景的实验结果
在检测虚线时,虽然可以较好地拟合出车道线,但由于摄像头会有轻微的抖动等,识别效果的稳定性比实线稍差一点,不过抖动的范围基本上处于车道线的像素范围内。如图13(b)(e)(f)中,右边车道线属于虚线的情况,图13(g)左右车道线都为虚线。当一边车道线是虚线时,能检测出来的车道线像素较少,此时极易受到周围非车道线因素的干扰。在图13(e)中,右边车道线紧靠着一辆黑色车辆,那么邻近黑色车辆区域的车道线拟合受到一定的影响。
图13(b)属于有路面阴影的情况。图片中左车道线处于桥面阴影下,这种情况下算法拟合效果不稳定,有可能出现误检。原因有两点:① 处于阴影下的车道线光照较暗,Sobel边缘检测算法和颜色阈值过滤的方法会受到一定的限制,尤其是颜色阈值过滤的方法这种对光照敏感的算法;② 由于积分算法的原理是根据感兴趣区域的像素平均值作为分割标准,当路面一部分有阴影,另一部分无阴影时,有阴影部分的车道线难以被检测出来。图13(c)(d)属于亮度较低的情况,图片中亮度分布均匀且车道线为实线,此时算法的检测效果良好且稳定。图13(h)中路面正中央有指示标识线,由于该标识线像素量较少,所以算法的检测效果良好稳定。
为进一步验证算法的泛化能力,选取了caltech车道线数据集中城市道路标准路况图片进一步进行检测。测试结果中(如表1所示),路面光照充足条件下样本量为602张,误检量为45张,算法的检测正确率为92.52%,与文献[22]相比,准确率提高了5.37%。实时性方面,由于划定了感兴趣区域,减少了车道线搜索时间,平均速度提升了33.08%。路面有阴影条件下样本量为255张,误检量为46张,与文献[22]相比,准确率从原来的76.33%提高到81.96%,平均耗时也较少了约33.2%。部分识别结果如图14所示。算法各个步骤的用时如表2所示。
图14 caltech数据集识别效果
表1 算法性能结果
表2 算法各步骤平均用时
5.2 特殊工况下的车道线重构
当车辆驶入十字路路口右转弯道或者高速公路匝道汇入主车道时,会出现一边的车道线突然消失的状况。目前的算法是以采集到的大量车道线像素点为基础拟合车道线,当某一边车道线像素点不足时,那么这一边车道线的拟合效果便会受到环境因素的极大干扰,甚至出现误检漏检的情况。因此,本文针对这种情况提出了一种车道线重构的解决方案。
假定瞬时车辆的行驶方向平行于车道线方向,并且其中一侧车道线是清晰连续的。根据车道线之间相互平行的几何特性,当瞬时车辆的行驶方向平行于车道线方向时,一边车道线一般情况下可以由另一边车道线平移得到。当算法判定图像处于此种情况时,就将视频获取的上一帧图片所检测出的车道线宽度进行保留,并作为此帧图片的车道线宽度,即车道线在鸟瞰图下的平移量。当算法拟合出一边清晰连续的车道线后,以这边车道线的拟合曲线为基础,复制平移一个保留下来的车道线宽度,作为缺失边的车道线拟合曲线。缺失边的判断标准:滑动窗记录车道线像素点坐标个数小于最小值的次数≥设定值。因此,当某一边车道线模糊不清的程度满足条件值时,也被认定为消失边。如图15所示,右车道线为缺失边情况。此时只有右上角的1个滑动窗内检测到像素点,而有其余8个滑动窗内检测出的像素点数量不满足条件,右车道线属于缺失边。蓝色曲线是以红色曲线为基准,平移一个车道线宽度后得到的重构曲线。
图15 重构车道线鸟瞰图
图16为无重构车道线效果,右边车道线属于缺失边的情况,由检测结果可知右车道线拟合效果受到远处的车道线影响,导致检测出的车道线区域突然变宽。如果算法在图像中右车道区域检测不出像素点,则会因为曲线拟合缺少参数估计点而导致算法检测失败。采用本文方法重构车道线后的效果如图17所示。
图16 无重构车道线效果
图17 重构车道线效果
5.3 车辆偏移量分析
当算法准确地识别出车道线后,可通过所拟合的车道线曲线计算出一系列与之有关的路况信息,其中车辆处于车道线区域内的位置信息便是一个对车辆控制十分重要的条件。根据基准点定位中的图10不同场景下识别鸟瞰图x轴像素分布图可以得出,在假定摄像头位置处于车辆中间位置时,经过一系列运算就能计算出车辆相对于车道线区域中间位置的偏移量。原理如图18所示。
图18 偏移量原理示意图
假定摄像头的安装位置,如图18中O点位置。L、R点分别表示左、右车道线像素值在横坐标上的峰值点,即实际左右车道线的中心点横坐标。M点表示车道线区域的中间位置。则可以通过以下公式计算出车辆相对于车道线区域中间位置的偏移量:
(7)
式中:lOM表示从O点到M点之间的距离;lLM表示从L点到O点之间的距离;x表示车辆相对于车道线区域中间位置的偏移百分比。计算出偏移百分比后,将数据参数在结果图上标注出来,效果如图19所示。
图19 标注偏移量效果
图19(a)中车辆相对于车道线中间区域向左偏移量为9%,图19(b)中车辆相对于车道线中间区域向右偏移量为34%,图19(c)中车辆处于车道线区域的正中央,图19(d)表示车辆处于压在识别出的车道的右边线的情况。
6 结论
针对目前基于特征的车道线识别算法识别不佳的状况,提出了一种基于滑动窗口拟合的车道线识别算法来实现车道线的识别。首先对图像进行感兴趣区域划分,其次根据RGB颜色空间将图像三通道以5∶5∶0的比例转化为灰度图,经过高斯滤波后通过积分图法将图像转换为二值化图像,再使用一系列形态学去噪并将二值化图像转换为鸟瞰图,最终使用滑动窗多项式拟合法,采集得到车道线像素点后使用最小二乘法拟合出曲线车道线。
实验结果表明,本文算法能适应多种路况,达到了较好的准确率和实时性。车道线重构效果良好,基本满足道路行驶安全的要求。本文根据车道线识别结果,能够计算出车辆相对于车道线区域中间位置的偏移量,有助于提高智能车辆主动控制的安全性。