基于OpenCV的车道线识别与跟踪算法
随着近年计算机视觉和深度学习算法的快速发展,越来越多的学者将视觉传感器融合于无人驾驶技术。车道线作为车辆行驶道路上较为重要的信息之一也迎来了研究的热潮。本文提出了一种有效的车道线识别与跟踪算法,以提高车道线识别的效率及准确率。
1 车道线识别与跟踪算法思路
车道线识别与跟踪算法属于典型的机器视觉应用,通过视觉传感器获取每一帧图像进行智能分析判断出车辆是否偏移路线,算法主要思路如下:
Step1:图像预处理。获取视觉传感器传递的一帧图像进行中值滤波,选择适当的边缘检测算法将图像边缘信息进行细化,然后对其检测结果进行热点区域分割;
Step2: 车道线检测。选择检测器进行直线检测, 图像经过预处理之后,车道线区域将会比较突出,利用检测器在进行车道线检测的同时会自动过滤掉无效信息,保留与真实车道线最接近的两条直线;
Step3:车道线跟踪。检测消失点,延长两条直线交于一点,交点转化到二维平面的消失点;
Step4:偏移预警。通过偏移度对车辆进行监控以达到辅助驾驶的目的[1]。
2 车道线识别与跟踪算法实现
(1) 图像预处理
图像预处理决定车道线检测的效果,主要研究内容分为中值滤波,边缘检测,和兴趣区域选定三部分。
1) 中值滤波
中值滤波能够很好的剔除干扰像素,并且保护边缘信息。通常由一个奇数大小尺寸窗口在图像矩阵上进行滑动操作,将排序过后的像素中值作为当前窗口中心位置的像素值。
2) 边缘检测
使用Canny算子对滤波后的图像进行边缘检测。
用高斯滤波器平滑图像。用模板矩阵扫描图像中的每一个像素,确定的邻域内像素的加权平均灰度值去替代模板中心像素点的值。
b.用一阶偏导有限差分计算梯度幅值和方向。寻找一幅图像中灰度强度变化最强的位置。利用核来分别求得沿水平(x)和垂直(y)方向的梯度Gx和Gy。
Gx = and Gy =
对图像做横向和纵向平面卷积,得到亮度差分近似值,求得每一个像素点的梯度度量值。
标定边界的真正位置需要存储梯度方向,会存储梯度的强度信息和梯度的方向信息, 公式如下。
c. 对梯度幅值进行非极大值抑制。求出的幅值图像中可能存在多个较大幅值临近的情况,进行非极大值抑制找出局部最大值,剔除大部分非边缘像素点。对每一个像素点做处理:根据该像素点的梯度方向,确定需进行比较的临近像素点位置。
d. 应用双阙值技术。设定一个上界和阙值下界,图像中的像素点如果大于阙值上界则认为必然是边界,小于阙值下界则认为必然不是边界。
使用Canny算子对图像进行边缘检测之后的车道线会更加突出,便于下一步直线检测。效果如图2所示。
3) 热点区域分割
只关注热点区域不仅能提高识别算法效率还减少了部分干扰像素,从而提高识别的精准度。实验中采用的方法为:将数字图像中非热点区域像素赋值为0其余区域保留原值。对图像进行分割应放在图像预处理的最后一步,否则其分割的边缘像素会对直线检测的准确率造成影响。
(2)车道线检测
车道线检测直接影响着车身偏移的测定,主要研究内容分为检测直线和拟合车道线两部分。霍夫变换检测直线可有效降低噪声干扰;中值算法拟合车道线可明显提高车道线检测的效率,使算法准确率和效率得到进一步提高。霍夫变换通常会检测到重合在车道线边缘的直线。具体方法为:将检测结果分别装入两个容器中并求中值,当直线数目为奇数,真实车道线为重合直线的其中一条;当直线数目为偶数,真实车道线为中间两条直线的平均数值;对于偏离真实车道线的直线直接舍弃。经过实验表明在多种路面下都能表现出较好的检测效果。
(3)车道线跟踪
在集合映射概念中,空间内所有平行直线都会相交与无穷远点,这个无穷远点称为消失点。在实际的道路中,有很多平行直线,如:道路护栏,车道线,边界等。这些平延伸至远方形成消失点。在车道线检测中,对两条车道线进行拟合出,大概确定消失点的位置。根据视觉传感器与消失点形成的直线与两条车道线之间的距离之比,来判断偏移角度是否在一个合理的范围之内,从而达到识别车道线来进行辅助驾驶的目的。
3 实验与仿真验证
验证车道线识别与跟踪算法的效果,选取了三张不同时间段的图片进行测试,在多种不同的道路情况下,车道线的识别效果非常的好。尤其对于直线道路或者弯曲幅度不大的车道线识别的错误率几乎为零,如图5所示。对算法执行时间进行评计,由于对不必要像素的剔除减少了矩阵计算,提高的算法的执行效率。算法与未进行热点区域定义前效率对比如图6所示。
4 结论
定义热点区域对不必要的区域进行剔除,采用取中值的办法来确定车道线位置,最终预测消失点,能够提高车道线检测与追踪算法的效率和准确率,具有一定的可行性。经过反复验证,该方法能够对车道线进行较好识别,具有较高的抗干扰能力。对智能驾驶技术具有一定的应用价值。