童 刚,朱鸿博
(青岛科技大学 自动化与电子工程学院,山东 青岛266042)
随着我国经济的快速发展,各个城市的机动车辆数量迅速增加,道路交通也随之日益复杂,交通指挥系统所承受的压力越来越大。红绿灯多处于交通枢纽地带,负责指挥交通,因此红绿灯的识别显得尤为重要。然而有些驾驶员因疲劳或其他原因而未能及时注意到红绿灯的变化,从而酿成诸多惨剧。本文通过图像处理及颜色判别而设计的红绿灯自主识别系统可以提醒驾驶员注意红绿灯变化,继而有望降低事故发生率。
图1 系统流程示意图
本系统设计主要由图像采集、图像预处理、红绿灯定位、颜色判别及输出显示等模块组成,如图1所示。首先用安装在车顶或车内的摄像机对前方场景进行实时图像采集。由于摄像机跟随车辆一起运动,因此采集到的图像难免会产生一些噪声,这就需要进行图像预处理,以便于之后的目标提取。设计编码程序从采集到的图像中定位提取出红绿灯的位置,再定位出各个灯的坐标,然后对提取的目标进行颜色判定,将结果通过显示器输出。结果输出可以多元化,例如可以用数字显示器表示各个灯的颜色,也可以用声音提醒;若在颜色判定的同时进行数字读取,还可以实现红绿灯倒计时报时提醒。由于数字是实时变化的,因此数字提取涉及的条件较复杂且成功率尚未达到要求,本文暂且不对此模块做研究。
图像采集需要在车顶或车内前方安装一款摄像机,对汽车前方进行实时图像采集。摄像机选择条件是像素高、处理速度快、价格便宜。经过综合考虑,车载摄像机需要符合的各方面要求及部分规格数据如下:
(1)带彩色显示屏车载录像仪,可即录即看;
(2)镜头角度:90°;
(3)感光芯片:1/4 color CMOS;
(4)拍摄像素:1 280×720/720×480/640×480 pixels;
(5)拍摄文件格式:录像 AVI格式,拍照 JPG格式,可连接电脑或在导航仪、手机等设备上即时播放;
(6)支持帧率调节以节省空间或录制最优质图像功能;
(7)支持 SD/SDHC/MMC卡存储拍摄,支持 32 GB存储卡;
(8)带有数字化部件,可以直接将数字图像通过计算机端口(如并口、USB接口)或标准设备(如磁盘驱动器)传送给计算机。
图像采集之后,通过摄像机固有的模数转换部件完成图像数字化,通过端口输入微处理器。
因为摄像头是随汽车运动的,因此采集到的图像难免会出现边缘模糊。另外由于空气状况、日照变化、电磁等干扰,再加上图像采集过程中会受到噪声的影响,会使采集到的图像变得模糊,如图2所示,因此图像采集完毕后需要进行图像预处理。
对于随即干扰所产生的椒盐噪声可以用中值滤波处理[1]。图3为图2所示图像经中值滤波后的效果图。中值滤波是一种局部平均平滑技术,对于脉冲干扰和椒盐的抑制效果较好。其滤波原理是:对一个滑动的窗口内的诸像素灰度排序,用其中值代替窗口中心像素(x,y)原来的灰度,若窗口中的像素有偶数个,则取两个中间值的平均。
对于图像边缘模糊问题可以用高通滤波方法处理。图像中的边沿或线条与图像频谱中的高频分量相对应,因此可以用高通滤波的方法使低频分量得到抑制,从而增强高频分量使图像边沿或线条变得清晰[1]。理想高通滤波器的转移函数为:
图像预处理完毕后进入目标定位阶段,需要在整幅图像中定位出目标(即红绿灯),并标记出各个灯的位置。由于现实中图像背景复杂,光照不均匀,因此在采集到的图片中准确地定位红绿灯的出现是整个系统的前提。
事先对红绿灯进行特征设定,红绿灯特征之一是:版面多为黑色,即颜色较深,灰度值较低;另一特征是大多数红绿灯外形固定,分横竖两种(本文以横着的红绿灯作为说明,竖着的类同),可以用训练与学习的方法,先搜集一些红绿灯样本,进行特征标记[2]后存入训练集,捕捉到待确定目标后与样本对比,相似度达到一定程度即认为是目标。对于样品的特征设定有多种方法,这里介绍一种简单的模板法[3]。首先框定样品的宽度和高度,对样品进行二值化和边缘提取,再将样品的长度和宽度N等分,构成一个N×N均匀小区域,对于每一个小区域内的黑像素个数进行统计,除以该小区域的面积总数,所得值超过一个阈值标定为1,未超过的小区域标定为0,如图4所示。这样做的好处是针对同一形状、不同大小的样品得到的特征值相差不大,有能力对同一形状、不同大小的样品视为同类。这样不论摄像机距离物体远近都可以识别物体。
执行时先对采集到的图像进行大范围相关搜索,由于红绿灯外框基本为黑色,灰度值变化不大,用边缘跟踪[4]的方法寻找出红绿灯外围边框,结果如图5所示。边缘跟踪从起始点开始跟踪,直到跟踪的后续点回到起始点。边缘跟踪方法的基本原理是:确定一个灰度值较低的像素作为起始点,从左上角0点方向开始跟踪,即用0点方向的邻近像素与起始点比较,若灰度值相差不大,则视为同一物体,把此点作为新的起始点,将跟踪方向逆转90°作为新的跟踪方向继续跟踪;若灰度值与起始点相差很大,则认为不是同一物体,将跟踪方向顺时针旋转45°,沿新的跟踪方向继续跟踪。重复上述方法,直到检测点回到最开始的检测点为止,此时将跟踪圈定的目标定位待确定目标。确定待确定目标后对其进行二值化与边缘提取,再与样本训练集里的样本做比较。相似度超过一个阈值则认为是目标,记录目标像素坐标。若相似度小于阈值,则认为是非目标。确定出红绿灯位置后继续与样本对比,确定出各个灯的位置。
具体流程如下:
(1)对训练集中的样本进行特征提取并存储。
(2)对预处理后的图像做搜索,用边界跟踪的方法圈定类目标物体。
(3)将圈定的物体与样本集里的样本做比较,相似度超过一定阈值则认为是目标。将目标像素坐标标定存储。
(4)通过与样本目标对比,标定出各个灯的位置并标记存储坐标。
流程如图6所示。
图6 目标定位流程图
根据德国物理学家赫姆霍兹(Helinholtz)的三原色理论[5]可知,各种颜色是由不同比例的三原色混合而成的,也就是说数字图像中色彩是由R、G、B三个基本色组成的,被称为是与设备相关的色彩空间。其中红、绿可以组成黄色;蓝、绿组成青色;红、蓝组成品红色[6]。由此可以根据图像中各个灯所在位置像素的R、G、B分量来判断灯的颜色。具体实现方法如下:首先读入像素地址并标定起始像素坐标,从上到下、自左而右地逐个判别该像素的颜色。比较各像素的颜色分量:若R〉G+B,此像素为红色,红色像素数量加 1,总像素数量加 1;若 G〉R+B,此像素为绿色,绿色像素数量加 1,总像素数量加 1;若R、G分量大致相等且大于阈值T1,则此灯为黄色,黄色像素数量加 1,总像素数量加1;若以上情况都不是,此像素未亮,总像素数量加1。然后计算各色像素与总像素的比值,通过比较得出比值最大者。最后判断最大的比值是否大于阈值T2,若大于则此灯颜色为比值最大的量,否则认为此灯未亮。
具体实现流程如图7所示。
图7 颜色判别流程图
对于输出,可以选择一种点阵LCD显示器,根据辨别结果分别在相应的位置输出“红”、“绿”、“黄”等字眼。另外可以连接上警铃,当红灯出现时发出声音提醒车主注意。
[1]杨枝灵,王开.Visual C++数字图象获取处理及实践应用[M].北京:人民邮电出版社,2003:175-190.
[2]李志清,施智平,李志新,等.结构相似度稀疏编码及其图像特征提取[J].模式识别与人工智能,2010,23(1):12-19.
[3]杨淑莹,李兰友.图像模式识别—VC++技术实现[M].北京:清华大学出版社,2005:37-52.
[4]周宁宁,赵正旭,翁素文.图像的中介边缘检测方法[J].中国图象图形学报,2010,15(3):36-42.
[5]薛朝华.颜色科学与计算机测色配色实用技术[M].北京:化学工业出版社,2004:90-112.
[6]綦科,张大方,谢冬青.基于颜色梯度特性的彩色图像隐写分析[J].通信学报,2011,32(1):23-27.