APP下载

一种基于单目视觉的前方车辆检测算法

2019-03-18陈高攀徐美华郭爱英

关键词:直方图阴影灰度

陈高攀, 徐美华, 王 琪, 郭爱英

(1. 上海大学微电子研究与开发中心, 上海200444; 2. 上海大学机电工程与自动化学院, 上海200444)

在过去的十几年里, 针对智能驾驶辅助系统和自动驾驶系统的研究有很大进展, 这些研究主要是通过监测路面环境来增强车辆的安全性[1]. 基于视觉的前方车辆检测算法, 因其具备传感设备便携、检测环境信息量较大、应用范围较广等优点而成为研究热点. 该算法主要由2 个步骤组成: 前方车辆提取和前方车辆识别. 前方车辆提取是根据车辆的直观视觉信息, 如对称性[2]、边缘信息[3]、车底部阴影[4]等来分割可能是车辆的区域——感兴趣区域(region-of-interest, ROI); 前方车辆识别采用车体尾部纹理、车尾灯[3]、车牌、Haar 特征[5]+自适应提升(adaptive boosting, AdaBoost)、方向梯度直方图(histogram of oriented gradient,HOG)特征[6]+ 支持向量机(support vector machine, SVM)等方法筛选出感兴趣区域.

作为算法的前半部分, ROI 的产生对整个车辆检测的准确率、误检率、速度都有较大影响. 由于车底部阴影特征明显、计算量小、鲁棒性强等优点, 故ROI 产生的算法被广泛使用.闫巧云[3]采用基于大津阈值Qtsu 方法来分割图像, 以此产生ROI; Kanitkar 等[7]提出了一种基于累积密度方程(cumulative-density-function, CDF)的方法来产生ROI; 而Li 等[8]假设路面区域灰度值服从高斯分布, 取灰度直方图积分的0.1 对应像素灰度值作为阈值分割点, 进而得到感兴趣区域. 在这几种方法中, 由于大津阈值计算量大、耗时长, 且对于灰度直方图为多峰的情况处理效果差, 故其应用范围有局限性; Kanitkar 等[7]和Li 等[8]虽然针对不同光照条件的适应性有所提高, 但是在复杂的行驶环境下ROI 产生的效率较低, 且漏检率较高. 基于此,本工作从灰度值分割和区域分割2 个维度进行分析, 提出了一种基于人工神经网络(artificial neural network, ANN)的阈值分割与分区域六角分割相结合的提取ROI 方法, 并在此基础上结合类Haar 特征与改进的AdaBoost 分类器[9]识别算法对ROI 进行筛选, 从而得到前方车辆目标. 实验结果表明, 对于分辨率为640×480 的视频,系统的处理速度可达到81.3 帧/s, 错误率为3.8%, 为进一步的前方车辆检测系统实用化打下基础.

1 算法概述

本工作提出的前方车辆检测算法由4 个模块组成:视频输入、前方车辆提取、前方车辆识别和视频输出, 其结构如图1 所示. 前方车辆提取模块将有可能是车辆的区域标记出来, 以减少目标验证的计算量; 前方车辆识别模块对ROI 进行筛选得到车辆目标.

图1 算法结构Fig.1 Algorithm structure

2 前方车辆提取

前方车辆提取包括图像预处理、ANN 灰度分割、分区域六角分割和ROI 筛选4 个子模块, 其作用是将可能是车辆的区域从整个图像中提取出来.

2.1 图像预处理

图像的预处理是将视频的帧画面进行前期处理的过程, 包括顶部分割、灰度化、中值滤波3 个步骤. 对大量的视频数据(包括平路、上坡、下坡、隧道、桥梁等)统计分析发现, 车载相机捕获到的图像顶部为天空区域; 顶部分割将原图像(见图2)的上1/4 去除而把下3/4 作为处理对象(见图3), 减少了不必要的运算而提高算法效率; 然后对分割后的图像进行RGB 加权灰度化(见图4), 其运算表达式为

式中, (i,j)为像素点的空间位置; F 为灰度化后的像素值; R, G, B 为3 个颜色通道的值; K1,K2, K3分别为3 个颜色的权重, 在这里分别取0.11, 0.59, 0.30. 最后用3×3 的模板对图像进行中值滤波, 去掉随机噪声. 预处理结果如图5 所示.

图2 原图Fig.2 Original image

图3 顶部分割Fig.3 Top segmentation

图4 灰度化Fig.4 Gray scale image

图5 中值滤波Fig.5 Median filter

2.2 ANN 灰度分割

作为一个非常明显的车辆特征, 车底部阴影在前方车辆检测中得到了广泛的应用, 其基本思路是通过寻找车底部阴影来定位车辆位置区域. 相比图像中的其他部分, 车底部阴影像素灰度值较低, 可根据灰度值将车底部阴影与其他背景分割开来, 即灰度阈值分割(大于阈值为背景区域, 小于阈值为候选车底部阴影区域), 其中关键技术是灰度阈值的计算.

闫巧云[3]采用大津阈值来分离目标(车底部阴影)和背景(其他区域). 大津阈值是一种图像处理中具有代表性的灰度阈值分割方法, 以概率论为理论基础, 假设图像中的目标和背景的像素灰度均服从正态分布:

式中, k 为常数, m 为均值, s 为方差. 虽然在背景较为单一的情况下这种假设是可以满足的,但是由于在实际车辆行驶环境中, 存在天空、路面、建筑物、路旁树木等较复杂的多背景, 这种条件很难使整体背景的灰度直方图为正态分布, 故其应用受到了限制.

Kanitkar 等[7]认为, 如果将车底部阴影与背景分割开来, 则不同的光照会对分割阈值产生影响, 因此分割的阈值应具有动态性. 本工作假设路面区域灰度统计直方图服从高斯分布, 对归一化后的直方图进行积分得到累积分布函数(cumulative distribution function, CDF), 根据实验经验设CDF 的值为0.15∼0.20. 这种方法能够适应不同光照条件, 但是由于实际路面环境为动态的, 车辆数目会影响到车底部阴影像素和数目, 距离的远近对车底部阴影的大小也有较大的影响, 因此静态的像素数目积分的方法应用范围受限. 同样, Li 等[8]也提出类似的方法,对归一化的灰度直方图进行积分, 将积分值为0.10 处对应的灰度值作为阈值分割点.

本工作提出了一种基于人工神经网络方法来分割目标和背景的方法. 首先, 假设图像中存在一个目标区域及一个或多个背景区域; 其次, 目标区域和背景区域的灰度值都服从正态分布, 且目标区域与背景区域、背景区域之间的灰度值无重叠部分或者存在较小的重叠部分. 该灰度直方图模型如图6 所示.

图6 多背景灰度直方图模型Fig.6 Multi-background gray scale histogram model

图7 实际灰度直方图Fig.7 Actual gray scale histogram

在如图7 所示的实际灰度直方图中, 目标区域即为车底部阴影, 背景部分可能为绿化带、道路、房屋建筑、车身等其他部分和天空区域等. 对实际灰度直方图进行抽象可以得到如图6所示的多背景灰度直方图模型. 从模型中可以看出需要寻找的点即为O1, 本工作以此模型为基础, 采用人工神经网络来拟合O1点的灰度值.

人工神经网络是20 世纪80 年代以来人工智能领域兴起的研究热点, 是从信息处理角度对若干生物神经网络的基本特征进行抽象和模拟[10]. 一个经典的反向传播(back propagation,BP)网络结构如图8 所示, 该结构包含输入层、隐含层和输出层, 其相邻层之间的单元是全连接的. 图8 中, X1, X2, ···, Xn为神经网络的输入值, Y 为神经网络的输出值, Wij和Wjk为神经网络的权值. 应用该神经网络的一个难点是必须找到合适的待分类数据的特征, 即输入向量X1, X2, ···, Xn.

在如图7 所示的多背景灰度直方图模型的基础上, 进一步对其进行离散化抽象, 得到如图9 所示的归一化离散点图. 图中横轴方向灰度值为α, 范围为0∼255; 纵轴是灰度值对应像素数目与总像素数目比例β.

可以看出, 图9 是对图7 主要信息的抽取, 其峰值和谷值直接来源于图7. 将得到的离散峰谷向量作为从灰度直方图提取的特征输入BP 神经网络进行训练, 其中每一个向量包含3 个数据:灰度值α、像素比例β、像素比例β 对灰度值α的积分γ. 为了降低算法的漏检率, 灰度分割阈值需要将图像中的车底部阴影准确分割出来. 在实际情景中, 能满足此条件的分割点是一个阈值范围, 而人工神经网络的输出为一个固定的值而非阈值范围. 为消除此不匹配且使算法具有较高的鲁棒性, 将阈值范围的中值作为BP 神经网络的目标值Y.

为验证所提出方法的准确性, 从随机选取的294 张图像中提取出10 组峰谷向量作为输入X, 以及对应的阈值范围中值作为目标Y. 训练、确认和测试集分别占总样本的50%, 25%,25%, 其中训练集用于训练神经网络的参数; 确认集测量网络的生成, 触发训练终止; 测试集评价网络的性能. 采用Matlab 训练测试结果如图10 所示.

图8 BP人工神经网络Fig.8 BP artificial neural network

图9 归一化离散点图Fig.9 Normalized discrete point graph

图10 ANN训练测试结果Fig.10 Result of ANN training and test

从图10 中可以看出, 横轴为目标值与实际输出值的差值, 纵轴为样本数目. 训练集的误差成正态分布, 范围为[−5, 6]; 而根据实际的灰度阈值分割经验, 在误差范围为[−10, 10]内都能够有效分割出所有感兴趣区域, 故训练集的输出值Y 都能满足误差范围. 测试集数据大致也呈正态分布, 但其离散程度更大, 不满足误差范围的概率为8.3%.

表1 对比了大津阈值、CDF 和本工作的ANN 这3 种方法的性能, 其中对比的参数为误差的最大值、最小值、范围、均值和标准差. 从表1 中可以看出, ANN 的方法除误差最小值低于大津阈值以外, 其他参数都要优于另外2 种方法; 误差均值和误差标准差都小于大津阈值和CDF 的方法, 表明本方法的鲁棒性更强, 能适应更复杂的背景环境.

表1 3 种方法比较Table1 Comparison of three methods

采用上述3 种方法, 对一幅灰度分割阈值范围为[25, 45]的测试图像进行阈值计算, 得到的结果分别为40(ANN)、65(大津阈值)和22(CDF). 可以看出, 采用ANN 的方法得到的结果更加接近阈值范围的中值35. 用这3 个阈值对一幅图像进行阈值分割和形态学处理的结果如图11 所示. 从图中可以看出, 当阈值越小时白色区域面积越小; 而阈值越大时, 白色区域面积越大.

图11 3种方法阈值分割与形态学处理结果Fig.11 Processing results of segmented by threshold and morphology of three methods

图12 给出了在不同阈值分割后提取ROI 的结果. ANN 阈值得到了10 个ROI, 其中包含4 个真车尾部; 大津阈值得到了16 个ROI. 而真车尾部只有3 个, 其中最右边的车辆虽然有框选中此车辆, 但提取的部分为侧视的整个车辆, 而整个车辆的特征与车尾部特征存在差异, 因此该ROI 也会在识别部分被过滤掉, 故此部分不能为真车尾部. CDF 阈值得到了13 个ROI,其中包含3 个真车尾部, 其中从左边起第5 个红色框只捕获到部分车尾部, 而部分车尾部与整体车尾部特征存在较大差异, 此ROI 将会在识别部分被过滤掉, 故此部分的提取也是无效的.

从图11 和12 分析可知, 当阈值取值较大时, 图11 中的白色区域面积越大, 而白色区域面积越大会导致潜在的可能为ROI 的部分也就越多, 其结果是ROI 识别部分的计算量增大, 算法的效率降低. 当阈值较小时白色区域面积也越小, 同样的可能为ROI 的部分也会一定程度地减少, 甚至剔除掉真车底部阴影, 结果使算法的漏检率增大. 从图12 可以看出, ANN 阈值的方法在不增加漏检率的情况下, 能有效减少伪ROI, 提高算法的效率.

2.3 分区域六角分割

当路面行驶环境较为复杂时, 道路两旁的树阴等阴影区域会与车底部阴影形成粘连, 因此仅根据灰度阈值分割和形态操作很难准确地把所有的车底部阴影分割出来. 对如图13 所示图像(不含红色矩形)进行灰度阈值分割和形态操作后的效果如图14 所示.

图12 3 种方法ROI 提取结果Fig.12 ROIs extracting results of three methods

图13 基于灰度阈值42 提取ROIFig.13 ROIs extraction based on threshold 42 of grey

图14 灰度阈值为42Fig.14 Threshold 42 of grey

图14 对应的灰度阈值为42, 从图中可以看出, 前方2 辆白色车辆的车底部阴影被有效分割出来, 而后面两辆黑色车辆的车底部阴影与背景环境形成了粘连. 粘连会导致算法不能有效地提取到ROI, 即图13 中红色方框未有效提取到后面2 辆车. 针对此问题, 可以考虑用腐蚀或者开运算将粘连部分分割开来, 但是在某些情况下部分车辆的车底部阴影像素数目较少, 腐蚀或开运算会消除此部分阴影, 因此此形态学方法受到限制. 可以选择的另一个办法是通过降低灰度分割阈值来消除粘连(见图15). 图16 为分割阈值为18 时的提取效果.

图15 基于灰度阈值18 提取ROIFig.15 ROIs extraction based on threshold 18 of grey

图16 灰度阈值为18Fig.16 Threshold 18 of grey

从图16 可以看出, 粘连已经被完全消除; 而从图15 可以看出, 后面2 辆黑色车被有效提取出来. 但是此时也带来一个新的问题, 即较远地方的车底部阴影也会被除去, 由此可知一个单独的灰度阈值不能同时将近处和远处的车底部阴影分割出来.

为了应对这种情况, 本工作提出了一种分区域六角分割的方法(见图17). 该方法的主要公式为

其中, 式(3)为开运算基本公式, 是用模板S 先对图像A 先进行一次腐蚀运算Θ, 再进行一次膨胀运算⊕; 公式(4)和(5)分别为腐蚀运算和膨胀运算的部分公式. 本方法的分割思路是将可能会出现粘连的部分提取出来单独进行形态学处理, 而其他部分保持不变. 具体处理过程如下:

(1) 提取灰度阈值分割图像中的连通区域;

(2) 计算单连通区域的面积, 如果面积小于经验值Area 则终止; 否则进入步骤(3);

(3) 将此连通区域映射到一幅空白图像, 建立新图像;

(4) 对新图像进行六角开运算;

(5) 对六角开运算后的图像进行连通区域提取;

(6) 删除旧连通区域, 将新图像中的连通区域映射到原图.

对于步骤(2)中的Area 值的选择可根据经验给定, 一般而言Area 减小能降低算法的漏检率, 但运算量会一定程度地增加; 反之运算量会减少, 而漏检率增大. 本工作中Area 的值取为5 000, 选取的标准是在先保证复杂背景下较少的漏检情况时Area 值尽量的小, 达到速度与漏检率的平衡. 从图14 可以看出, 粘连部分一般为矩形的角之间(左下角和右上角, 或者右下角和左上角)的重叠. 采用六角模板对此连接部分开运算能消除粘连, 且对其他部分影响较小,故步骤(4)选择六角模板对连通域进行处理. 图18 为采用分区域六角分割后的效果图, 从图17 可以看出无论是近处还是远处的车辆都能被有效地提取出来.

图17 基于分区域六角分割法提取ROIFig.17 ROIs extraction based on partition domain six angle division

图18 分区域六角分割Fig.18 Partition domain six angle division

2.4 感兴趣区域筛选

经过区域分割后的图像能得到很多单连通区域, 但不是所有的单连通区域都是车底部阴影. 为了提高生成ROI 的准确率, 通过连通区域面积A、连通区域外接矩形从长度L 和宽度W、连通区域外接矩形宽长比θWL、连通区域与外接矩形面积比θA的阈值来筛选车底部阴影, 其中具体的阈值根据经验获得. 根据车底部阴影可获得感兴趣区域一车尾部图像.

3 前方车辆识别

前方车辆识别由Haar 特征提取和AdaBoost 分类2 个模块组成. Haar 特征由Haar 小波而得名, 其值由特征模板中白色矩形块内像素和减去黑色块得到[10]. 由于矩形Haar 特征模板对边缘、线段有较好的检测能力, 故本工作采用如图19 所示的4 种特征模板来提取Haar特征.

AdaBoost 算法是一种自适应的Boost 算法[11], 其基本思路是先对一个训练集迭代训练出不同的弱分类器, 然后把这些弱分类器集合起来构造一个强分类器. 本工作采用一种改进的AdaBoost对由4 764 张ROI 图像组成的样本集进行训练和测试[9], 其中训练集为随机选取的3 715 个样本, 测试集为剩余1 049 个样本. 在训练过程中, 每增加一轮训练, 弱分类器的个数增加一个. 本算法训练、测试10 次的结果如图20 所示.

图19 基本的矩形Haar特征模板Fig.19 Basic rectangular Haar feature template

图20 改进型Adaboost 训练和测试Fig.20 Improved Adaboost training and test

从图20 中可以看出, 训练轮数为500, 即组成强分类器的弱分类器为500 个时, 测试错误率趋于稳定, 平均错误率为3.8%. 完成训练后, 生成的分类器参数将用于后续的识别过程.

4 实验结果及分析

为验证本算法的有效性和可行性, 将其应用于前方车辆检测系统. 该系统运行处理器为Intel i3, 操作系统为Ubuntu 13.4; 采用Python+Opencv 的方案实现代码, 此方案的优点是便于后续嵌入式设备的移植, 且代码运行效率和C++几乎相同. 对分辨率为640×480 的视频进行车辆检测, 其平均运行速度为80 帧/s, 平均识别率达96.4%. 图21 为在一个视频检测过程中所拍摄的一幅效果图. 与文学志等[9]相比, 本工作提出的算法将运行速度由32 ms/帧提高到了12.5 ms/帧, 这主要是因为本工作提出的ROI 生成的方法更加高效, 减少了大量的伪ROI, 降低了ROI 验证部分的计算量; 另外, 本算法的识别率要低于文献[9]中的98.20%, 这是因为在对AdaBoost 进行训练时, 本工作制作的样本集的样本数目为4 764 个, 低于文献[9]中的17 467 个, 故AdaBoost 并未训练到最优参数,分类器准确率有所下降.

5 结束语

本工作提出了一种基于人工神经网络的方法来拟合阈值分割点, 提高了阈值分割的准确性和鲁棒性, 减少伪ROI; 针对在复杂环境下车辆与背景粘连的问题, 提出一种分区域六角分割的方法, 降低了ROI 漏检率. 最后对RIO 提取Haar 特征以及用优化的AdaBoost 对ROI分类, 得到筛选后的车辆目标. 综合实验结果表明, 本工作算法鲁棒性强, 而且识别效率更高,为进一步的前方车辆检测系统实用化打下基础.

图21 视频测试Fig.21 Video test

猜你喜欢

直方图阴影灰度
符合差分隐私的流数据统计直方图发布
采用改进导重法的拓扑结构灰度单元过滤技术
Bp-MRI灰度直方图在鉴别移行带前列腺癌与良性前列腺增生中的应用价值
你来了,草就没有了阴影
基于FPGA的直方图均衡图像增强算法设计及实现
用直方图控制画面影调
基于最大加权投影求解的彩色图像灰度化对比度保留算法
中考频数分布直方图题型展示
阴影魔怪