1、第 4 卷第 4 期2022 年 12 月微纳电子与智能制造Micro/nano Electronics and Intelligent ManufacturingVol.4 No.4Dec.2022基金项目:教育部人文社科基金(20YJCZH200),北京市教育委员会科技计划(KM202110037002),北京市“高创计划”青年拔尖人才(2017000026833ZK25),北京市通州区运河计划领军人才(YHLB2017038)项目资助陈月正,硕士,主要研究方向为图像处理与多目标优化。E-mail:chenyuezheng1999 薛菲(通信作者),博士,副教授,主要研究方向机器学习与智能
2、优化。E-mail:xuefei2004 DOI:10.19816/ki.10-1594/tn.2022.04.082基于 OpenCV 的车道线检测方法的研究陈月正,范文宇,叶蕴森,薛菲,唐恒亮(北京物资学院信息学院 北京 101149)摘要:车道线检测是车辆辅助驾驶系统必不可少的环节,是自动驾驶领域的一个重要研究课题。本文提出一种基于OpenCV 计算机视觉库的方法对车道线进行检测。首先对车载摄像头采集的图像进行预处理,包括图像裁剪、灰度化处理等过程,接着对车道线图像执行高斯滤波降噪、二值化处理、直方图均衡化、边缘检测,然后选取感兴趣的区域,通过霍夫变换和最小二乘法拟合直线,得到用于检测的
3、车道线图像,最后为了增强视觉效果,对拟合的车道线图像进行填充,叠加到原图进行显示。实验结果表明:本文采取的车道线检测方法具有较高的检测精度和效率,适用于一般道路场景的车道线检测。关键词:OpenCV;车道线检测;霍夫变换;最小二乘法中图分类号:TP391 文献标识码:A 国家标准学科分类代码:520Research of lane line detection method based on OpenCV CHEN Yuezheng,FAN Wenyu,YE Yunsen,XUE Fei,TANG Hengliang(School of Information,Beijing Wuzi Uni
4、versity,Beijing 101149,China)Abstract:Lane line detection is an essential part of vehicle assisted driving system and an important research topic in the field of au-tonomous driving.This paper presents a method based on OpenCV computer vision library to detect lane lines.Firstly,the image col-lected
5、 by the vehicle-mounted camera is preprocessed,including image clipping and grayscale processing,and then the lane line image is de-noised by Gaussian filtering,binarization processing,histogram equalization and edge detection.Next,the interested region is se-lected and the line is fitted by Hough t
6、ransform and the least square method to obtain the lane line image for detection.Finally,in order to enhance the visual effect,fill the fitted lane line image and overlay it onto the original image for display.The experimental results show that the lane line detection method adopted in this paper ha
7、s high detection accuracy and efficiency,and is suitable for lane line detection in common road scenes.Keywords:OpenCV;lane line detection;Hough transform;least square method0引言近些年来,经济的迅速增长带动了汽车产业的发展,道路上行驶的车辆越来越多,随之带来了一系列问题,每年交通事故发生率呈逐年上升的趋势。据研究发现,很多交通事故是由驾驶员疏忽引起的。为了降低交通事故的发生率并保证车辆在道路上安全驾驶,车道线检测与车道偏
8、离警告、交通标识检测、前车碰撞警告等车辆辅助驾驶系统成为人们研究的热点问题。车道线检测是实现车道辅助驾驶系统技术应用的关键,同时也是自动驾驶领域至关重要的环节。近些年来,计算机视觉领域取得了重大突破,尤其在图像识别、图像检测等方面1,OpenCV作为开源的计算机视觉库,包含许多函数,可用于自动驾驶的车道线识别与检测,可以非常高效地实现计算机视觉算法,OpenCV 车道线检测常用的函数见表 1。车道线检测的研究方法有很多,常见的主要有3 类2:(1)基于特征的检测方法。该方法针对车道的颜色、边缘、纹理等特征信息,通过图像分割的方法将车道标线与非车道区域分离,再通过相关算法得到车道线。(2)基于模
9、型的检测方法。该方法主要是建立数学模型,采用直线或者曲线模型表示车道线,通过RANSAC 算法、霍夫直线变换等算法对模型参数求第 4 期陈月正 等:基于 OpenCV 的车道线检测方法的研究83 表 1OpenCV 车道线检测常用函数Table 1Common functions of OpenCV lane line detectionOpenCV 车道线检测常用函数解释cv2.CvtColor彩色图像灰度化cv2.GaussianBlur高斯滤波cv2.CannyThresholdCanny 边缘检测cv2.HoughLinesPhansP霍夫变换np.ravel、np.ployfit最小
10、二乘法拟合cv2.line车道线标注cv2.fillPoly绘制多边形函数cv2.bitwise_and选取掩模选定的区域cv2.equalHist直方图均衡化cv2.THRESH_BINARY阈值二值化cv2.THRESH_BINARY_INV阈值反二值化cv2.THRESH_TRUNC截断cv2.THRESH_TOZERO阈值取零cv2.THRESH_TOZERO_INV阈值反取零解得到车道线。(3)基于机器学习的检测方法。该方法主要通过将车道线图像特征输入已训练好的机器学习模型中,对其进行训练,生成优化的车道线参数方程对车道线进行检测。Chiu 等3提出了一种根据车道线的颜色特征进行检测
11、的方法,使用颜色分割与二次函数逼近的方法寻找车道线,但是当光线不好时检测效果较差。Cheng 等4通过采用线性的方法提取车道线,并对RGB 通道进行分析,得知在没有外界干扰的情况下车道线检测效果较好。唐阳山等5将 Canny 边缘检测算子和霍夫变换相结合,在常见路况下的车道线检测效果较好,但在路况比较复杂的情况下,检测精度不高。储开斌等6提出一种自适应感兴趣区域消除新边缘噪声的方法,适用于各种天气和路况的车道检测,但对于曲率较大的路面,检测效果较差。Lee 等7提出了 VPGNet 多任务网络,具有较好的实时性,在恶劣天气下也能对车道线有效检测。田锦等8采用改进的 Mask R-CNN 模型将
12、车道线图像进行分割,提出一种自适应的方法,结合直线和多项式方法对特征点进行拟合,建立最优车道线方程,对不同场景下的车道线检测精度均较高。基于特征的方法对特定道路和简单场景下检测效果较好,但是对于路面出现阴影和水渍、车道线标志受损、路面光照发生变化等情况,检测鲁棒性低;基于模型的方法可以很好地检测出车道线,它将不同的车道线看作不同的模型,根据道路上的图像信息确定模型的参数,但模型检测实时性不高,不能满足复杂道路场景的要求;基于机器学习的方法通过对 数据集的有 效训练来检 测 车 道线,检测准确率较高,但是依赖大量的标签数据,处理时间长且复杂度高,达不到实时性和快速处理的需求。基于以上原因,本文提
13、出了一种基于 OpenCV的方法对车道线进行检测,首先对图像进行预处理,包括对原始图像进行裁剪、保留车道线区域,消除影响车道线检测的无关信息,显示出所需要的信息,然后进行灰度化处理、高斯滤波降噪、二值化处理等过程。车道线检测流程如图 1 所示。图 1车道线检测流程Fig.1Process of lane line detection1图像处理1.1车道线图像预处理在车载摄像头拍摄的原始图像中,不仅包含车道线信息,还包含许多其他无关信息和噪声数据,会对车道线的检测带来干扰。因此需要对采集的车道线图像进行图像预处理。首先是图像裁剪,其目的是消除无关的干扰信息,保留车道线信息,从而提升数据质量,减少
14、存储容量及计算时间9,裁剪前后的图像如图 2 所示。图 2裁剪前后的图片对比Fig.2Image comparison before and after cropping1.2灰度化由于采集的原始图片大多以 RGB 形式存储在计算机中,处理起来不太方便,并且在灰度图中,系统可快速、完整地提取车道线,因此有必要对彩色图像进行灰度化处理。这些彩色图像的 RGB 的分量值由 R、G、B 3 个数值确定,彩色图像每个像素分量的范围是 0255,分量值不一定相同,而灰度图的分量值是相同的。常见的彩色图像灰度化方法有平均值法、加权平均法和最大值法,下面分别对这 3 种方法进行介84 微纳电子与智能制造第
15、4 卷绍10。(1)平均值法:对三通道的 RGB 值求和取均值:Gray(i,j)=R(i,j)+G(i,j)+B(i,j)3(1)(2)加权平均法:根据人眼对光的适应度分配比例,结合 RGB 和 HSV 颜色空间的变换关系,将三通道 RGB 值转为 HSV 的灰度单通道,建立亮度与RBG 分量的对应关系:Gray(i,j)=0.29R(i,j)+0.58G(i,j)+0.11B(i,j)(2)(3)最大值法:取三通道 RGB 分量值的最大值作为灰度值:Gray(i,j)=maxR(i,j),G(i,j),B(i,j)(3)平均值法和最大值法只是在原公式上分别求取平均值和最大值,对灰度图中原有
16、的像素值没有最大程度的保留,会影响后续的边缘检测11,而加权平均法处理彩色图像的亮度值会更加贴近现实,从而更好地得出灰度化图像,方便后续操作,故采用加权平均法对车道线进行检测。在灰度化处理中采用 cv2.CvtColor 函数,得到的灰度化图像如图 3所示。图 3灰度化图像Fig.3Gray scale image1.3图像去噪与二值化处理经过灰度化的图像仍然会存在一些噪声,车道线的特征信息会被这些噪声覆盖,因此需要采用滤波方法对图像进行降噪处理。(1)均值滤波:该方法计算一定大小邻域内所有像素点的平均值作为原像素值,方法比较简单高效,但是会丢失一些图像特征和边缘信息。(2)中值滤波:该方法通过计算模板像素的中值作为结果值,可以消除孤立点和抑制噪声,但是有时复杂度较高。(3)高斯滤波:该方法利用二维高斯函数的分布对图像去噪,能够保留更多的边缘信息和图像特征,使图像更加清晰。本文采用高斯滤波对车道线进行检测,在滤波中使用的高斯函数为:一维高斯分布:G(x,y)=(1/2)e-x2/22(4)二维高斯分布:G(x,y)=(1/22)e-(x2+y2)/22(5)式中:x、y 表示高斯核的中