车辆行驶中的前方车辆检测方法研究

2022-07-07 12:42李杨
电子技术与软件工程 2022年5期
关键词:矩形框矩形分类器

李杨

(天津商务职业学院 天津市 300350)

1 前言

对于自己驾乘的车辆而言,前方马路上存在着各种各样的障碍物,最常见的就是前方正常行驶的车辆。如果可以正确、高效的检测行驶在前方的车辆,在前方车辆距本车过近时给驾驶员以提醒,驾驶员采取减速、避让等措施,这样可以减少追尾等一系列交通事故。

车辆检测的必要性,分析大量交通事故数据,百分之八十以上的交通事故是由于驾驶员反应不及时引起的。研究车辆安全辅助驾驶技术,进而减少车辆交通事故发生的概率,在车辆行驶中保护车内、外人员生命财产安全,为车辆提供智能技术保障迫在眉睫!

2 车辆检测

2.1 感兴趣区域设定

拍摄机架设在车辆前面挡风玻璃内侧,出于盲区等方面的考虑,一般摄像机会设有一定的俯仰角度。拍摄的图像上部分会有天空,且本车左前方和右前方的车辆几乎不会跟本车发生碰撞,据此在本文中设定感兴趣区域。

为了减小图像处理的面积且确保前方可能发生碰撞的车辆均在感兴趣区域内,本文将图像从纵向上均分为上、中、下三个部分,在摄像机采集图像时保证其俯角不超过5°,这样前方的车辆将成像在图像的中间部分和下面部分,本文将上部分的图像全部置黑,下面部分的图像全保留;本文考虑到采集的图像会发生形变、马路成像有倾斜角度、马路在图像下面部分宽度远大于马路在图像中间部分的宽度、摄像机的俯仰角和摄像机高度、拍摄场景等信息,本文将马路的倾斜角设置为30°,这样确保有可能发生碰撞的前方车辆均在感兴趣区域内。

2.2 基于阴影特征的车辆检测

本文根据车辆下方存在阴影这一特征可将车辆检测出来。通常路面上的灰度值分布是连续的,或者均匀的,但是在阴影区域灰度值就会发生突变,据此来判断是否出现车辆。

在检测是否有灰度突变行时是从图像的下端逐行向上扫描的过程,因为图像上三分之一被完全置黑,所以只需要从图像下端扫描到图像下三分之二处即可。理论上,如果某一行的灰度值比其下面行小很多,就认为发生了灰度突变。在实际中,突变的条件不仅仅是本行灰度平均值比本行下面一行灰度平均值小很多,为了严谨起见,还要比本行下面的第五行、下面的第十行的灰度平均值要小20以上。

2.3 基于AdaBoost算法的车辆检测

Adaboost算法正是“三个臭皮匠赛过诸葛亮”在应用中的灵活体现。

2.3.1 AdaBoost算法概述

AdaBoost算法是一种迭代过程,其本质是针对同一个训练集训练不同的分类器(弱分类器),然后把这些弱分类器集合起来,就形成了一个更强的最终分类器。

下面举一个简单的例子来看看AdaBoost的实现过程:图1为分类之前的原图,图中“+”和“-”分别表示两种类别,每类5个点,总共10个点。

图1:分类之前的原图

第一步进行第一次划分,划分结果如图2所示。

图2:第一次划分后得到的结果

在右图D中,比较大的“+”是对该样本做了加权处理。也许上面的加权误差率ε1,权重系数α的由来表示不是很清晰。下面具体算一下:算法最开始给了一个均匀分布D(如图1所示),h里总共10个点,所以每个点的概率是百分之十。经过第一次当划分后,其中有三个点划分不正确,ε1=(0.1+0.1+0.1)=0.3,而α根据公式1(公式1是第t个弱分类器在训练集上的加权误差率的计算)可以计算为0.42。根据算法把分错的点权值增加。完成迭代后,最终实现AdaBoost算法。

第二步进行第二次划分,划分结果如图3所示。

图3:第二次划分结果

第三步进行第三次划分,划分结果如图4所示。

图4:第三次划分结果

第三次划分之后得到一个子分类器h。整合所有子分类器,整合所有分类器结果如图5所示。

图5:整合所有子分类器

从整合所有子分类器的效果得知,简单的分类器组合起来能够取得良好的分类效果。

2.3.2 基于AdaBoost算法的分类器训练

利用AdaBoost算法生成的分类器检测前方车辆,主要分为三步:

第一步:创建正负样本;

第二步:训练分类器;

第三步:利用训练好的分类器检测车辆。

训练样本分为正样本和负样本,其中正样本是指包含检测目标的样本,即包含车辆的图像;负样本指其他任意不包含目标的样本,即不包含车辆的任意图像。

首先需要制作正、负样本的描述文件。本文中共收集了1198个正样本图像,并将其都放入名为pos_img的文件夹中,打开cmd命令窗口,进入pos_img文件夹内,键入命令“dir/b >pos_image.txt”,生成名为pos_image.txt的文本文件。

为了下一步训练分类器,需要标出每幅图像中目标的数量、目标在图像内的区域,为了方便起见将正样本图像统一成100*80的大小。用editplus软件可批处理文件文本的每一行内容。

文件每行开始为图像所在的文件夹名称,接下来是符号“/”、图像名称,空格后的数字表示这幅图像中包含目标的数量,例如1代表本幅图像中包含1辆车,接下来的四个数字代表目标在图像内的矩形区域位置,例如“0 0 100 80”表示汽车在本幅图像内矩形区域的始末点坐标为(0,0),(100,80)。就文本文件的第一行来说,其代表的意思是:文件夹pos_img内的图像0.jpg上包含1辆车,这辆车在图像内可用一个矩形区域来表示,若矩形区域可用对角线始末点的坐标来表示,那么能表示矩形区域的两个点坐标为(0,0)和(100,80)。若图像中包含有2个目标,则就需2个矩形区域来表示。如第一行改写为:

pos_img/0.jpg 2 0 0 100 80 101 0 200 80

这就意味着:文件夹pos_img内的图像0.jpg上包含2辆车,这2辆车在图像内可各用两个矩形区域来表示,若矩形区域可用对角线始末点的坐标来表示,那么能表示其中一个矩形区域的两个点坐标为(0,0)和(100,80),令一个矩形区域的两个坐标为(101,0)和(200,80)。当然,在本文中这么写是不合理的,因为图像只有100*80的大小,根本就不存在点(200,80)。制作描述负样本的文本文件相对简单,负样本不包含目标,无需指出目标的数量和在图像上的位置,只需打开cmd命令窗口,进入存放负样本的neg_img文件夹内,敲入命令“dir /b >neg_image.txt”。

接下来需要制作训练分类器所需要的vec文件。执行此步骤后在pos_image.txt同一地址中生成pos.vec文件。

最后使用opencv_haartraining.exe文件进行训练。在pos.vec目录下输入cmd命令“Opcnv_haartraining.exe –data xml–vec pos.vec –bg neg_image.txt –nsplits 1 –sym –w 35 –h 30 –mem 1280”。其中-data为输出存放xml中间文件的文件夹名称,中间文件存放在刚刚建立的xml文件夹内,-nsplits 1表示使用简单的stump classfier分类,-sym表示训练的目标为垂直对称,-mem 1280表示允许使用计算机的1280M内存,占用的内存越大训练越快所需的时间越短。

2.3.3 分类器测试

依照上面的方法,本文训练了三个分类器,为了比较三个分类器的性能,分别用三个分类器分别测试了相同200幅图像。三个分类器测试结果如表1所示。

表1:三个分类器测试结果

综合来看,car.xml分类器的性能最优,为了进一步降低误检率,本文采用结合基于车辆尾部红色特征的排误检方法。

2.3.4 基于车尾灯颜色的误检排除

由于分类器的不完备性,车辆检测的误检率高于实验预期,可以通过再加一种特征的方法排除误检,降低误检率。由于车辆尾部的刹车灯为红色,根据这一特征,可以排除误检。本文认为,AdaBoost检测的矩形框内如果有红色像素点,则认为是车辆;如果AdaBoost检测的矩形框内没有红色像素点,则认为此矩形框内没有车辆,这个框是AdaBoost的误检,给与排除。

2.3.5 合并矩形框

训练好的分类器就可以用来检测目标了,并利用基于车辆尾灯存在红色区域的特征来排除误检,但在检测的过程中会出现矩形框重叠的现象,为了解决这一问题,需要做矩形框的合并。合并后的矩形框是包含了原来两个矩形的最小外接矩形框。

2.4 实验结果与分析

比较上面基于阴影特征的车辆检测方法和基于AdaBoost算法的两种车辆检测方法,基于阴影特征的方法对光照依赖度比较高,如果光照的影响导致阴影特征不明显,或者距本车最近的阴影不是车辆的阴影而是树木、建筑物或者行人造成的阴影,将给结果造成干扰,而且远距离的车辆检测效果不够理想。相比较之下,基于AdaBoost算法的车辆检测对环境依赖度不高,即使天气情况不好也可以准确地检测出车辆。

3 结束语

本文运用了两种方法检测前方的车辆。第一种根据公路上阴影特征来检测前方车辆,在感兴趣区域内对图像灰度化,计算图像每行的灰度平均值,若其中某一行的灰度值发生了突变,就认为这个位置有车辆存在。实际路况下,马路上不单有车辆阴影,还存在行人、树木、高大建筑物、指示牌等的阴影,单纯利用阴影检测车辆,误检率太高。接着本文尝试第二种车辆检测方法,基于AdaBoost的车辆检测,AdaBoost算法对光照以及其他路况信息依赖性小,鲁棒性好,但误检率高。为了降低算法的误检率,提出了基于车辆尾部红色区域的误检排除算法,根据车辆尾部的刹车灯是红色这一特征,判定AdaBoost检测到的矩形框里面是否包含车辆,对没有红色分量的矩形框予以排除。若矩形框有重叠部分,则通过求重叠矩形框最小外接矩形的方式合并矩形框。

基于AdaBoost算法的车辆检测率可达到98.5%,误检率不足3%,检测每帧图像需要40ms,每秒钟可检测25帧图像,实时性也满足系统需求。

猜你喜欢
矩形框矩形分类器
两矩形上的全偏差
多模态卷积神经网络的物体抓取检测
化归矩形证直角
一种汽车式起重机防倾翻方法的研究
BP-GA光照分类器在车道线识别中的应用
共享单车有了“家”
加权空-谱与最近邻分类器相结合的高光谱图像分类
结合模糊(C+P)均值聚类和SP-V-支持向量机的TSK分类器
基于LLE降维和BP_Adaboost分类器的GIS局部放电模式识别
基于可变矩形框的人群密度估计算法