玉雄侯, 杨 蓉, 杨晓虎, 黄俊明
(广西大学 机械工程学院, 南宁 530004)
在高速公路气象观测中,常根据水平能见度的不同将雾的严重程度分为不同等级.研究表明[1],不同能见度对交通安全有不同程度的影响,一般认为能见度低于200 m就会严重威胁交通安全,故本文将容易引起交通安全事故、能见度小于200 m的雾称为浓雾.
在浓雾环境下行车,由于能见度较低,驾驶员不易观察车辆前方及周围路况环境的变化,若此时未及时开启雾灯,容易造成交通事故[2].目前汽车雾灯大多需要驾驶员手动开启,这依赖于驾驶员的驾驶习惯和精神状态.如果能够实现汽车雾灯智能化控制,即判断当前天气是否为浓雾天或大雨天,然后根据判断结果自动开启/关闭雾灯,不仅能简化驾驶员操作,还有助于提高汽车行驶的安全性与舒适性.
雾灯智能化控制的关键在于能够准确地识别当前天气状况.目前,国内外一些学者已开发出识别雾天的系统:Negru等[3]设计开发了一套基于图像处理的驾驶辅助系统,该系统通过车载摄像头获取当前道路的拐点和水平线2个参数,进而计算出能见度以识别雾天;龙科军等[4]设计了一套雾天高速公路路况监测预警系统,采用将前向性散射型能见度仪固定于雾天事故多发路段对气象数据进行采集,并结合实时数据与历史数据实现对恶劣天气进行识别和预警;农昭光等[5]利用固定在道路旁的能见度检测仪、气象传感器、监控摄像机等设计了一套高速公路雾天智能诱导系统,通过能见度检测判断雾浓度等级来识别雾天;冯海霞等[6]发明了一套雾天道路预警系统,利用现有固定于道路上的摄像头,对固定标志物的亮区域和暗区域分别采集灰度值、对比度,进而对比标准数据库以判别雾天.上述这些雾天预警系统多以固定在道路旁的能见度检测仪或摄像装置来进行浓雾天气的识别,进而通过交通管理信息系统实现雾天预警,对于交通发达的城市和高速公路系统具有较好的实用性,然而对于交通管理或网络通信相对落后的偏远山村、山区等,其实用性将大大降低.因此一些车载雾天检测预警系统应运而生:赖政剑[7]采用发光二极管和光敏电阻结合单片机开发了一套随车移动雾天检测测试系统及安全预警方法,但是该系统的测试验证仅采用雾发生器制造“环境雾”,并未在真实雾天进行测试;徐梓恒[8]设计了一种雾天检测预警装置,通过车载固定摄像机获取驾驶场景信息,并通过算法实现二维场景转换为三维场景,进而计算能见度以识别薄雾、中雾和大雾,最后发出雾天预警,虽然该系统能够基于图像识别技术判断浓雾天能见度,但是还未见其硬件测试效果.
本文以车载应用为目标,结合DM642芯片研制基于图像处理的车载浓雾天气识别系统,并通过硬件测试检验系统的可行性和准确性,为车辆雾灯的智能化控制提供一套新的软硬件系统.
车载浓雾天气识别系统是通过行车记录仪/摄像头采集视频图像,并利用图像对当前天气状况进行判断,进而控制车辆雾灯的开启和关闭.
车载浓雾天气识别系统主要由2部分组成:1) 可用于视频图像分析和雾灯控制的硬件;2) 用于分析识别浓雾天气的软件.本研究选择在视频/图像处理领域具有广泛应用的TMS320DM642芯片(以下简称DM642)作为核心处理器.以DM642为核心处理器的开发板如图1所示.
图1 DM642为核心处理器的开发板Fig.1 Development board with DM642 as core processor
系统总体结构框图如图2所示,核心部分是嵌入在DM642中的雾天识别算法.在系统前端,使用TVP5150AM视频解码器将电荷耦合器件(CCD)摄像机采集的视频模拟信号转变为数字信号,并通过DM642对数字信号进行处理,输出格式为BT656.视频输出采用BT656数字输出功能,数字信号通过SAA7121视频数模转换芯片可将实时图像显示在屏幕上,方便观察摄像头视野.此外,试验利用开发板上的LED灯模拟雾灯.
图2 系统总体结构Fig.2 Overall system structure
系统软件操作流程如下:
1) 采集图像;
2) 将采集的YUV图像格式转换成RGB图像格式;
3) 计算RGB图像分类特征;
4) 将提取的特征值代入分类模型中,判断当前图像是否为浓雾天图像,若判断结果为浓雾天,则开启雾灯,若不是则继续采集图像;
5) 识别系统工作流程完成一个循环,进入下一个循环继续进行采集图像并识别.具体流程图如图3所示.
图3 系统软件流程图Fig.3 System software flow chart
根据暗通道先验理论[9],晴朗天图像除去天空区域,总存在至少一个灰度值趋于0的像素点,而雾天图像并没有此特点.浓雾天在画面上呈现出低对比度、色彩单一等特点.故本研究初选暗通道均值、对比度和灰度均值作为识别特征.
2.1.1 暗通道均值特征
暗通道均值D计算公式为
(1)
式中:Jdark(i,j)为暗通道图像[9]上像素点(i,j)处的灰度值;m为图像横向像素点个数;n为图像纵向像素点个数.
2.1.2 对比度特征
通常图像对比度的计算采用Michelson公式,但是由于该公式没有考虑图像噪点带来的影响,计算结果会产生较大误差,影响分类效果.为消除单像素点带来的误差,本研究把暗通道均值和亮通道均值引入Michelson公式,对比度C计算公式可以表示为
(2)
式中:L为亮通道均值.与暗通道均值类似,亮通道均值L计算公式为
(3)
式中,Ilight(i,j)为亮通道图像[10]上像素点(i,j)处的灰度值.
2.1.3 灰度均值特征
图像灰度均值反映的是图像明暗程度.灰度均值G计算公式为
(4)
式中,g(i,j)为灰度图像上像素点(i,j)处的灰度值.
支持向量机(Support Vector Machine,SVM)是一种用于分类或回归问题的有监督式学习算法,它适用于解决小样本分类问题,其在机器学习和模式识别中表现出色[11-12].SVM目的在于寻找最优超平面,将训练数据分成两类,而本文研究的是浓雾天识别问题,最终要求的识别结果是“浓雾天”或“非浓雾天”,因此可运用支持向量机来训练分类模型.
模型训练前需对样本数据进行划分:第1步将样本分为训练集和测试集两部分,训练集用作训练分类器,测试集用于检验分类器的泛化能力;第2步从训练集中划出小部分作为验证集,对模型的准确率进行评估.为消除验证集采样随机性带来的训练偏差,本研究采用交叉验证的统计学习方法.交叉验证有K折交叉验证、留一交叉验证、RLT(Repeated Learning Testing)交叉验证等多种形式[13].其中,10折交叉验证是最常用的测试方法,其主要思想是将训练集随机分成10份,将其中9份轮流作为训练数据,剩下1份作为验证集.验证集每次验证都会得到相应模型的准确率,把每次准确率的平均值作为最终训练模型的准确率,以评估当前模型的表现.10折交叉验证示意图如图4所示.
图4 10折交叉验证示意图Fig.4 Diagram of 10-fold cross validation
一般情况下,可通过增加特征的数量来提高训练分类器的准确率,但是更多的特征值会引入不相关特征信息反作用在分类器上,降低分类器的准确率.为得到最佳分类效果,本文将暗通道均值、对比度、灰度均值进行多种组合,根据准确率高低来选择最终的分类模型.
研究选取140幅样本图像进行测试,包括70幅浓雾天图像和70幅晴朗天图像.将样本图像分为训练集和测试集两部分,训练集100幅,测试集40幅.训练集和测试集中,晴、雾天图像的比例均为1∶1.从训练集中提取晴、雾天图像的暗通道均值、对比度和灰度均值,并根据不同组合,采用10折交叉验证对分类模型进行训练.具体模型训练示意图如图5所示.
图5 模型训练示意图Fig.5 Model training diagram
选择Matlab 2018自带的SVM工具箱对同一组数据进行训练,每次训练可以得到基于不同核函数的SVM模型的准确率.SVM工具箱自带的核函数包括线性核函数(Linear)、多项式核函数(包括Quadratic和Cubic)和高斯核函数(包括Fine Gaussian、Medium Gaussian和Coarse Gaussian).
以“暗通道均值+灰度均值”作为识别特征的训练结果如图6所示.图中左半部分是训练结果的SVM模型准确率,右半部分是训练数据散点图,图中显示暗通道均值和灰度均值数据是线性可分的.由不同特征组合得到的SVM模型准确率见表1.
为综合评价各特征参数组合的准确率,对全部含有不同核函数的SVM模型准确率取均值,得到平均准确率.由表1可知,暗通道均值和灰度均值的组合具有最高准确率97.5%.其中,Quadratic SVM模型和Linear SVM模型准确率最高可达99.0%.考虑到Linear SVM模型相比其他模型具有运算量小、简单等特点,且本次训练具有较高的准确率,故本研究选择暗通道均值和灰度均值组成的二维特征作为最佳识别特征,采用Linear SVM模型作为浓雾天识别模型.
为确定浓雾天识别算法的可行性和可靠性,通过仿真软件提取40幅测试集图像的暗通道均值和灰度均值,测试并验证Linear SVM模型的识别效果.所提取特征值见表2,前20幅为晴天图像,后20幅为雾天图像.
表2 40幅测试集图像在软件中的暗通道均值和灰度均值Table 2 Dark channel mean and gray scale mean of 40 test set images in software test
识别流程相关代码为
model=loadCompactModel(‘LinearModel.mat’);
Label=predict(model,testdata);
代码中,调用loadCompactModel可读取Linear SVM模型文件(.mat文件),并把结构体赋值给model;testdata数据(维度40×2)通过predict输入model中进行分类,Label输出标签值,即分类结果,识别流程图如图7所示.
图7 识别流程图Fig.7 Identification flow chart
测试结果见表3,识别准确率达95.0%,初步证明该算法具有一定的可行性.
表3 雾天识别算法在Matlab中的测试结果Table 3 Test results of fog recognition algorithm in Matlab
由于DM642存储的视频图像格式为YUV422,为使芯片能满足算法的需要,需将YUV422存储格式转换成RGB存储格式,YUV和RGB的关系式[14]为
(5)
DM642软件设计需要通过DSP集成开发软件Code Composer Studio(CCS)进行程序的调试、优化和移植.
从Matlab中训练导出的分类模型是整个识别算法的核心,能判断采集的图像是否为雾天,但是该分类器并不能被DM642直接使用.因此,浓雾天识别算法移植关键在于分类器的移植.为使Linear SVM模型能够移植到DM642上,需要对模型进行封装并转换成C语言.
分类模型封装函数为
function label=LinearModel(input);
Model=loadCompactModel(‘LinearModel.mat’);
Label=predict(model,input);
end
经封装后的函数文件(.m文件)通过Matlab coder模块,可转换成C/C++代码,并生成一系列头文件(.h文件)和函数文件(.c文件).将该程序文件全部添加到CCS工程文件中,并通过CCS将调试无误的算法程序加载到DSP中,即可实现算法移植.
为验证雾天识别算法在硬件上的可行性与正确性,在实验室现有条件基础上,开展模拟试验测试.测试设备包括:以DM642为核心的开发板,用于采集图像的CCD摄像头,用于显示摄像头视野的屏幕A,用于模拟行车天气状态的屏幕B,用于显示当前图像特征的屏幕C,用于调试开发板的仿真器,以及控制屏幕和连接仿真器的电脑.
整个车载浓雾天识别系统由开发板、屏幕A和摄像头3部分组成.屏幕B显示图像内容,由摄像头采集并输入至开发板中进行天气识别.当系统识别出雾天环境时开启LED指示灯,当识别出非雾天环境时关闭LED指示灯.系统测试过程中,配合CCS软件和仿真器对开发板的运行情况进行监控,可在屏幕C中观察当前图像特征值以及识别结果.测试设备的连接关系如图8所示.
图8 检测设备连接示意图Fig.8 Connection diagram of test equipments
系统测试过程如图9所示.图9(a)为测试系统整体结构,图9(b)和图9(c)分别为系统对晴天和雾天测试检验的案例.屏幕B在测试过程中依次播放40幅测试集图像,以模拟行车过程中车前方景象.车载浓雾天识别系统将对播放的40幅测试图像进行天气识别,识别结果以及图像的暗通道均值、灰度均值均可通过屏幕C观察得到.
图9 系统测试过程Fig.9 Test process of system
系统对40幅图像特征值的分析结果见表4.前20幅为晴天图像,后20幅为雾天图像.系统测试结果见表5.由表可见,系统的识别准确率达95.0%.对比软件测试结果,发现车载浓雾天识别系统对晴朗天图像的识别度较高.
表4 40幅测试集图像在硬件测试中的暗通道均值和灰度均值Table 4 Dark channel mean and gray scale mean for 40 test set images in hardware test
表5 雾天识别算法在DM642中的测试结果Table 5 Test results of fog recognition algorithm in DM642
比较表2和表4可知,在DM642上分析的暗通道均值和灰度均值要比在Matlab上的小,而雾天识别模型中的分类超平面不变,这使得浓雾天图像的特征值更靠近超平面,导致少部分数据“越界”被误判成晴朗天.造成软硬件分析误差的主要因素为:1) 摄像头对测试图像边缘区域很难完全采集,主要采集部分为图像正中范围,丢失部分图像信息;2) 屏幕B受到周围环境反光,容易影响摄像头采集效果.
与仿真过程相比,实际道路环境较为复杂,一些干扰因素可能会影响识别系统的实际识别效果.比如在拥挤或狭窄的城市道路上,车载摄像头视野容易被前车或其他障碍物遮挡从而影响系统的识别效果;而在较为宽畅的道路上,虽然也可能会出现被遮挡的情况,但是这种遮挡是暂时的.对此可采取每隔几秒钟采集一次图像的方式来降低遮挡带来的影响.此外,该识别系统还会受到逆光、强光或夜晚光线不足等情况影响.
本文以支持向量机作为机器学习算法,以“暗通道均值+灰度均值”作为特征参数组合,设计浓雾天识别算法,并结合DM642芯片、CCD摄像头和屏幕搭建一套车载浓雾天识别系统.通过模拟试验检验该浓雾天识别系统的可行性和正确性,结果显示,该系统对晴雾天识别的准确率可达95%,具有较好的识别效果.
研究的不足之处在于还未针对该系统开展车载试验,下一步工作将对该车载浓雾天气识别系统进行实车测试研究.