朱鸿宇,杨 帆,高晓倩,李学娇
(河北工业大学 电子信息工程学院,天津 300401)
车道线检测是智能驾驶领域的核心功能之一,也是很多后续识别算法的基础[1],其识别效果很大程度上决定了整个智能驾驶算法的最终效果。近年来,国内外关于车道线检测算法的研究日渐深入,文献[2]采用了传统霍夫变换搭配改进的Canny边缘检测算法,使用迭代算法来计算最优阈值,进而对二值图像进行边缘检测。文献[3]采用光流法来进行快速车道线检测,通过对关键特征点的位置进行预估,缩小ROI区域,进而降低算法运算量。文献[4]采用Canny边缘检测搭配改进的概率霍夫变换算法提取直线,最终拟合还原出原始车道线。文献[5]通过逆透视的方法消除车道线远近变化,得到若干组平行的车道线,再通过高斯滤波消除噪声,结合霍夫变换提取车道线,并引入RANSAC进行拟合。目前这些方法检测精度都能达到基本要求,但都存在检测效率不高、难以满足实际需求等问题。
由于传统霍夫变换算法坐标转换复杂,计算量较大,无法同时兼顾实时性和准确性的要求,该文采用一种改进后的基于级联霍夫变换的直线检测算法用于车道线的检测工作。首先对图像传感器采集来的视频帧序列进行ROI选取、滤波、边缘检测和非极大值抑制等预处理,然后采用改进后的直线检测算法进行车道线消失点的定位,并基于消失点的位置向下遍历所有符合要求的点,最后使用最小二乘法对这些点进行拟合,完成车道线检测。
在辅助驾驶系统中,算法的实时性与准确性同等重要,因为车辆在高速行驶时,如果由于计算量过大而无法保证实时的检测,可能无法对突发情况进行快速处理[6]。因此需要对视频帧进行预处理,仅保留在后续算法中必要的图像信息。
从相机传感器中采集到的彩色图像一般包含了R(红色)、G(绿色)、B(蓝色)三个通道的深度信息,每个通道的取值在0至255之间,人眼所看到的所有颜色均可由这三种通道的颜色按照不同的比例搭配得到,行车道路上的车道线一般由黄色和白色两种构成,其RGB分量分别为(255,255,0)和(255,255,255)。而算法在针对彩色图像进行处理时,要对这三个通道进行依次处理,时间开销将会很大,为了提高运算效率,往往将由RGB三个通道组成的彩色图像转化为单通道的灰度图像。该文选用加权平均法进行灰度化运算。人眼对绿色最敏感,其次是红色,而对蓝色最不敏感,对三通道的权重分别定为红色为0.299,绿色为0.587,蓝色为0.114,以此加权得到的灰度值最接近人眼看到的实际感觉。公式如下:
f(i,j)=0.299R(i,j)+0.587G(i,j)+
0.114B(i,j)
(1)
由先验知识可知,待检测的车道线信息往往出现在图像的中下方,因此经由采集设备取得的图像很大一部分是可以去除的,例如天空、道路两侧的山峰、树木和楼房等,这些环境因素对判断车道线并无作用,选取合适的ROI区域可以极大地降低算法运算量,提升运算速度,保证检测系统的实时性。
当相机传感器固定安装在车辆上后,其能检测到的视野范围就固定不变了,因此划分的感兴趣区的下边界应当处于视野前方某个固定的位置,比如前车盖的上方。对于相机采样到的道路环境图像来说,天空区域相对路面区域灰度值总是整体偏大而灰度变化相对较小,在两个区域的交界处也就是地平线附近,灰度值会发生明显突变。根据这个特点可以使用行灰度值统计的方法动态划定感兴趣区的上边界位置,如图1所示,随着行驶环境不同,感兴趣区的边界也会随之改变。
图1 感兴趣区域划分
从图1可以看出,基于行灰度均值的动态感兴趣区划分相比于固定比值的感兴趣区更加灵活,提高了运算效率,同时,更多无关因素的去除也减少了后续检测过程中的干扰噪声,提高了检测的准确度。
图像下采样的原理便是将一张原本分辨率为m×n的图像进行s倍缩放,最终得到一张分辨率为(m/s)×(n/s)的图像,其目的是为了滤除原图像中较为丰富的冗余信息,尽量只保留目标车道线和车辆的整体形状、大小等主要信息,降低计算机后续处理的负荷,提升运行速率。
该文采用基于高斯金字塔的下采样方法[7],通过对原始图像进行高斯滤波并删除偶数行和列,得到一层新的图像,将此图像作为新的输入,不断重复滤波和删除偶数列这个过程,便得到了若干张不同分辨率的图像。算法如式(2)所示:
(2)
由于图像采集设备及环境因素的影响,实际采集到的图像会有些噪声干扰点,这些噪点的存在会降低图像质量,可能会对需要提取的车道有效信息产生干扰。中值滤波是一种非线性滤波,它的原理是选取一个窗口S,在整幅图像上从左到右,从上到下滑动,滑动过程中,窗口S所框选的范围可确定一个邻域,在该邻域内所有像素点的灰度值进行从小到大的排列,取其中值作为该像素点的灰度值。由于其原理特性,中值滤波在滤除椒盐噪声方面效果极佳,同时对图像边缘的保护效果较好,该文采用这种滤波算法对车道线图像进行滤波处理。
在车道线提取中,车道线的形状特征是需要关注的重点,通过判断图像中存在的线段长度、间隔及方向等特征规律,即可判断车道线所在位置。经典的边缘检测算子有Canny算子[8]、Sobel算子[9]、Robert算子、Prewitt算子等,不同算子在针对各类不同场景下有着各自的优缺点。该文采用Sobel算子的边缘提取方法,由于提取出的边缘信息存在梯度变化,因此显示出来的边缘存在一定的宽度,会给后续运算造成额外运算量,使用非极大值抑制将提取出的梯度信息的局部最大值找出并将其他非极大值滤除,便可将图像边缘处理成单个像素宽度[10]。图2为边缘检测和非极大值抑制效果图。
图2 图像预处理效果图
经过前述操作,得到了包含部分环境干扰噪声的车道线边缘信息。一种经典的车道线检测方案是霍夫变换,原理是将原始图像中每一个待检测点的坐标映射到参数空间,然后基于一定的约束条件进行投票,筛选出的点可认定为处于同一直线上。霍夫变换的抗噪性及鲁棒性比较强[11],直线检测效果较理想,但由于在参数空间的映射过程中,需要对每个待检测点进行一次极坐标转换,因此算法运算量很大,很难达到实际行车环境的实时性要求。
对此,该文提出一种使用平行坐标系映射[12]的级联霍夫变换直线检测方案,这种算法在参数空间的映射过程中坐标值变化为线性变换,所以运算量相较传统的霍夫变换更低。
对于提取到的车道线边缘信息,通过对每一个特征点的行列信息进行记录,将其标注为(xi,yi)。在二维空间绘制两条平行线,分别标注为X1轴和X2轴,平行线之间的宽度设定为d,对于每个特征点(xi,yi),将xi标注在X1轴上,yi标注在X2轴上,并做一条过这两点的直线。
至此便将一个笛卡尔坐标系上的坐标点,转化为了平行坐标轴上的一条直线。为方便直线公式表达,将平行坐标轴表示在笛卡尔坐标系下,其中笛卡尔坐标系的Y轴与X1轴重合,X轴与过X1轴零点的垂线重合,映射后的(xi,yi)便转换成了一条过(0,yi)和(d,yi)的直线L,其方程为y=x(yi-xi)/d+xi。
坐标点在平行坐标系下的性质:
任取在笛卡尔坐标系上共线的三点(x1,y1)、(x2,y2)、(x3,y3),其共线的直线方程为y=k1x+b1,将它们映射到平行坐标轴上,直线方程Li为y=x(yi-xi)/d+xi,i=1,2,3。
因此,联立L1和L2方程可求得两条直线的交点坐标为(d1/(1-k1),b1/(1-k1)),同时联立L1和L3的方程可得交点也为(d1/(1-k1),b1/(1-k1)),即L1、L2和L3交于同一点。由此可得一个结论,在笛卡尔坐标系上共线的三点,投影到平行坐标系上所对应的三条直线必相交于一点,即直线映射到平行坐标系上会变为一点,这个结论可以为将平行坐标系引入直线检测算法提供理论依据。
当待检测的直线斜率小于0时,映射到平行坐标系上所形成的直线段不会在X1轴和X2轴之间形成交点,根据k值的不同,这个交点可能存在于X1轴左侧很远的地方,不利于后面的计算。为了解决这个问题,在X1轴左侧距离为d的地方引入一个X0轴,如图3所示。在该轴上标记-yi值,连接X0以及X1轴的点,X0与X1轴之间记为T域,X1与X2轴之间记为S域。由于将原始像素点的纵坐标值均取反,不会改变这些点共线的性质,因此映射到平行坐标系后仍相交于一点这一结论不会改变。此时当直线斜率大于0时,它们在平行坐标系下的映射直线将在X0和X1轴之间产生交点,坐标为(-d1/(1+k1),-b1/(1+k1))。
图3 平行坐标轴下的共线点
在对待检测图像进行基于平行坐标系的坐标映射后,即实现了原始图像中点到线的转换,基于投票机制找出通过直线最多的交点,便可对应找出原始图像中存在的直线。考虑到环境因素的影响,待检测图像中可能会存在一些非车道线区域的干扰直线,需要通过消失点的约束对其进行筛选。该文提出一种基于平行坐标系映射的级联霍夫变换算法检测车道线的消失点。所谓级联,即连续做两次霍夫变换,单次霍夫变换的映射规律是点转换为线,线转换为点,则做两次霍夫变换的结果就变成了点转化为点,线转化为线。
为更准确地表示映射后的点在平行坐标系上的表示,该文采取齐次坐标的表示法,以[x,y,w]来表示平行坐标系中的点,(a,b,c)来表示笛卡尔坐标系下的对应直线ax+by+c=0,则在笛卡尔坐标系到平行坐标系S域的映射过程中,点与线的映射关系如下:
(3)
(4)
T域的映射过程中,点与线的映射关系为:
(5)
(6)
其中,d表示平行坐标系之间的间距,w表示齐次系数,p和l分别表示从点到线的映射还是线到点的映射。
解析了单次映射变换的转换关系后,引入第二次映射变换,级联变换结束后,线到点的映射公式如下所示:
[-dDw,-dx,-x+y-dw]
(7)
[-dDw,-dx,-x+y+dw]
(8)
[-dDw,-dx,x+y-dw]
(9)
=[-dDw,-dx,x+y+dw]
(10)
由上式可以看出,连续经过两次映射变换后,原始图像中的点会经过点到线,线再到点的映射过程,最终在第二个参数空间仍表示为一个点,如图4所示。
图4 级联霍夫变换示意图
这个性质可以引入车道线消失点的检测过程中。一般在结构化道路上,车道线是相互平行延伸的,而由于透视的原因,相机采集到的图像往往呈现一种近大远小的感觉,车道线的延伸方向会相交于一点,这一点便被称为消失点。
由于前面提取出了包含车道线边缘信息的预处理图像,这些边缘信息的像素点整体上呈现共线的特征,其延长线会相交于消失点,虽然在原始图像中无法直接确定消失点的位置,但对其使用级联霍夫变换,使其映射到一个新的参数空间后,便可基于投票的方式快速搜索到消失点,进而推算出其在原始图像中的位置,反推过程的表达式如下所示。
[x,y,w]o→
[-dDw,-dx,sgn(xy)x+y+sgn(y)dw]p
(11)
[x,y,w]p→
[Dy,sgn(x)dx+sgn(y)Dy-dDw,x]o
(12)
其中,下标o表示该点在笛卡尔坐标系上,下标p表示该点在平行坐标系上。
霍夫变换检测车道线的传统做法是依照直线检测结果对所有直线段做拟合,然后再根据直线间存在的交点位置投票选出消失点,再通过消失点约束筛选出实际车道线位置[13]。然而该文通过改进后的级联霍夫变换算法已经得到了消失点位置,可以通过更为简单的做法反推出车道线位置,可显著降低算法的运算量。
车道线的位置一般位于消失点下方,以消失点下侧作为感兴趣区进行扫描,具体检测步骤如下:
(1)由前叙步骤得到消失点位置V(xv,yv),而消失点下方的各待检测点灰度值将其表示为pi(xi,yi),构造累加器S(θ)并置为0;
(2)遍历消失点下方各点,当存在pi(xi,yi)=255时,求出该点与消失点连线的倾角θ,并在相应的累加器中加一,θ的计算如下式所示:
(13)
(3)设置一个阈值Ts,当存在S(θ)>Ts时,过消失点且倾角为θ的直线即为车道线所在直线。
由于实际行车环境中的车道线信息可能存在遮挡、磨损和断连的情况,为避免漏检,给倾角设定一个误差范围±1°,在进行阈值判别时,实际将比较S(θ)+S(θ')与Ts的值,其中θ'∈[θ-1,θ+1]。由于车道线存在的角度范围并不大,通过约束检测范围可以排除掉一些干扰直线[14],比如路沿和围栏等图像边缘误检出的直线,θ的最终取值范围定在30°~150°之间。
虽然根据消失点位置直接过其点画出倾角为θ的直线可以大致确定车道线位置,但为更精确地提取车道线位置,提高算法的鲁棒性,该文采用最小二乘法拟合的方式画出车道线[15]。设目标曲线方程如下式所示:
(14)
取yi=f(xi),Ei=f(x)-g(x),则Ei可用下式的形式表示:
Ei=f(x)-g(x)=
(15)
其中,Ei表示理论值与实际值的误差,当误差的平方和最小时,拟合效果最好,即式(16)应取最小值:
(16)
则计算a0,a1,…,an的方式如下:
(17)
基于上述原理,本节于前叙步骤中已经筛选出符合倾角θ要求的点(xi,yi)(i=1,2,…,n),对这些点以三次曲线模型拟合车道线,得到最终车道线检测结果。
该算法使用的仿真平台为Visual Studio 2019配合OpenCV3.41,硬件平台采用Intel(R) Core(TM)i7-6700HQ CPU@2.60GHz 2.60GHz、GTX 965M和8G内存。为保证算法测试的客观性与准确性,选用的测试数据均采集自公开的TuSimple车道线数据集与ROMA车道线数据集,考虑到真实行车道路情况的多样性,该文选取了多种结构化道路环境以及多种光照及天气情况下的样本对车道线算法进行了实验。
图5展示了几组应用文中算法检测到的车道线结果,其中第一组图像为光照良好情况下的车道检测结果,后两组为极端光照情况下的车道线检测结果,第二组为白天逆光环境的采集样本,第三组为桥洞下弱光环境的采集样本。每组图片从左到右分别为预处理结果和车道线检测效果。通过观察预处理效果和车道检测效果可以看出,该车道检测算法在各种不同的光照环境下均拥有较为稳定的检测效果。
图5 不同光照环境下车道线检测实验结果
为进一步评估文中所提算法的整体表现,以文中算法为实验组,传统霍夫变换直线提取算法作为参照组,选用取自TuSimple车道线数据集的真实环境行车图片用于车道线的识别,包括直行路段、弯道路段、车道线残缺路段等实际行车环境中可能遇到的典型情况合计800帧并统一处理为640×360分辨率。首先针对所有待检测图像使用相同的预处理算法得到道路车道线的边缘信息图像,再分别采用传统霍夫变换和文中改进算法对这些边缘信息图像进行车道线位置检测,比较两种算法处理完所有待检测图像的耗时长短以及检测准确度的区别。为客观统计针对每一帧图像的检测中两种算法的准确度,设定如下检测标准:取实际车道线L1的上下端点a和b,同时取算法检测出的车道线L2中平行于a与b的点,距两点的距离分别为d1和d2。若满足|d1+d2|≤D,其中D为车道线实际宽度,则认为本次车道线检测为准确的。
传统霍夫变换算法与文中改进算法部分对比如图6所示。
通过对比传统霍夫变换和文中改进算法的提取效果,可以发现在一些车道线较为清晰的直线道路上,传统算法和文中算法均可成功检测出车道线,但在一些弯道区域,传统霍夫变换检测出的结果无法准确贴合实际车道线的位置,而文中算法仍可以做到较准确的识别。与此同时,由于级联霍夫变换是点到点、线到线的映射,原始图像中的点映射到参数空间时坐标值变化为线性变换,而传统霍夫变换在映射过程中针对每个点坐标都要进行一次极坐标变换,运算更复杂,所以文中的改进算法在实时性表现上也更优于传统霍夫变换,效果对比如表1所示。
图6 传统霍夫变换与文中算法效果对比
表1 传统霍夫变换算法与文中算法的准确性和实时性对比
由表1可以看出,在对取自TuSimple车道线数据集中的800张测试图像进行检测后,文中算法在实时性和准确性方面均优于传统的霍夫变换算法,其中准确度提升了6.2%,算法速度提升了31%。
通过对传统车道线提取算法进行改进,替换掉其中的霍夫变换步骤,改为映射过程更为简单的平行坐标系映射,然后采用级联的方式进行消失点的提取。由于在连续两次映射后,原始图像的点与第二次参数空间映射后点的坐标属于线性变换关系,相比传统霍夫变换的极坐标映射计算量更小,算法复杂度更低,同时基于消失点位置的直线检测方法也可有效降低误检率。实验结果表明,该算法相比传统检测方案拥有更好的准确性和实效性。该算法仍有发展的潜力,在暗光条件和大弯道等场景的检测有进一步优化的空间,
在将来的研究中,这会是持续改进的侧重点之一。