赵 岩, 赵建国
(郑州大学机械与动力工程学院, 郑州 450052)
随着汽车行业的快速发展,车辆的辅助驾驶技术在车辆的安全行驶方面扮演着日益重要的角色,而准确高效地检测车道线是实现辅助驾驶技术的基础。传统的车道线检测方法主要分为两大类:基于特征和基于模型。Wang等[1]先采用CHEVP方法预测车道线消失点位置,接着确定B-Snake车道模型的起始位置,然后基于道路模型确定用于描述车道线的样条曲线所需要的控制点,最后采用最小均方误差法更新曲线控制点实现车道线的检测。付利军等[2]首先提取图像的边缘信息,将边缘像素最多的行作为感兴趣区域(region of interest,RoI)的分界线,然后选择特定的梯度方向细化RoI以抑制非车道线边缘等杂乱背景的影响,最后利用方向区间与阈值对Hough变换改进来检测车道线,由于该方法基于边缘像素数目确定RoI,当存在移动车辆等强干扰的情况下不能有效地确定RoI。姜立标等[3]设计了一种结合改进Hough变换和双点去除R-最小二乘法检测车道线,并运用卡尔曼滤波器跟踪车道线。王智宇等[4]采用快速的积分图法对图像进行自适应二值化,接着进行Harris检点检测,最后运用改进了选择初始点和删除外点的RANSAC估计车道线参数。刘源等[5]提出了一种基于边缘特征点聚类的车道线检测方法,首先基于车道线边缘的梯度分布和灰度分布提取边缘特征点,然后根据车道线特征点的连续性和梯度方向的一致性进行特征点聚类得到离散区域,通过衡量各区域之间的相似度进行区域聚类,最后选择最优区域内的点进行拟合。
在实际的交通场景中,前车变道或者后车进行超车后返回本车道的情况时有发生,现有的基于机器视觉的车道线检测算法容易受到移动车辆遮挡的影响,导致算法的准确率下降。为此,现提出基于车道线边缘特征点筛选的车道线检测算法。首先进行图像预处理,包括划分图像感兴趣区域、灰度化处理、中值滤波去除椒盐噪声,再运用canny算子提取边缘图像。然后查找边缘图像的轮廓,根据轮廓的角度特征和所包含的像素点数目进行初筛选,最后运用基于相对距离与梯度的双阈值筛选法实现车道线边缘特征点的精确提取并拟合车道线。
为了减少视频帧图形中天空和建筑等背景信息对提取车道线的干扰,需要对图像进行预处理,为后续的检测过程做好铺垫,进而提高检测效率。
在实际的交通场景中,尤其是周围车辆比较多的情况下,能够准确检测当前车道线尤为重要。在进行感兴趣区域划分的过程中,应该去掉图像周围树木、建筑以及天空等背景图像。实验中图像由安装在车辆正中间的摄像头采集,而且当试验车前方出现车辆变道时,前方车辆会逐渐闯入视野中间,在此过程中前方移动车辆会对车道线产生不同程度遮挡,从而产生强干扰,最终导致车道线检测算法产生误检或者漏检现象,因此本文算法更多地关注图像中间区域。近景范围内车道线近似为直线而且会相交在消失点,考虑到后续操作的计算量,将以视野中心点、左下点和右下点为顶点的三角形区域视为感兴趣区域(RoI),划分结果如图1所示。
图1 感兴趣区域Fig.1 Region of interest
在车辆行驶过程中,摄像头采集到的RGB(red,green,blue)图像为三通道彩色图像,包含较多的色彩信息,由于更加关注图像的边缘信息,通过加权平均法对采集到的图像进行灰度化,如图2所示。由于沥青路面在光照下容易产生椒盐噪声并且本文算法在提取车道线特征点时主要依靠图像的边缘信息,因此采用中值滤波进行去噪,在去噪的同时尽可能保留边缘信息[6],效果如图3所示。
图2 灰度图Fig.2 Grayscale image
图3 3×3中值滤波Fig.3 3×3 Median filtering
当视野内存在车辆时,车辆本身的色彩信息会对基于颜色特征的车道线检测算法产生强干扰,因此本文算法只提取车道线的边缘信息,采用canny算子进行边缘图像提取以便获取更好的边缘图像。
1.3.1 应用高斯滤波去除图像噪声
提取图像边缘时容易受到噪声的干扰。为了更好地获取边缘图像,采用一个环形二维高斯函数平滑图像。令f(x,y)表示输入图像,G(x,y)为高斯函数,即
(1)
式(1)中:σ为x的方差。
进行卷积操作获取平滑后的图像fs(x,y)为
fs(x,y)=G(x,y)*f(x,y)
(2)
式(2)由一个5×5的高斯模板实现。
1.3.2 计算梯度幅值和方向
用M(x,y)表示梯度幅值图像,计算公式为
(3)
式(3)中:gx和gy分别为图像水平方向和垂直方向上的梯度的幅度。
用α(x,y)表示角度图像,计算公式为
(4)
式(4)中:M(x,y)和α(x,y)是与计算出它们的图像的尺寸相同的阵列。由于M(x,y)是由梯度产生的,所以它在局部最大值周围通常包含更宽的范围。
1.3.3 非极大值抑制
逐一访问梯度幅值图像中的像素,判断像素点是否为其周围像素点中具有相同梯度方向的最大值,比较过程如图4所示。
阴影背景的点都是向上方向梯度的局部最大值,所以这些点将会被保留,其他点会被抑制,因此,每个梯度方向上的边缘点只保留了一个,实现了对图像M(x,y)边缘的细化,细化后得到边缘图像gN(x,y)。
1.3.4 双阈值确定边缘
通过一个低阈值TL和一个高阈值TH对图像gN(x,y)进行阈值处理,令TL∶TH=1∶2。创建两幅空白图像gNH(x,y)和gNL(x,y),计算公式分别为
gNH(x,y)=gN(x,y)≥TH
(5)
gNL(x,y)=gN(x,y)≥TL
(6)
gNL(x,y)=gNL(x,y)-gNH(x,y)
(7)
阈值处理之后,gNH(x,y)中的非零像素通常比gNL(x,y)少,由式(7)从gNL(x,y)中删除所有来自gNH(x,y)的非零像素,此时gNH(x,y)和gNL(x,y)中的非零像素可分别表示“强”“弱”边缘像素,以gNH(x,y)中未被访问的边缘像素为基准,通过8连通性的连接方法将gNL(x,y)的像素与gNH(x,y)连接,保留所有能够成功连接的像素,未能成功连接的像素置为零。最终边缘检测结果如图5所示。
图5 边缘图像Fig.5 Edge image
当前方有车辆(尤其是白色车辆)进行变道操作时,车辆本身的色彩信息会对基于颜色特征检测车道线的算法产生强干扰,导致算法出现漏检或者误检,因此提出了一种基于轮廓筛选的方法对车道线进行实时检测。
轮廓可以视为一系列点的集合,在提取边缘轮廓线的过程中,需要遍历边缘图像中每个像素点,当读取到每条边缘线的首个像素点时,将它视为参考点,然后以参考点为中心,在其附近邻域的3×3范围内查找邻接的像素点,如果存在邻接像素点,则将它们放入同一个集合内,直到没有邻接像素为止,如果参考点有多个邻接像素点,则每个参考点代表一个延伸方向,按每个方向查找邻接像素点,直到找不到为止[7],查找结果如图6所示。
图6 部分轮廓Fig.6 Partial outline
尽管使用canny算子提取轮廓的过程中对边缘进行了连接,但仍会留下些许短边缘,在查找轮廓的时候,也会将它们视为轮廓。通过查找轮廓的结果可知,得到的轮廓分为三种:非车道线轮廓、车道线轮廓以及混合轮廓(前方车辆的轮廓或者阴影边缘与车道线粘连在一起)。
轮廓筛选的目的是去除非车道轮廓,保留车道轮廓与混合轮廓。首先基于轮廓所包含的像素数目对轮廓进行筛选,设置轮廓像素阈值为60个像素点,当轮廓所包含的像素数目小于阈值时则舍弃此轮廓,接着对轮廓的角度进行限制,为了获取轮廓的角度,给每条轮廓构造最小外接矩形,将外接矩形的倾斜角度近似为轮廓角度。由于采集图像时摄像头安装在车辆中间,因此车道线的轮廓的角度范围可以确定在30°~55°[8],对于混合轮廓,由于车辆的轮廓只会位于混合轮廓的中间或者一端,且划定RoI的过程中也会分割掉部分车辆轮廓,因此混合轮廓的角度也可以由外接矩形的倾斜角近似,轮廓筛选结果如图7所示。
图7 轮廓筛选结果Fig.7 Contour screening results
为了从混合轮廓中提取出车道线边缘特征点,提出了一种基于相对距离与距离梯度的双重阈值筛选法[8]。通过轮廓最小外接矩形的宽高比判断轮廓是混合轮廓还是车道线轮廓。如果轮廓是混合轮廓,那么提取轮廓内所有像素点的位置信息,以轮廓的倾斜方向为基准,计算每个像素点相对于其在基准方向上的投影点的欧式距离以及相邻点的距离梯度,最后通过双重阈值去除干扰像素点。
假设f(x,y)表示一幅具有两个连续变量s和t的连续图像函数,将它取样为一个二维阵列f(x,y),包含M行和N列,如式(8)所示,其中(x,y)是离散坐标。图像在任何坐标(x,y)处的值只记为f(x,y),将f(x,y)的空间坐标映射到平面坐标系,实现像素点位置信息的提取,提取结果如图8所示。
图8 像素点位置信息Fig.8 Pixel position information
(8)
对于坐标分别为(x,y),(s,t)和(v,w)的3个像素点p、q和z,如果
(1)D(p,q)≥0[D(p,q)=0,当且仅当p=q]。
(2)D(p,q)=D(q,p)。
(3)D(p,z)≤D(p,q)+D(q,z)。
那么D是距离函数或度量。p和q之间的欧几里得(欧式)距离的定义为
(9)
考虑到算法的运算成本,采用如图9所示二维矢量法计算式(9)。
图9 二维矢量法Fig.9 Two dimensional vector method
由勾股定理得
(10)
(11)
(12)
(13)
像素点B的相对距离为
(14)
计算结果如图10所示。
图10 相对距离曲线Fig.10 Relative distance curve
为了进一步提取像素点的位置信息,定义相邻两个像素点的相对距离的差值为相对距离梯度,用Drg表示为
Drg(i)=Dr(i)-Dr(i-1)
(15)
式(15)中:i为像素点序号。计算结果如图11所示。
图11 相对距离梯度曲线Fig.11 Relative distance gradient curve
由于移动车辆遮挡车道线是一个渐变的过程,混合轮廓内车道线边缘像素的数目也会随之改变,无法直接设置相对距离阈值进行特征点提取,因此提出相对距离与梯度相结合的双重阈值筛选法进行特征点提取。相对于混合轮廓的倾斜方向,车道线边缘像素点的Drg基本维持在较小值(存在少数Drg较大的车道线端部像素点),而车辆形成的干扰部分的轮廓包含多数Drg较大的像素点,并且对于不同的车辆轮廓按照本文方法计算的Drg幅值基本一样,因此对Drg进行阈值处理会大幅度提高阈值的自适应性。为了获取合适的梯度阈值,将阈值区间[0,3]以0.1为间隔提取出来30个Drg阈值,以使车道线边缘像素点占混合轮廓像素点比例最大的Drg为Drg阈值。通过对50帧图像进行相对距离梯度筛选实验后,最终确定Drg阈值Trg=0.5,此时车道线边缘像素点所占比例均值为0.76。当车道线边缘像素点所占比例最大时,Dr均值Dmean最靠近车道线,因此设置Dr阈值Tr=Dmean。Dmean的值由式(16)计算。
(16)
式(16)中:n为梯度筛选后的像素点数目。
具体筛选过程如下。
(1)由Drg≤Trg对混合边缘的像素点进行筛选。
(2)计算筛选出来的像素点的相对距离均值。
(3)根据Tr(1-β)≤Dr≤Tr(1+β)对混合边缘里的所有像素点进行筛选。
其中扩张系数β用来对Tr进行适当的缩放以便保留更多的特征点,令扩张系数为0.002,同时剔除满足步骤(1)的点,最终获得车道线边缘特征点。筛选结果如图12所示。
图12 特征点提取结果Fig.12 Feature point extraction results
当有移动车辆(尤其是白色车辆)遮挡的情况下,传统的基于灰度等特征的检测算法容易出现误检或者漏检的情况,如图13所示,而本文算法能够在车道线被大幅度地遮挡的情况下有效地检测到车道线,如图14所示。
图13 传统方法Fig.13 Traditional method
图14 本文算法Fig.14 Algorithm in this paper
当车辆前方有车辆进行变道时,车辆对车道线的遮挡是一个渐变的过程,期间会对车道线产生不同程度的遮挡,为了进一步验证本文算法的有效性,采集了一段具有1 320帧图像的视频段(其中包含三次前方车辆变道的过程)对本文算法和其他算法进行测试和比较,结果如表1所示。
表1 不同方法的检测结果Table 1 Different test results
在双虚线的路况中难免会出现两侧车道线同时短暂消失的情况,此时多数算法会采用跟踪算法预测车道线,因为在预测的过程会存在误差,所在统计上表数据的过程中,将跟踪算法预测车道线的帧数视为漏检帧数。由表1可知,本文算法能够实现存在移动车辆遮挡情况下的实时检测任务,准确率提高10%以上,检测速度为7 ms/帧,满足实时性要求。
(1)提出了一种基于轮廓筛选的车道线检测算法。首先利用canny算子提取边缘图像,查找图像轮廓,然后根据轮廓角度等特征实现车道线的粗提取,接着利用基于相对距离梯度的自适应双阈值筛选法进行车道线特征点的粗提取,最后对提取到的点进行拟合。
(2)实验表明,该方法能够在存在车辆变道的情况下准确检测车道线,而且能满足检测任务的实时性需求。