王梓楠 何东 赵茂杰
(重庆交通大学,重庆 400074)
车道线检测是自动驾驶车辆和驾驶辅助系统的关键技术之一[1]。通过准确检测车道线,智能车辆能够实现自动驾驶、车道保持、车道偏离预警等功能,对改善车辆的主动安全性具有重要作用[2-3]。
近年来,国内外学者针对车道线检测技术进行了广泛研究,提出了多种检测算法。Borkar等[4]基于Hough 变换和迭代匹配滤波器,提出了一种利用随机抽样一致(RANdom SAmple Consensus,RANSAC)和卡尔曼滤波器实现鲁棒的车道线检测的方法;Liu等[5]提出基于Transformer 模型的车道线检测算法,利用Transformer 模型的自注意力机制对车道线的细长结构进行建模;Zhao 等[6]利用深度强化学习引入粗略车道检测模型,以进行淮确的车道检测和定位;刘康婷等[7]将图像转换为鸟瞰图,使用LaneRidge检测器提取车道线,并使用RANSAC算法对虚、实车道线进行分类;翟煕照等[8]分析比较了目标检测算法和语义分割算法对车道线的识别能力和效果,结果表明,基于深度学习的语义分割网络具有更好的车道线识别能力。尽管深度学习技术的引入使车道检测算法的性能得到了提升,但现有的车道线检测算法仍存在如下问题:算法的准确性及鲁棒性不足,在弯道工况下难以准确识别车道线的位置,易发生偏移;大部分算法通常使用复杂的深度网络提取图像特征,导致实时性难以满足实际应用需求。
针对上述问题,本文提出一种基于滑动窗口搜索的车道线检测与车道偏离预警算法,首先对车载摄像头拍摄的原始图像进行图像预处理,包括摄像头校准、色彩和渐变过滤、透视变换等,再利用滑动窗口搜索算法提取左、右车道线像素点坐标,并对像素点进行二次多项式拟合获取车道线,最后利用摄像头单目测距原理判断车辆是否偏离车道。
本文使用的道路视频图像由哈佛H6 车型前风窗玻璃下沿车身正中位置的摄像头采集,摄像头与地面的距离为1.15 m,像平面垂直于车身行驶方向,采集地点为绕城高速公路,车速范围为80~100 km/h。
本文采用的车道线检测流程如图1 所示,首先读取车载摄像头拍摄的实时道路视频,将视频按帧分隔为图像,依次对每帧图像进行预处理,使用滑动窗口搜索算法提取车道线像素点,并利用二次多项式拟合车道线,然后通过计算车辆相对于中心线的位置判断车辆是否偏离车道。为了直观显示车道线检测结果,在输出图像上车道线区域内分别使用绿色和红色表示车辆未偏离车道和存在偏离车道的风险。
图1 车道线检测流程
2.1.1 摄像头校准
摄像头在车载环境中捕捉道路图像时,车辆振动、安装角度和镜头特性等因素会造成透视畸变和镜头畸变,影响车道线位置和形状,故需进行摄像头校准[9]。
2.1.1.1 收集棋盘图像
通过收集棋盘图像,利用棋盘上已知的格点和边缘来计算图像的畸变情况,进而估计摄像头的畸变参数。将摄像头固定,通过连续拍摄并调整摄像头的角度和距离,获得多个不同角度和距离的图像,如图2所示。
图2 摄像头拍摄棋盘图像
2.1.1.2 计算校准矩阵和失真系数
在特定的摄像头标定软件中对每帧图像进行分析,检测出棋盘格内部的角点,提取每帧图像中棋盘格角点的坐标信息,如图3所示。
图3 摄像头校准检测
通过将棋盘图像中的角点与实际棋盘格的物理尺寸进行对应,建立起角点的映射关系,利用提取的角点坐标信息和建立的角点映射关系,由标定软件计算摄像头的内、外部参数,并生成摄像头校准矩阵和失真系数。校准矩阵用于将三维空间中的点投影到图像平面上,失真系数用于校正摄像头镜头引入的畸变,主要包括径向畸变和切向畸变。
径向畸变的校正过程可表示为:
切向畸变的校正过程可表示为:
式中,xdistort、ydistort为经畸变处理后图像中的横、纵坐标;x、y为原始图像中的横、纵坐标;r为径向畸变的径向距离;k1、k2、p1、p2、k3为失真系数。
摄像头校准矩阵Mcam为:
式中,fx、fy分别为摄像头水平和垂直方向上的焦距;cx、cy分别为图像平面上光学中心点的横、纵坐标。
2.1.1.3 失真校正
采集到的实时道路图像存在径向畸变和切向畸变,失真校正的主要目标是使用失真系数逆向模拟并消除畸变效应,从而使图像更加符合真实场景的几何形状,如图4所示。
图4 失真校正结果
2.1.2 色彩和渐变过滤
车道线在不同环境条件下可能呈现不同的颜色和亮度,并且可能受到光照、阴影等因素的影响,导致其视觉特征变化较大。为在各种复杂场景下准确检测车道线,本文对色彩过滤和渐变过滤两种方法进行组合创建通道过滤阈值,并生成二进制图像。
首先,将原始图像由RGB 空间转换到HLS 空间。在HLS空间中,利用L通道过滤图像,在不同照明条件下对L通道进行阈值处理均有助于更精确地从图像中提取车道线信息。然后,采用索贝尔(Sobel)算子沿水平方向和垂直方向处理图像,主要目的在于消除图像中大部分水平线,同时去除噪声和与车道线无关的信息,以更好地聚焦于垂直方向上的车道线特征。
将色彩和渐变过滤后的结果相结合生成二进制图像,如图5 所示。其中车道线部分呈现较明显的白色像素,其他区域为黑色像素。
图5 色彩和渐变过滤相结合生成二进制图像
2.1.3 透视变换
透视变换的目的是将摄像头的斜视角图像转换为鸟瞰图,从而获得更准确、直观的车道线信息。将图片投影到新的视平面上,使平行线在新的视角中依然保持平行,从而消除原始图像中的透视畸变[10]。该过程是二维(x,y)到三维(x',y',z'),再到另一个二维空间(x",y")的映射,原理如图6所示。
图6 透视变换原理
透视变换公式为:
本文透视变换的具体实现步骤为:
a. 定义源点和目标点:源点即图像中的4 个角点,这些角点构成一个矩形,包围车道区域。在透视变换后的图像中,要保证车道线平行,需要定义目标点,即输出图像中的4 个角点。本文源点和目标点的坐标如表1所示。
表1 透视变换中源点和目标点坐标
b. 使用源点和目标点计算透视变换矩阵。通过使用OpenCV getPerspective Transform 函数实现,将源图像中的像素映射到目标图像中的像素。
c.将计算得到的透视变换矩阵应用于原始图像,对图像进行变换,使车道线在输出图像中保持平行。
通过上述步骤,透视变换可以纠正原始图像中的透视畸变,从而使得车道线在图像中保持平行。为验证透视变换是否实现预期效果,本文将源点和目标点绘制到测试图像及其扭曲的对应点上,观察线条在扭曲后的图像中是否平行,如图7 所示。
图7 透视变换结果
在对实时道路图像应用失真校准、色彩和渐变过滤以及透视变换后,通过对图5 中的二进制图像进行透视变换,获得了经过校准纠正的二进制图像,如图8所示。然后,使用滑动窗口搜索方法更容易找到清晰突出的车道线像素,但仍需进一步处理以确定哪些像素属于车道线,并区分左、右车道线。为此,需进行图像区域划分、绘制直方图、车道线像素识别、多项式曲线拟合和车道线绘制。
图8 校准纠正后二进制图像
2.2.1 图像区域划分
根据道路的几何形状,将图像分为左、右2个区域,分别用于检测对应的车道线。本文通过定义一条垂直线来划分图像,将其分为左、右2个部分。
2.2.2 绘制直方图
在透视变换后的二进制图像中绘制直方图,如图9所示。直方图反映了不同像素在图像中的分布情况,车道线通常在图像中形成明显的峰值,通过观察直方图能够确定车道线所在的像素位置。
图9 像素直方图
2.2.3 车道线像素识别
本文针对每个区域,采用滑动窗口搜索算法识别车道线所在的像素。滑动窗口搜索是一种在图像中定位目标的方法,核心原理是通过滑动一个固定大小的窗口,逐行扫描图像,以识别目标的位置。如图10所示,本文滑动窗口搜索的实现步骤如下:
图10 滑动窗口搜索过程
a. 创建一个滑动窗口,从图像底部开始,在图像高度范围内,将图像划分成9个滑动窗口,每个滑动窗口的宽度为50像素,高度为20像素。
b.在每个滑动窗口中,绘制窗口内白色像素的直方图,并获取直方图峰值位置,峰值位置通常对应于车道线所在的像素。
c.找到当前滑动窗口内的车道线像素后,将下一个滑动窗口的起始点移动到上一个滑动窗口中心的位置,并循环继续进行下一轮的搜索。
该方法能够逐步、系统地在图像中定位车道线像素的位置,为后续车道偏离预警提供关键信息。在实际应用中,通过调整滑动窗口的尺寸、位置和搜索策略,可以进一步优化该方法,以满足不同道路情况和车辆行驶速度的需求。
2.2.4 多项式曲线拟合
在车道线检测中,通过滑动窗口搜索获得车道线像素的位置后,使用二次多项式拟合得到车道线的曲线模型。二次多项式的数学形式为:
式中,v、k分别为车道线的横、纵坐标;a、b、c为需确定的系数。
通过拟合二次多项式,可以获得车道线曲线的系数,根据已知的车道线像素点的坐标计算最优的参数a、b、c,从而得到车道线的二次多项式曲线模型。
2.2.5 车道线绘制
通过拟合算法得到左侧车道线和右侧车道线的二次多项式系数,可以在图像上直观地显示出车道线的位置,从而可视化车道线检测结果,如图11所示。
图11 车道线可视化结果
如图12所示,本文利用单目摄像头测距算法计算识别出的车道线底部端点至图像中间的距离,将此距离与车辆宽度的一半进行比较,即可判断车辆是否偏离车道。若车辆没有偏离车道,车道线区域呈现为绿色,若车辆偏离车道,车道线区域将由绿色变为红色,并发出偏离预警信号。
图12 车道偏离预警算法
首先,计算识别出的车道宽度dwidth,即左、右侧车道线之间的距离。然后,计算车辆相对于左、右侧车道线的水平偏移量m、n:
式中,lleft、lright分别为左、右侧车道线在图像中的位置;lmid为车辆在图像中的位置。
m>n时,车辆向右偏离车道,m Toffset>0 时,车辆向右偏离车道,Toffset<0 时,车辆向左偏离车道,且|Toffset|越大,车辆偏离越远。本文参考文献[11]中基于横向判断的车道偏离预警算法中的阈值设定,取0.5 m 作为车辆相对于车道中心线的偏离阈值。 本文算法采用Python3.7 编写并使用OpenCV3.2.0 实现,使用的计算机硬性条件为:锐龙75800X8C16T 处理器、Kingston 16 GB 内存、Leadteck Quadro RTX4000 8 GB 内存显卡。采用的车道数据集由哈佛H6 车载摄像头在绕城高速公路上拍摄获得,得到的道路图像视频帧速率为30 帧/s、分辨率为1 920×1 080,共1 350 帧。拍摄的交通场景中融合了多种干扰路况,如车道线不清晰、周围车辆及高速公路上标志线干扰等情况。 本文对上述视频进行处理,并与基于霍夫变换的车道线检测跟踪及车道偏离预警算法[12]和基于深度学习的快速车道线检测方法[13]进行对比,测试结果如图13 和表2 所示。由表2 可知,本文算法在识别正确率方面和实时性方面具备明显优势。 表2 不同算法性能对比结果 图13 车道偏离预警结果 经过对多组实时道路视频样本的采集与分析,针对车速在80~100 km/h 范围内的各种情境,本文提出的滑动窗口搜索算法均能在保证高识别准确率和高预警率的同时满足实时性要求。 本文针对车道线检测和车道偏离预警问题,首先,对车载摄像头采集到的实时道路图像进行图像预处理,再采用滑动窗口搜索算法对车道线进行检测,然后利用单目摄像头测距算法判断车辆是否偏离车道。试验验证结果表明,与检测效果较好的现有检测算法相比,所提出的算法在车道线检测的准确性和实时性方面显著提升。3 试验结果及分析
4 结束语