1. 背景
中国经济实力不断提升,公路交通快速发展,使得汽车数量逐年增加,道路交通问题日益突出,特别是阴雨天,由于司机视野受限,交通事故频繁。
汽车雨刮器的出现是缓解该问题的利器,目前已经出现传统雨刮器和基于雨量传感器的自动控制雨刮器,然而传统雨刮器均为手动控制,这将分散司机注意力,存在极大安全隐患。基于雨量传感器的雨刮器可以在一定程度上缓解司机驾驶压力,但是由于该传感器的测量范围小,信号非线性等限制,使得该雨刮器效果并不理想。广泛应用于汽车驾驶安全的视觉传感器可以很好地克服雨量传感器的缺点,特别是近几年机器视觉的快速发展,为雨量监测提供了新的研究方向和理论基础。
2. 原理简介
本方案的关键正是雨滴检测,这也是国内外研究热门,但是对于附着雨滴的检测国内相关论文较少,国外研究已久,目前算法主要是针对白天,对雨滴进行数学建模,然后利用雨滴形状颜色纹理等先验信息进行雨滴区域确认。本文方法将分别对白天和夜晚进行雨滴检测,而后又用深度学习进行了相关工作。
2.1 白天雨滴检测
白天时,由于摄像头是否聚焦于雨滴,雨滴外观差异较大,因此将分别对清晰和模糊雨滴进行检测。
当相机摄像头聚焦于雨滴时,雨滴外观显示为背景的缩影,如下图所示,左图为棋盘格通过清晰雨滴所成像,可以看出所成像就是背景棋盘格的缩影,具体收缩率如右图所示,经验值为20到30之间,这也说明背景物体运动幅度是雨滴中所成像运动幅度的1/30到1/20,因此可以采用光流法进行清晰雨滴检测。
当相机未聚焦于雨滴时,如下图所示,雨滴区域会变得模糊,此时采用强度差分方法,想象在眼镜上有一水滴同时转动头部,由常识可知,由于雨滴的模糊平滑作用,结果会使雨滴区域强度变化小,因此可以采用强度差分方法进行模糊雨滴的特征提取。
特征提取后,将进行雨滴区域分割,考虑到算法对于分割精度和速度的双重要求,将统一采用恒虚警率(CFAR)检测算法进行雨滴区域分割。
2.2 夜晚雨滴检测
夜晚时,如下图所示,存在车灯、路灯等强光,使得雨滴外观既不是环境缩影,强度差分方法也会失效,这是因为强光会湮灭雨滴,使得夜晚时应该另想方法,考虑到夜晚时雨滴表现为一个个亮点,而CFAR算法对暗背景下高亮目标敏感,因此采用CFAR算法进行夜间雨滴检测,同时利用形状和大小信息进行降噪。
2.3 深度学习
本方案中采用行车记录仪拍摄雨天视频,包括白天夜晚大雨小雨无雨等多种情况,然后建立数据集,建立方法如下图所示:每隔100帧进行一次帧提取,为了能够短时间内获得较大数据量,对所提取帧的五个区域进行400×400的裁剪,然后归一化为224×224,这样做既保证了视野范围,也可以利用现有网络模型进行微调。
网络微调模型为VGG16模型,包括13个卷积层和3个全连接层,该模型具体参数请参见这里。
3.实验结果
3.1 传统图像处理方案
首先是白天检测结果,如下图所示,尽管原始图中雨滴不明显,但是特征图中的雨滴区域被明显突出,并在结果图中完美分割出来。
下图为上述结果动态展示,通过动图可以看出,大部分雨滴检测出来,但是也存在不足:如果在检测时间段内天空及地面未出现其他景物,可能存在漏检;由于CFAR算法中窗的限制,水流难以完整分割;此外由于行车记录仪为广角摄像头,在车窗两侧存在畸变,雨滴变得小而密集,最终结果可能存在漏检。
接下来是夜晚检测结果,可以看出检测效果也比较好,但是对于灯光周围存在漏检,其他部分偶尔可能存在误检,未来可以利用帧间位置信息进行降噪处理。
3.2 深度学习方案
下图为训练VGG16网络的精度曲线,可以看出测试集精度已经达到92%,这是在数据集仅有1300张左右情况下的结果,若能加大数据集样本数,相信可以进一步提高精度。
下图为网络分类结果的部分展示,数字分别代表真实标签和分类结果,可以看出大部分是准确的,特别是无雨和大雨时,特征比较明显,分类结果准确率很高,无雨时夜晚的灯光也可以准确辨别;而小雨时,个别雨滴不清楚,可能会导致分类结果错误
4. 总结
常规雨滴检测算法仅仅针对白天,而本文提出了一套可以处理白天和夜晚的全新的雨滴检测与分割流程,并且具有很高精度,而后又用深度学习进行相关工作,结果证明两种方法在雨量分级应用中具有参考价值,然而,本文还存在较多不足:白天时可以采取其他算法单独处理天空和地面,夜晚时可以利用雨滴位置信息降低误检;雨量分级策略中,可以综合考虑雨滴个数和尺寸;最后也可以增大数据集,降低过拟合风险。