一种融合分割和消失点提取的车道线检测方法
2022-11-17许小伟陈乾坤蔡永祥严运兵刘畅然
许小伟,熊 豪,陈乾坤,蔡永祥,严运兵,刘畅然
(1.武汉科技大学 汽车与交通工程学院,湖北 武汉 430081;2.中国汽车技术研究中心 汽车工程研究院,天津 300300)
0 引言
车道线检测可以帮助估计车辆前方道路的几何形状,以及车辆在道路上的横向位置,精准实时地检测车道线是驾驶员辅助系统(advanced driving assistance system,ADAS)的关键技术之一。
现有车道线检测研究中,主要是基于特征(比如颜色[1-2]、边缘[3])或基于模型[4]的方法对车道进行检测。文献[5]提出了一种基于线性判别分析的梯度增强变换方法,对从RGB(red,green,blue)彩色图像转化到灰度图像的转化矢量进行了动态更新,并使用自适应坎尼(Canny)和霍夫(Hough)变换等手段增强车道边缘信息。文献[2]将颜色和边缘信息相结合,通过道路和标记表面之间的颜色变化,使用概率密度函数和直线聚类方法提取车道线。文献[6]将黄色、白色像素作为优先像素处理,采用最小二乘法拟合车道线轮廓的点的方法提取车道线,并结合卡尔曼滤波跟踪感兴趣区域,提高了车道检测的鲁棒性。文献[7]通过组合车道标记的边缘和颜色信息来完成车道标记聚类,采用拉格朗日(Lagrange)插值多项式计算拟合曲线参数完成车道线提取。文献[8]对感兴趣区域图像进行逆透视变换,利用叠加阈值算法进行边缘检测,采用三阶B样条曲线模型进行车道线拟合。文献[9]采用基于梯度和背景差异的多通道阈值融合方法,结合车道线的HSV(hue,saturation,value)特征进行车道线检测。文献[10]对图像进行预处理之后,运用最小二乘算法和自适应角度滤波器提取车道线,并采用透视映射和双卡尔曼(Kalman)滤波的自适应感兴趣区域选择方法进行车道跟踪,该方法在存在阴影的环境下具有良好性能。然而,在实际应用上,许多算法存在一些缺点,如对于阴影和光照变化等强干扰很敏感,算法计算量大,实时性不足,易受周围环境干扰等缺点。
针对以上问题,同时为了满足车道线检测在ADAS应用中的实时性需求,本文提出了一种基于融合分割和消失点提取的车道线检测方法。结合边缘特征和大津算法(OTSU)设置动态感兴趣区域(region of interest,ROI),极大地剔除了树木、建筑等背景信息,并结合改进的消失点检测方法快速提取车道线。
1 图像预处理
1.1 图像灰度化
本文采集的车载相机为彩色RGB图像,这种格式的数据量较大,每个像素都包含有R、G、B 3个数据,直接对此种格式的图像进行计算,将会导致计算量加大,增加计算复杂度,而本文利用车道线梯度进行车道线提取,与颜色特征信息无关。因此,需要对彩色RGB图像进行灰度化处理,以降低运算复杂度。
为了能充分反映彩色RGB图像中3个通道的信息,采用最常用的加权平均法对彩色RGB图像进行灰度化处理,公式[11]为:
Gray(x,y)=0.299R(x,y)+0.587G(x,y)+0.114B(x,y),
(1)
其中:(x,y)为图像像素点坐标;R(x,y)、G(x,y)和B(x,y)分别为红色、绿色和蓝色通道中像素点的灰度值。
1.2 图像高斯滤波
车载相机由于相机自身设备性能原因,采集到的图像在进行数字化转化的过程中,将会产生或者混入较多高斯噪声,同时车载相机会随着车辆行驶发生一定抖动,并且易受到阴影、路面污染和光照变化等的影响。这些内外在的因素都会对车道的提取带来不利的因素[12]。因此,需要对灰度化的图像做降噪预处理,减少图像的噪声与干扰,以便后续算法能够准确提取车道线。
本文采用高斯滤波算法进行降噪处理,高斯滤波通过一个高斯滤波卷积核对图像像素依次进行扫描,使用该卷积核内的数值对被扫描的像素点进行加权平均运算,得到的平均灰度值为被扫描的像素块中心点的值。高斯滤波的具体流程为先寻找合适的高斯模板,然后对图像进行卷积运算。二维高斯函数的公式[13]为:
(2)
其中:h(x,y)为图像像素点的灰度值;(x,y)为图像像素点坐标;σ为标准差。
本文采用大小为(5×5)高斯卷积模板对灰度化后的图片进行滤波,道路图像经过灰度化和高斯滤波降噪后的预处理效果如图1所示。
图1 道路图像预处理效果图
2 融合算法分割
基于Canny算法,对边缘图像每一行的边缘点进行计算,以边缘点最多的一行作为ROI区域的上边界,剔除大量的环境干扰信息,尽可能小地提取目标区域。然后,采用OTSU边缘检测算法求解ROI区域内图像分割最佳阈值,对图像像素进行车道线背景分割。
2.1 ROI区域确定
ROI区域的选取在车道线检测中相当重要,它直接涉及到算法的鲁棒性和实时性。对本文车载相机采集到的大量图像序列进行分析时发现,在远离汽车的地方有大量物体聚集在地平线附近,如电线杆、建筑等,这些物体与道路梯度之间变化较大,会产生大量的边缘点。根据这一特征,本文提出了利用边缘像素的统计特性来确定图像的ROI区域。采用Canny方法[14]对预处理图像进行边缘检测,计算行搜索区域内每行边缘像素个数,并以边缘点最多的一行作为上界来划分预处理图像的动态ROI区域。
Canny检测算法的基本思想是寻找图像中灰度变化最强的位置,即寻找梯度方向,对平滑后的图像使用Sobel算子分别计算水平以及竖直方向的图像梯度,即一阶导数,然后根据两个梯度找到边界的梯度和方向,并通过两个上下限值来控制像素梯度的选取。
采用Canny边缘检测提取ROI区域的效果图如图2所示,图2a中采用Canny算法对预处理图像进行边缘点检测,在远离汽车的地方聚集着大量的边缘点,图2b中将边缘点统计最多的一行作为上界进行动态ROI区域分割,极大地剔除了图像背景信息。
(a) 边缘检测
2.2 OTSU边缘检测
在进行了图像预处理、ROI区域确定之后,得到的图像已经含有较强的道路信息,但其中仍然还有较多干扰,如道路背景环境等,提取车道信息时,需要对图像进行分割处理,以分离图像前景与背景。由于道路车道线相比于道路灰度值较高,有明显的灰度变化,因此本文基于OTSU边缘检测算法求解出ROI区域内的分割阈值,将预处理图像像素分割成二值化图像,以便后续车道线进行直线提取。
最大类间方差法OTSU是一种自适应全局阈值的分割算法。该算法是基于判别式分析最小二乘法原理推导出来的,运用图像灰度来分割图像的前景与背景,并使类间方差最大化[15],运算速度较快,非常适用于实时性要求较高的场合。通常OTSU算法指一维OTSU阈值分割算法[16],设图像有L个灰度级[0,1,…,L-1],其中图像像素总数为N,假设存在阈值TH将图像所有像素分为前景C0[0,1,…,T]和背景C1[T+1,T+2,…,L-1]两个部分,C0部分出现的概率W0和C1部分出现的概率W1计算公式分别为:
(3)
则C0部分出现的平均灰度μ0和C1部分出现的平均灰度μ1分别为:
(4)
其中:图像总的平均灰度μT为:
(5)
则图像的类间方差σ2为:
σ2=W0(μ0-μ)2+W1(μ1-μ)=
W0W1(μ0-μ1)2=
(6)
图像方差是图像灰度分布均匀性的一种度量,当图像前后景差别大时,方差也就越大,当图像前后景差别小时,方差也就越小。因此,当C0和C1两类类间方差最大时,能使前后景分割最为准确,使方差最大时的TH值,为所求分割阈值。
Canny边缘检测提取感兴趣区域之后,采用OTSU算法分割的效果图如图3所示。由图3可以发现:阈值分割后的图像能够有效区分背景信息和前景信息,分割出的车道线更加清晰。
图3 OTSU算法分割效果图
3 车道线检测方法
3.1 直线段检测算法
直线段检测(line segment dector,LSD)算法[17]是一种以梯度特征为基础的直线检测分割算法,核心是像素合并的同时进行误差控制,它能够在线性时间内提供亚像素级精度的结果[18]。LSD相对于传统的直线检测算法,具有结果准确、不需要调节参数的优点。
LSD算法的原理是通过计算图像中每个像素点附近的level-line角度,并由此生成level-line区域,其中的所有向量都和通过基准点的level-line相切。每个line-support区域都是直线分割的候选区域。采用矩形对该区域进行拟合,该矩形的主方向为线段支持域的惯性主轴方向。将该矩形区域内像素点的level-line角度与矩形主方向角度的夹角在容忍角度τ内的像素点称之为内点,对每个矩形区域的宽、高以及该区域内总的像素点个数、内点个数进行整合,计算基于这些数值下该矩形区域的错误警报数量(the number of false alarms,NFA)值,当NFA小于1的时候,则认为该矩形是一条线段[19]。LSD算法检测后的直线段结果图如图4所示,能够准确分割车道线。
3.2 消失点检测
由于三维立体空间图像投影转为二维平面图像时会产生透视效果,真实空间中的平行线会在图像中相交于一个点,此点称为消失点。对于道路图像,只有两条车道线为较长且明显的平行线,其余干扰线段一般较短或者不与车道线平行,并且车道线在图像上会相交于一个消失点,可利用消失点来提取车道,一些干扰直线并不会平行于车道线,可进行干扰滤除。
LSD算法检测的直线由对齐的像素点组成,但在提取过程中,直线旁出现的曲线、杂波引起的像素对齐误差将会影响消失点检测结果,所以先对LSD算法检测后的直线进行滤除。参照文献[20]的做法引入线段强度概念,线段强度表示形成线段的像素方向对齐的好坏程度,用τ表示,τ的含义为赋予更长、对齐更清晰的线段更高的值,τ值越高,则与车道线的相关度越高,τ的公式表达为:
(7)
其中:l为线段长度;w为线段宽度;n为1,2,3,…,n个线段。
当线段强度τ大于线段强度阈值τthreshold,则认为此线段与车道线的相关程度较高,进行保留;当线段强度τ小于线段强度阈值τthreshold,则认为此线段与车道线的相关程度较低,进行滤除。经多次实验,本文选取τthreshold=6。
得到车道线相关线段以及线段强度后,再进行线段交点计算。遍历任意两条直线并计算交点坐标,同时将两条直线的线段强度τ进行相加并赋值于交点,当多个交点为同一个坐标像素时,将交点处的线段强度τ进行叠加,此时每一个计算得到的交点除坐标信息外还包含一个线段强度信息,计算公式为:
τ(i,j)=τp+τq,
(8)
其中:p、q为任意检测后得到的直线线段,p∈n、q∈n;τp、τq分别为直线p、q的线段强度;(i,j)为两直线交点坐标;τ(i,j)为此交点坐标的线段强度值。
遍历计算任意两条直线计算交点及交点线段强度后,选取拥有最大线段强度的交点为最大强度交点,此点同时也为消失点,计算交点的结果如图5所示。
图4 LSD直线段检测结果
如图5所示,红色线表示车道线边缘,白色点表示消失点,在图像中间,即车道线相交处相交点尤为密集,此处同一像素点相交的可能性最大,线段强度有最高值,消失点最有可能在此处。
3.3 车道线检测
得到消失点后,对采用Hough变换得到的直线进行再次筛选。利用不与车道线平行的直线不会与消失点相交的特点,以消失点坐标为圆心,以5个像素为半径画圆,直线与圆心相交认为与车道线平行,则保留;不相交则认为不与车道线平行,应舍弃。同时,由于车道直线一般为有角度的斜线,不可能为倾斜角度较大或较小的斜线,所以应对直线做一定的斜率限制,斜率大于最大斜度阈值θmax或小于最小斜度阈值θmin的直线,应进行删除,θmax和θmin取值为:
(9)
其中:θL_max和θL_min分别为左车道线最大斜度阈值和最小斜度阈值;θR_max和θR_min分别为右车道线最大斜度阈值和最小斜度阈值。
直接进行Hough检测,得到的直线含有较多干扰,包括中间的道路标示干扰,检测到的道路其他短线段干扰,通过计算消失点后,利用消失点以及斜率限制筛选剔除了无用的干扰线段,得到车道线直线线段。
此时筛选获得的左右车道线直线有多条,将多条直线按斜率分为左车道kil、右车道kir集合后,对两个集合进一步处理,将车道线斜率进行平均,以获得更为准确的车道线斜率;
(10)
图6 最终获得车道直线结果图
其中:kl,kr分别为最终左、右车道线斜率;l为筛选的车道线数目;kil、kir分别为筛选的左、右车道线斜率。
最终获得的车道直线如图6所示。
4 实验结果与分析
为了验证本算法的有效性,在Python和Opencv搭建的平台上进行仿真实验。实验采用离线处理的方式,通过车载采集武汉市多段真实车道线照片,包括实线、虚线、干扰等,视频帧率为33.33 ms/帧。本文所采用的实验平台配置为CPU:i7-8750H,RAM为8 GB。在64位的Windows操作系统中,本文算法对结构化道路车道线的平均识别速度是34 ms/帧,满足车道线检测实时性要求。
根据所搭建的离线实验平台,对上述算法进行验证,最终不同情况下检测出来的车道线信息如图7中白色线所示。
(a) 直线及虚线边界道路
图7a为同时含有虚线边界车道线和直线边界车道线的道路,图7b为有较多路面连接处干扰的道路,图7c为含有较多减速带的弯道下坡道路,图7d为含有文字提示等标识干扰道路,图7e为驾驶员在相机镜头前的阻挡干扰。由图7可知:本算法在结构化简单道路上能适应变化的道路环境,能准确检测出车道信息。
针对直线路段和干扰路段下的视频片段进行数据统计,统计结果如表1所示。
表1 统计识别结果
从表1可以看出:在直线道路及干扰道路环境中,本文提出的算法具有较低的误检率、漏检率和较高的正检率。在直线道路上正检率较高;在干扰道路上,会出现较多误检及漏检,但正检率依然较高;算法总体的正检率为97.16%。
5 结论
(1)利用Canny边缘检测算法对图像进行边缘提取,以边缘点最多的一行作为上界划分预处理图像的动态ROI区域,并对ROI区域采用大津算法进行车道线分割,大大剔除了背景干扰信息,提高了车道线检测的鲁棒性。
(2)采用LSD 算法对ROI区域内车道线标志进行提取,并结合改进的消失点检测方法提取车道线,提高了车道线检测的速度。
(3)本文算法在直线道路和多种干扰的道路环境下,正检率达到了95%以上,识别速度为34 ms/帧,证明了所提算法能够准确提取出车道信息,检测速度满足车辆对车道线检测实时性的需求。