基于OpenCV的车道线检测算法改进研究

罗 恒,曹乐乐,金宗毅,李明颖,孟庆宇

(1.大连工业大学 大连市 116000;
2.中铁建电气化局集团轨道交通器材有限公司 常州市 213000)

基于计算机视觉的车道线检测是自动驾驶领域中的一个重要组成部分。温云燕等[1]通过小车仿真实验验证图像处理算法在车道检测中的效果,由于车道模型简单,忽视了行人、车辆等客观因素带来的干扰,不具有很强的说服性。张勇等[2]基于RGB图像灰度处理后进行Canny边缘检测,这种检测在复杂路况,不能准确识别车道线并排除无关因素影响。王文豪等[3]通过摄像机采集图像并对原始图像进行了标定,获得无畸变图像后进行图像处理,但在ROI区域的划定上模棱两可,如果在复杂路况不能快速选定特征点时,容易造成检测异常,不能准确识别车道。李军等[4]使用速度更快的渐进概率Hough变换(PPHT)识别车道线,却难以避免车道线的误检和漏检。但是基于机器学习的方法计算复杂且需要依赖大量样本数据,考虑到实际路况复杂多变,计算成本太高,难以满足自动驾驶对车道信息的及时处理和实时反馈需要[5]。

基于上述车道检测研究现状,采用基于OpenCV函数库的算法对车道线进行检测,采用的面积和外接矩形过滤算法可以达到对车道线精准检测的目的,此方法可以为自动驾驶领域内的车道线检测提供更加便捷高效的检测路径。

车道线检测主要包括车道线图像采集,图像的预处理,图像特征区域的Canny边缘检测,霍夫直线检测[6]和直线拟合等步骤,最终实现车道线的在线识别与检测。以行车记录仪拍摄为素材进行车道线检测,使用OpenCV函数库中的VideoCapture.read()函数来读取视频,再通过简单的设置获得车道线实时图像。

由于在获得的车道线实时图像中包含许多噪声和无关特征,需要对原始图像进行预处理操作,如图1所示,经过预处理的图像可以有效地消除图像中无关信息,提高车道线检测的准确性。

图1 车道线预处理流程图

2.1 图像的灰度化处理

彩色图像中的每一个像素点都是由R、G、B三个分量共同决定。而灰度图像是一种特殊的彩色图像,它只有一个通道256个灰度等级。经过灰度处理的彩色图像,可以最大限度简化图像处理的工作量,还能保证图像的基本信息不丢失。目前灰度化处理常用的方法有以下几种:

最大值法 Gary(i,j)=max{R(i,j),G(i,j),B(i,j)}

(1)

平均值法 Gary(i,j)=[R(i,j)+G(i,j)+B(i,j)]/3

(2)

加权平均法 Gary(i,j)=0.3R(i,j)+0.59G(i,j)+0.11B(i,j)

(3)

由于最大值法获得的灰度图像亮度较高,会丢失很多图像细节,而经过平均值法获得的灰度图像会丢失一部分亮度信息,又考虑到人眼对绿色比较敏感,对蓝色不太敏感,所以选用加权平均法进行图像的灰度化处理,如图2所示。

图2 加权平均法灰度图

2.2 图像的去噪处理

图像在数字化和成像过程中会受到外界环境的影响产生噪声,这些噪声会模糊图像特征,在进行车道线检测前,需要对图像进行降噪处理。空间域局部滤波器是图像最为常用的一类降噪滤波器。这类滤波器比较经典的滤波算法有均值滤波、高斯滤波、中值滤波和双边滤波,其中均值滤波和高斯滤波[7]为线性滤波,中值滤波和双边滤波为非线性滤波。

均值滤波的不足是图像在去噪的同时也破坏了图像的细节,使图像变得模糊。高斯滤波器的不足是在降噪的同时也会对图像边缘信息进行平滑处理。中值滤波是一种非线性滤波,缺点是易造成图像的不连续性。

选用既能平滑降噪,又能保存边缘信息的双边滤波进行图像去噪。双边滤波是一个非线性滤波,采用的是加权求和的方法,其权值矩阵由一个与空间距离相关的高斯函数和一个与灰度距离相关的高斯函数相乘得到,如图3所示。

图3 双边滤波降噪图

空间域核:由像素位置欧式距离决定的模板权值ωd,p(k,l)为模板窗口中心点坐标,q(i,j)为模板窗口其他系数坐标,σd为高斯函数标准差。

(4)

值域核:由像素值的差值决定的模板权值ωr,f(k,l)为模板窗口中心坐标,f(i,j)为模板窗口其他系数坐标,σr为高斯函数标准差。

(5)

将上述两个模板相乘就得到了双边滤波器的模板权值, 因此,双边滤波原理的数学表达式为:

(6)

2.3 Otsu二值化

图像经过双边滤波去噪后,为了更好地提取图像特征,需要对图像进行二值化处理,传统图像分割方法有基于阈值、边缘、区域、图论等4类算法,选用阈值分割算法中的Otsu算法[8],背景和前景的分界值就是我们要求出的阈值。遍历不同的阈值,计算不同阈值下对应的背景和前景之间的类内方差,当类内方差取得极大值时,此时对应的阈值就是大津法所求的阈值,如图4所示。

图4 Otsu二值化图像

最佳阈值的评估标准称为类间方差,在阈值T下的类间方差公式为:

(7)

2.4 图像的形态学处理

通过Otsu二值化处理后,为了更好地进行特征检测,需要对图像进行形态学处理,常用的形态学算法有腐蚀、膨胀、开运算、闭运算、顶帽等。选用形态学处理中的开运算来优化图像特征,开运算先进行腐蚀增加黑色面积,后进行膨胀增加白色面积。经过形态学处理的图像会过滤掉一些孤立的区域,减少了特征检测的干扰,增大了特征检测的准确性。

2.5 获得车道线ROI区域

经过形态学处理后,为了排除道路两旁车辆、树木以及前方车辆的干扰,需要划定ROI[9](region of interest)区域剔除无关信息,作为后续检测算法的图像输入。

目前在车道检测领域的ROI图像分割方法主要是固定比例(区域法),该方法是依据行车图像中两旁车辆、树木等分布情况观察和总结,采用某一种固定比例(区域)对车道线图像进行分割。例如文献[10]采用的是靠近图像底部的2/3区域作为检测的ROI区域。根据行车记录仪图像特点,将目标区域缩小为上窄下宽的梯形区域,这种选择更贴合实际车道在图像中的位置,检测性能也更好,见图5。

图5 ROI区域掩膜图

2.6 图像特征筛选

在获得车道线ROI区域后,为了更好地获得特征区域,筛选掉其它因素干扰,采用面积过滤、外界矩形过滤等方法,筛选出需要的特征区域。

在提取特征目标时将面积较小的区域屏蔽掉,采用OpenCV的这个函数库中的ContourArea函数求面积,这个面积指的是连通域轮廓线所包含的区域的面积,轮廓线包含N个顶点,这些顶点的位置是对应像素的中心点,面积就是从这些个中心点开始算,如图6所示,每个方格代表一个像素,图示彩色部分面积为3.5个像素单位。通过多次图像处理验证,得出过滤面积小于等于5个像素单位面积时,就能很好地过滤较小面积,不会对特征区域造成干扰。

图6 像素面积原理图

经过面积过滤后,可以把形态学操作和ROI区域未处理掉的细小区域过滤,对于面积较大的非特征区域过滤还需要考虑其它方式,如图7所示。结合实际情况,对ROI区域内的图像特征进行外接矩形,判定靠近ROI图像左边区域的矩形左上角顶点的x坐标,靠近ROI图像右边区域的矩形右上角顶点的x坐标,以及外接矩形中心位置x坐标与ROI图像宽度之间的关系。一般情况下,进行ROI区域划分。左右两侧有车辆行驶时,获得的干扰区域会靠近ROI图像两侧边缘,调整阈值,选取左侧外接矩形x坐标落在[0,1/6 width],选取右侧外接矩形x坐标落在[5/6 width,1],左侧外接矩形中心点坐标落在[0,1/5 width],右侧外接矩形中心点坐标落在[4/5 width,1],width为ROI图像像素宽度,同时考虑外接矩形的宽高比是否大于1来过滤,如图8所示。

图7 面积过滤前后对比图

图8 外接矩形过滤前后对比图

对车道线图像进行预处理后,需要对预处理后的图像进行边缘检测,选用抗干扰性强、计算复杂度低的Canny边缘检测算子。

Canny边缘检测算法主要步骤有以下四步:

(1)使用高斯滤波使图像平滑,滤除图像中存留噪声。

(2)用Sobel算子计算,得到边缘及其方向。

(3)对梯度幅值进行非极大值抑制,细化边缘。

(4)用双阈值检测算法消除伪边缘,连接边缘。

经过Canny边缘检测后的图像,只能得到图像中的一些边缘像素点,需要对这些边缘点进行筛选,考虑到车道线均为直线段,采用霍夫直线检测筛选。

理论上直线可以在直角坐标系中表示,也可以在极坐标系中表示,但是当直线接近垂直时,直线斜率会趋于无穷大,为了克服这个困难,选择在极坐标下表示直线。

ρ=xcosθ+ysinθ

(8)

式(8)中(x,y)为直角坐标系直线上一点,ρ为原点到直线的距离,θ为原点到直线距离与x轴的夹角。在极坐标系中给定两个参数ρ和θ,就代表直角坐标系中的一条直线。而对于直角坐标系中的某一点来说,其ρ和θ的值不是固定的,因为过此点的直线可能有很多条,每条的ρ和θ的值也可能不同,因此,直角坐标系中的一个点对应参数方程中的一条曲线,如图9所示。

图9 霍夫变换原理图

经过变换,图像空间中的每一个点(x,y)都映射为极坐标中的一条正弦曲线,且图像空间中共线的点在极坐标系中的正弦曲线相交于一点。如果交于一点的曲线的数量超过了阈值,则认为是一条直线。选用OpenCV函数库中的HoughLinesP函数检测图像中的直线。

根据斜率,将左边和右边的点分别用最小二乘法线性拟合,把斜率绝对值小于0.5的线舍去,将检测到的线分为左右两组,并在与原图像相同尺寸、相同通道的掩膜图像中画出车道线,最后用OpenCV函数库中的addWeighted函数把掩膜图像与原图像进行合并,完成车道线实时检测,如图10所示。

图10 车道线检测图

最后将上述图像处理与检测的过程封装在一个函数里,对每一帧图像都执行封装函数,得到的返回值是处理后的图像,这样用行车记录仪拍摄的视频就完成检测车道线的任务。

车道线检测技术是自动驾驶的关键技术之一,使用Python语言和调用OpenCV库,在Pycharm开发环境中编写,通过代码编译,算法整合,最终实现了在白天、黑夜、有障碍等环境中的成功检测与准确识别,达到了此次研究的目的,为自动驾驶领域内的车道线检测提供更加便捷高效的方法。

猜你喜欢矩形车道灰度采用改进导重法的拓扑结构灰度单元过滤技术北京航空航天大学学报(2022年6期)2022-07-02北斗+手机实现车道级导航应用卫星应用(2021年11期)2022-01-19避免跟车闯红灯的地面车道线科学大众(2021年9期)2021-07-16浅谈MTC车道改造中国交通信息化(2020年11期)2021-01-14两矩形上的全偏差数学年刊A辑(中文版)(2020年2期)2020-07-25化归矩形证直角中学生数理化·七年级数学人教版(2019年4期)2019-05-20从矩形内一点说起中学生数理化·八年级数学人教版(2017年4期)2017-07-08基于最大加权投影求解的彩色图像灰度化对比度保留算法自动化学报(2017年5期)2017-05-14基于灰度线性建模的亚像素图像抖动量计算光学精密工程(2016年1期)2016-11-07低速ETC/MTC混合式收费车道的设计与实现中国交通信息化(2015年10期)2015-06-06

推荐访问:车道 算法 改进