(北京工业大学 信息学部,北京 100124)
随着科技逐步发展,越来越多的学者开始关注和研究无人驾驶。在众多车载传感器中,摄像头由于低成本、低功耗、包含丰富的色彩信息而备受关注,并被广泛应用于车道线、道路标识、机动车辆和行人等参数的识别和跟踪上。
车道线识别的方法主要有Hough变换方法和基于道路模型方法等。He/Rong等人[1]使用Canny算子进行边缘检测,配合Hough变换方法进行车道线检测,时间复杂度较高;Wang/Wu等人[2]使用预处理、ROI提取的方法,并结合Hough变换和随机Hough变换进行检测,提高了处理效率。以上两种方法使用Hough变换,通过空间映射方法解决直线检测问题,因而上述两种算法在检测曲线道路时会丢失部分道路信息,例如前方道路的转弯信息、车道曲率等。
Yu/Zhang等人[3]在近场地使用线性方程拟合,在远场地使用抛物线方程拟合,并使用车道方向计算车辆偏离距离,算法在噪声和阴影情况下性能较好,但是该方法需要良好的车道线边缘特征作为前提,且因无全局约束而易受到噪音影响。
我们使用复合算子增强道路边缘特征的检测性能,通过约束条件减少噪音干扰,最后引入光流算法来改善车道识别算法的效率。光流算法通过对关键特征点的位置估计,光流法能够满足运动物体检测、目标跟踪等任务需求,广泛应用于运动检测[4-7]、物件切割[8]、碰撞时间与物体膨胀的计算[9-12]、运动补偿编码[13-15]等方面。
本文介绍基于光流算法的快速车道线识别方法,使用透视变换和多项式拟合等进行识别,通过引入光流方法对车道线范围进行动态预估,从而缩小感兴趣区域、降低车道线识别的算法复杂度。另外,增加了车道线种类识别算法,能区分不同种类的车道线。最后,我们通过进行实车实验验证了所提算法的实时性与有效性。
由于摄像机透镜在制造以及组装过程中会存在偏差,引入畸变,导致原始图像失真。因此使用过程中,我们需要对采集到的图像进行校正。
我们事先使用摄像头从20个不同角度拍摄棋盘标定图像,然后通过逐张分析标定图像,提取其中的标定板内角点,据此计算摄像头的校正内参矩阵。
在进行车道线识别时,我们首先使用校正矩阵对采集到的图像进行畸变校正,得到畸变校正后的图像,然后进行后续处理。
图像边缘检测中常用算子有Canny算子,Sobel算子,Laplacian算子等。其中Sobel[16]算子是一个经常用于提取图像边缘信息的离散微分算子,使用Sobel算子可产生梯度矢量及其法矢量。我们在后续检测图像边缘信息时主要使用Sobel算子进行操作。
Sobel算子包含两个卷积内核矩阵,分别为水平方向和竖直方向内核,卷积内核大小为奇数。将图像和两个内核矩阵作卷积操作,即可得到横纵向的亮度差分近似值。当内核大小为3时,计算过程如式(1)~(2)所示。
(1)
(2)
其中:Gx和Gy分别为水平方向和竖直方向边缘检测的图像,*为平面卷积操作,A为原始图像。
计算Sobel算子的幅值和梯度方向过程如式(3)~(4)所示。
(3)
(4)
其中:G和θ分别为像素点对应的幅值和梯度方向。
使用复合算子的二值化过程能够捕捉到更多的车道线细节信息,在结构化道路场景下,能够较准确地拟合出车道线方程。然而,由于算法使用了多种算子,车道线检测算法的复杂度较高,实时性差,无法满足ADAS和无人驾驶场景下对车道线检测的实时性要求。为此,我们需要改进算法时间复杂度,提升实时性能。
加速车道线识别的方法有增加线性约束条件、缩小感兴趣区域等方法。然而增加线性约束条件的方法硬性缩小了检测区域,对车辆跨越车道线等情况可能存在漏检误检的情况;缩小感兴趣区域的方法,为保证检测效果缩小后的兴趣区域仍然过大。
为此,本文提出一种利用视频帧的连续性,通过光流法动态预估车道线范围的方法,能够动态调整检测的感兴趣区域,提升车道线识别的实时性。算法的结构框图如图1所示。
图1 改进后算法流程图
2.2.1 光流算法原理
光流法是利用图像序列中像素在时间域上的变化以及相邻帧之间的相关性来找到上一帧跟当前帧之间关键特征点存在的对应关系,从而计算出相邻帧之间物体的运动信息的一种方法[17]。通过对关键特征点的位置估计,光流法能够满足运动物体检测、目标跟踪等任务需求。
使用L-K光流算法的主要步骤如下:
1)添加新的特征点;
2)L-K光流估计;
3)特征点的筛选。
其中,L-K光流估计是算法中的主要部分。在灰度不变假设的前提下,t时刻位于(x,y)处的像素,设t+dt的位置为(x+dx,y+dy),依假设条件有:
I(x+dx,y+dy,t+dt)=I(x,y,t)
(5)
对左边进行泰勒展开,有:
I(x+dx,y+dy,t+dt)≈
(6)
依据假设条件,有:
(7)
整理得到:
(8)
不妨记:
(9)
写成矩阵形式有:
(10)
这是一个带有两个变量的一次方程,只有一个点是无法计算u和v。
L-K的做法是假设某一个窗口内的像素具有相同的运动。假设窗口大小为w*w, 则有w2个像素,所以共有w2个方程:
(11)
(12)
则方程可变为:
(13)
这是一个超定线性方程,采用最小二乘解:
(14)
即可得到u和v。
2.2.2 使用光流动态选取ROI
在上一帧视频车道线成功检测的情况下,首先使用L-K光流法对视频帧进行光流估计,在筛选后获得跟踪状态良好的前后视频帧坐标点,并对左右两部分坐标点分别进行分析,得出前方背景的相对运动估计。主要算法步骤如下:
1)针对左右两组坐标点,分别对坐标点位移矢量使用DBSCAN聚类算法,剔除前景像素,得到主要背景坐标点;
2)使用加权均值方法,求解前方背景图像的相对位移矢量,计算公式如式(15)所示:
(15)
4)在感兴趣区域内进行图像二值化、透视变换、车道线像素点查找与曲线拟合。
同时,对加速检测步骤增加判定条件,当出现像素点少于设定阈值或拟合曲线的曲率和范围超出阈值范围时认为检测失败,使用全局的车道线检测算法进行车道线查找。
对车道线预估的效果如图2所示。
图2 车道线预估效果
可以看出,预估车道线位置接近于实际的车道线位置,实际测试中二者相差±15像素。据此作为车道线提取的动态感兴趣区域,可明显缩小后续处理的算法速度。
由于使用单一算子的算法容易丢失部分细节信息,我们对校正后的图像分别使用以下四种算子进行灰度化处理,综合多种算子能够有效减少细节丢失:
1)水平方向Sobel算子灰度化;
2)Sobel算子幅值灰度化;
3)Sobel算子的梯度方向灰度化;
4)HLS空间中S通道灰度化。
其中HSL色彩模型是工业界的一种颜色标准。HSL即色相(Hue)、饱和度(Saturation)、亮度(Lightness),又称HSL。其中的S通道(饱和度通道)易于将黄色及白色车道线与周围其他色彩的背景图像进行区分。
灰度化处理后,我们通过加权方法得到综合的灰度图并进行二值化处理,得到应用复合算子的二值化图像。
2.4.1 透视变换
通过透视变换,将图像转换成鸟瞰图,方便进行曲线拟合得到车道线方程。而且,该变换后得到的车道线方程更接近车辆坐标系下的车道线方程,易于计算其他相关参数和辅助车辆进行自动驾驶。透视变换的目标主要聚焦车辆左右的两条车道线上。
2.4.2 车道线像素点的查找
在经透视变换得到的鸟瞰图上查找车道线像素点,查找的主要步骤如下:
1)计算下半部分图像的直方图,并统计直方图在左右两侧的峰值位置;
2)将图像水平切分为9等份,在底部切片中使用两个切片等高、200像素宽的矩形滑动窗口,覆盖直方图左右峰值位置;
3)自底向上移动滑动窗口,依次寻找各个切片中的车道线像素点,并重新定位上切片中滑动矩形的中心;
经过查找,我们获得了左右两组车道线像素点。
2.4.3 车道线拟合
对左右两组车道线像素点,分别使用最小二乘法进行二阶多项式拟合,得到透视变换下的车道线方程。
最小二乘法是指按“残差平方和最小”原则选取拟合曲线的方法,常用于解决曲线拟合或函数逼近问题。最小二乘法即找到一组φ(x),使:
(16)
最小。其中xi和yi为第i横向、纵向观测值,φ(x)为曲线的近似函数。
针对φ(x)为代数多项式,即:
φ(x)=a0+a1x+a2x2+…+anxn
(17)
的情况,根据多元函数极值必要条件求解,将结果写成矩阵形式为公式(18)。
(18)
通过对鸟瞰图下车道线像素点的分析,二阶多项式能够很好地拟合车道线。因此,在拟合过程中我们使用二阶多项式进行拟合,当n=2时,φ(x)多项式为:
φ(x)=a0+a1x+a2x2
(19)
此时式(18)变为式(20):
(20)
将查找到的像素点带入式(20),从而解出二阶多项式的系数a0、a1和a2。
在车道线拟合过程中,我们已经获得了车道线像素点的像素信息,我们通过对这些像素信息进行处理,对车道线种类进行分类。
首先,分别计算左右两侧的车道线像素点的Y轴方向直方图,根据直方图的统计方差将车道线分类为实线和虚线;然后利用像素点图像的BGR通道求均值,可划分黄色和白色车道线。
算法识别后将种类信息标注到图片上方,识别效果如图3所示。
图3 车道线种类识别效果
经过测试,识别算法能良好的识别结构化道路场景下的车道线种类。
算法各个步骤的实际效果如图4所示。
图4 实际效果
为验证改进算法效果,我们在不同分辨率下分别统计了算法改进前后算法复杂度对比。
表1 1280*720分辨率下算法复杂度对比
表2 720*480分辨率下算法复杂度对比
表3 480*320分辨率下算法复杂度对比
由于算法使用车道线预测的方法进行动态加速,未改变曲线拟合等算法,进行加速后的算法对于车道线检测的效果和原始算法无明显变化。
在未明显降低准确率的前提下,改进算法主要加速了图像二值化步骤的复杂度,显著提升了二值化的速度,另外由于缩小了感兴趣区域,也加快了像素点查找的速度。
本文利用的实验平台是名为BJUT-IV(Beijing University of Technology Intelligent Vehicle)的自主研发无人驾驶车,在车辆的前方顶部正中的位置安装摄像头来采集实验数据。摄像头选用FonHoo公司的镜王系列CCD产品,配备1.2大光圈和6 mm固定焦距的镜头,可提供多种分辨率输出,具有良好的色彩还原能力和稳定性。
图5 实验实际场景图
算法能良好的识别测试道路中的车道线。在摄像头采集图像为640*480分辨率下,算法单帧识别耗时63 ms,识别速度为15.87 fps,达到了车道线识别的实时性要求。实验效果如图6所示。
图6 车道线预估效果
提出的快速车道线加速识别算法,在车道线检测中,利用连续视频帧之间的时间相关性,通过光流方法检测车辆前方背景的相对移动,对下一帧中车道线的位置进行动态ROI选取,这种方法能够有效缩短车道线识别的时间消耗。经过实验验证,提出的算法可以有效的感知无人驾驶车辆前方的信息,为无人驾驶决策层提供有效信息,同时也提高了无人驾驶车的安全性。