计算机视觉算法在道路标线识别上的应用
2022-09-07李一鸣姚嘉伟
李一鸣,于 起,姚嘉伟
(一汽解放汽车有限公司 吉林 长春 130011)
0 引言
随着智能时代的来临,机器视觉类辅助驾驶系统越来越多地被应用到汽车上,车道线识别也成为辅助驾驶系统的关键问题之一。车道线识别就是从摄像头获取的图像中,利用计算机视觉相关算法,对图像中的车道线信息进行提取并通过多项式进行拟合,从而通过曲率或切线方向判断车道线的走向。目前该技术已广泛应用于驾驶辅助系统当中[1],本文以人类识别车道线的方式提出了一种算法,能够有效应用在复杂环境下准确识别并拟合车道线。
1 基于计算机视觉的车道线识别技术概述
基于计算机视觉的车道线识别技术其车道图像往往是采集安装于驾驶室内的车载摄像头拍摄,并通过传统的计算机视觉算法对车道线进行特征提取识别与检测,该过程一般由图片预处理、边缘提取、ROI提取、车道线拟合构成[1-2]。
1.1 图片预处理
由于实际图片拍摄情况多变,直接使用RGB彩色图像进行车道线检测,计算量大,效率低,耗时久[3]。所以在检测过程中,一般只对图像的灰度分量进行检测,进而需要将RGB彩色图像转换为灰度图像。
同时由于摄像头在采集图片信息时存在光照、路面情况、拍摄质量等问题,道路图像上存在很多噪声。这种类型的图像数据将影响我们进行后续识别的有效性与可靠性。因此需要在保留图像细节特征不变的情况下,通过滤波算法对采集到的道路图像中的噪声信息进行抑制。常用的滤波算法包括高斯滤波以及滑动中值滤波,考虑到机动车在高速公路行驶的车速范围,本文将采用滑动中值滤波这种时效性较好的算法进行去噪处理。
1.2 图片边缘提取
在数字图像中,所谓的边缘是灰度值发生阶跃或顶板变化的像素的集合,也就是图像局部区域亮度发生明显变化的部分[4]。边缘广泛存在于对象与背景、对象与对象、背景与背景之间,它包含了图像绝大部分的信息。边缘检测主要是对图像灰度变化的测量、检测和定位。边缘检测的基本思想是:首先利用边缘增强算子对图像的局部边缘进行增强,然后定义像素的边缘强度,设置阈值提取边缘点集。常用的边缘检测算法有3种:Sobel算子、Canny算子、Laplacian算子。本文将通过采用Sobel算子对车道线边缘进行提取。
1.3 ROI提取
车辆实际行驶过程中,由于道路两边的环境复杂,存在很多干扰车道线检测的直线边缘,如天际线、山脉边缘、电线杆、树丛等,这些干扰因素将对图片进行边缘提取造成干扰。同时考虑到道路图像中,车道线集中在图像的中间偏下区域,因此可以仅对感兴趣区域(ROI)进行处理和检测。
在提取ROI过程中,首先要对输入的图像进行二值化处理[5]。图像二值化是将图像上的像素点的灰度值设置为0或255,即将图像呈现出明显黑白效果的过程[5]。之后通过采用掩膜技术,对二值化后的图像进ROI区域进行提取。在车道线图像中,由于摄像头在拍摄过程中的透视效应,左车道线和右车道线成梯形形状,因此可以采用梯形或长方形掩码对ROI区域进行提取。
1.4 车道线识别与拟合
Hough是从图像中提取直线、圆、椭圆等全局特征的一种常用的鲁棒统计算法,是一种常用的目标检测的方法,可以检测出有明确表达式的图形。Hough变换的基本原理为利用两个不同坐标系之间的变换来检测图像中的直线[6-7]。将图像空间中的直线映射到参数空间的一个点,然后对参数空间中的点进行累计投票,进而得到参数空间中的峰值点,该峰值点就对应空间坐标系中的真实存在的直线参数。通过采用Hough变换对ROI区域内的每个像素点进行计算,可以识别并得到构成车道线的像素点集,并对其应用最小二乘法即可得到该处车道线的实际参数。
2 基于计算机视觉的车道线识别算法的具体实现
算法的具体实现方法见图1,其具体流程包括对采集到的图像进行灰度转换、图像去噪、ROI处理、Sobel边缘计算、Hough变换提取形状特征以及形状拟合,最后通过可视化输出拟合结果。
2.1 灰度转换与ROI提取
由于道路上只有白色和黄色的车道线,所以可以根据采集路面图像的亮度区分哪里是车道线,哪里是路面。通过将RGB色彩空间转换为YCrCb颜色空间,对主要由黑色像素构成的路面以及白色或黄色像素构成的车道线进行区分。具体步骤如下。
第1步,计算亮度图。将RGB三通道图像数据转换为YCrCb域数据。根据人类视觉系统的敏感度不同,提取YCrCb域数据CrCb红蓝分量,其转换方式为:
通过上式提取红蓝分量亮度图,见图2(b)。
第2步,计算得到灰度图。将三通道亮度图变为单通道的灰度图,方便处理。通过对上述YCrCb域数据中的Y分量进行提取,采用如下公式计算各像素点的灰度值。
第3步,通过灰度图计算得到二值图。设置合理的阈值,将灰度图中高于阈值的像素值变为255,低于阈值的像素值变为0,图像变为二值图,见图2(c)。
第4步,选取图像的感兴趣区域ROI。由于摄像头拍到的图像存在大量与车道线无用的信息和其他干扰信息,比如天空、地面指示箭头、两旁车道上的车辆等等,所以去除这些信息,可以提高算法的时效性。具体方法是根据车辆在路面上正常行驶得到的画面,结合实际摄像头的安装位置以及几何关系,选择保留与当前行车道相关的区域,将其他区域的像素置为0,见图2(d)。
2.2 识别并拟合车道线
获得ROI区域内的二值化图像后即可对车道线进行识别与拟合处理,其具体步骤如下。
第1步,去除噪声点。第1阶段结束后,图像中车道线的像素值几乎都为255,
不是车道线的像素值几乎都为0,且不存在黑白像素规律交替的情况。接下来需要去除噪声点(包括理应是车道线的孤立黑色点和不应是车道线的白色点)。算法如下:若1个像素点周围的8个像素点,有超过5个(包含5个)为白,则将该像素点设置为白;若1个像素点周围的8个像素点,有超过5个(包含5个)为黑,则将该像素点设置为黑;若1个像素点周围的8个像素点黑白各4个,则该像素点不变。
第2步,利用带跨度的横向差分Sobel算子([-10001],锚点在1),获得更严格的车道线。算子中0的个数可根据车道线在图像中的宽度(一行中白像素点的个数)选择,不能超过车道线的宽度。
第3步,分别为两条车道线选取备选点,具体方法如下:将ROI分为左右两个部分,从上至下每隔5~10行选择1行,每行中左右两侧各选择3~5个离中间最近的白色像素点,作为车道线备选点。
第4步,利用最小二乘法拟合车道线。假设对一条车道线上N个备选点(xn,tn)(n=1,2,…,N)使用m次多项式拟合,则预测值如下式所示:
定义误差函数为:
令导数为0,得:
即是通过令误差函数取最小值的解析解。
2.3 可视化
将第2阶段计算的车道线结果,用绿色(0,255,0)像素点填充的线表示拟合的结果并加粗,加到原图上。图3是原图加上拟合的车道线之后的结果。
3 实验过程及结果
通过将算法运行在搭载了Ubuntu18.04的上位机中,并在QtCreator5以及ROS1和OpenCV3.3环境下对算法程序进行了编译,最终实现该车道线检测与拟合算法。上位机每次处理的图像大小为1280×720像素。实验结果见图2、图3。
同时为验证该算法在不同环境条件下的鲁棒性,我们选取了多种特殊干扰场景进行了实验。图4是另外两组场景下的道路图像与车道线识别效果,图4(a)、图4(c)分别是摄像头在其他路面场景行驶时拍摄的画面,图4(b)、图4(d)是对应的拟合结果。
4 结语
从上述实验结果可以看出,运用本文提出的基于计算机视觉的车道线识别算法,能够有效地对不同场景下的道路图像进行边缘提取与车道线识别,无论是连续的还是虚线,无论是白线还是黄线,都能够准确地识别并标注。但是对于车道线模糊不清晰或者车辆前方有严重干扰的情况下,这种识别方法还有待完善。