项目演示视频链接:
前言
随着我国经济的发展和人民生活水平的提高,汽车保有量不断增长,交通状况和出行环境也得以持续发展。道路信号灯作为指挥交通运行的关键设备,是维护交通秩序正常运行、保障车辆与行人的出行安全的基础支撑,也被称为不出声的“交通警察”。道路信号灯包括红色、绿色、黄色三种颜色,分别对应禁止、通行、警告三种指示,我们儿时就会背诵的交通口诀“红灯停、绿灯行、黄灯亮了等一等”正是对应了这三种信号灯颜色的安全规则。
考虑到红灯、绿灯、黄灯的颜色特点,以及彩色数字图像的R、G、B三通道构成,可采用颜色增强分割的方法,突出包含特定颜色的信号灯区域,进行信号灯的定位及识别。因此,本案例采用颜色显著度分析的思路,重点对道路信号灯图像的红、绿、黄三颜色进行增强分割,定位信号灯区域并分析内部的颜色分布情况,判断信号灯类别,最终给出图像内信号灯的位置标记及类型信息。
一、信号灯特征分析
GB14886—2006道路交通信号灯设置与安装规范提供了道路信号灯的安装方式、顺序、位置等权威标准,适用于日常生活中常见的道路信号灯的安装与维护。
道路信号灯根据颜色可以分为三类,红灯表示禁止通行;绿灯表示允许通行;黄灯表示警示或慢行。道路信号灯根据功能可以分为多种类别,按照信号灯是否包含图案,可分为两类,一类无图案,例如机动车信号灯、闪光警告信号灯等;另一类有图案,例如方向指示信号灯、掉头信号灯、非机动车信号灯、人行横道信号灯。
针对常见的机动车信号灯、方向指示信号灯进行实验,二者主要特点如下。
(1)机动车信号灯为圆形信号灯,由红、黄、绿三个位置间隔的图形单元组成,通过满屏的圆形信号进行交通指示。典型的圆形信号灯如图所示。
此处选择垂直方向的信号灯图例进行说明,信号灯的颜色按照红、黄、绿的顺序进行分布,呈现明显的颜色特征,可考虑选择颜色特征进行分析,定位信号灯所处的位置。
在RGB颜色空间,红绿蓝被称为三基色或三原色,且图像的每一种颜色都可以由红、绿、蓝三基色按照一定的比例构成,通过加色模式构成RGB颜色空间。为此,通过模拟加色过程来绘制三基色原理图,查看基本的红、绿、蓝构成的颜色分布,并观察生成颜色的互补色,关键代码如下所示。
运行程序后,可得到三基色原理图,如图6-3所示。其默认是黑色底图,通过R、G、B三基色的叠加生成了黄色、青色、品红色、白色,可以简要总结出如下的规律。
(1)白色=红色+绿色+蓝色;
(2)青色=蓝色+绿色;
(3)品红色=红色+蓝色;
(4)黄色=红色+绿色。
更进一步,观察颜色的对角线关系,可以发现黄色和蓝色呈现互补色的关系,即黄色+蓝色=白色,假设Y表示黄色,B表示蓝色,255表示白色,则可得到:
在RGB颜色空间,如果三通道的数值相等即R=G=B,则可视为灰度图,该数值也称为亮度值,将彩色图转为灰度图的过程称为图像灰度化,得到不包含颜色信息的图像矩阵。一般来说,可以采用计算三通道加权均值的方式来进行灰度化,通过对各个像素位置的R、G、B值做加权求和得到对应的亮度值。由于人眼对绿色通道敏感度高、红色通道敏感度次之、蓝色通道敏感度最低,所以加权系数c应该满足cG>cR>cB的约束。参考主流的图像灰度化计算公式,一般将加权系数设置为cR=0.229、cG=0.587、cB=0.114,进而得到符合人眼观察的灰度图像,具体公式如下:
为了突出红色、黄色、绿色的显著特性,对RGB图进行三通道提取得到R、G、B分量,并进行灰度化得到亮度图V。将提取R、G分量减去V获得红色、绿色的显著图,将B分量做补色并减去V的补色获得黄色的显著图,关键代码如下:
分别对红、黄、绿的示例图进行实验,将原图和对应的显著图进行汇总显示,结果如图6-5所示。分别计算红灯、黄灯、绿灯的显著图,并对结果图进行对比度增强显示,可以发现采用简单的颜色分量差分计算,可以有效突出颜色显著度,有助于快速准确定位出红灯、黄灯、绿灯的候选区域。
二、信号灯检测识别
根据道路信号灯的颜色特点,可采用显著图增强的思路提高信号灯区域对比度,通过二值化分割及形态学后处理进行信号灯检测,最后可结合信号灯区域的颜色特征进行分类识别。
1.信号灯检测
从图6-5可以看出,经过红色、黄色、绿色的显著增强后,信号灯区域呈现明显的亮度特点,比较简单的方法就是直接进行二值化分割得到信号灯候选区域,再通过形态学闭合及膨胀操作进行一定的区域拓展,进行信号灯的检测定位,关键代码如下所示。
考虑到实验图例均为单信号灯,所以此段程序采用otsu阈值分割方法进行二值化,通过imclose进行区域闭合并经bwareafilt保留最大面积区域,最后通过imdilate进行区域膨胀,得到拓展后的信号灯位置。下面对前面选择的三幅圆形信号灯示例图,再增加一幅箭头信号灯示意图进行实验,将检测到的信号灯位置进行标记可视化,具体效果如图所示。
对图像进行颜色显著度增强,再进行二值化分割及形态学膨胀,可获得信号灯的区域对应关系,最后提取区域矩形框并标记可视化,实验表明此流程能准确定位信号灯区域,实现信号灯检测的目标。
2.信号灯识别
信号灯区域检测定位后,可裁剪信号灯区域,得到局部图进行分类识别。考虑到信号灯的颜色特性,结合圆形信号灯、箭头信号灯的区域特点,可选择局部图的颜色量化计数及圆形度属性来进行分类识别。
1)颜色量化计数。参考前面提到的红、黄、绿颜色显著度增强过程,可对信号灯局部图做同样的计算,统计红、黄、绿颜色显著图二值化后的有效像素数量,提取最多的计数结果作为颜色类别的判断依据,关键代码如下。
此段程序重复了红、黄、绿颜色显著增强的过程,对处理结果进行二值化并统计有效像素的数量,最终提取最多的颜色作为识别结果。
(2)圆形度常用于衡量区域的属性特征,根据圆形信号灯、箭头信号灯的特点,可选择圆形度作为二者分类的参考依据。其中,圆形度的计算公式如下:
其中,Area表示区域的面积;perimeter表示区域的周长。当区域为圆形时,则圆形度与1的绝对值差异最小,其他图形时圆形度与1的绝对值差异越大。因此,可以通过信号灯区域的圆形度属性来判断其所属的圆形、箭头形状类别。在MATLAB中,可以通过regionprops的Circularity属性直接提取区域的圆形度属性,关键代码如下。
此段程序裁剪信号的局部区域,并提取圆形度属性,若圆形度与1的绝对值差异小于0.1,则认为是圆形信号灯,否则为箭头信号灯。
(3)箭头朝向。针对箭头形状的信号灯,还需进一步识别其朝向信息,根据道路交通灯设计标准,箭头朝向有“上、左、右”三种,结合箭头信号灯的对称性特点,可采用网格对称分割的思路进行朝向的判断,具体如图所示。
对不同朝向的箭头,按照上下拆分、左右拆分,计算上下白色像素比例、左右像素比例,提取最大比例对应的形状即可识别其朝向,关键代码如下所示。
此段程序裁剪信号的局部区域,并按照上下、左右拆分,计算上下、左右、右左的有效像素比例,最终提取最大比例对应的朝向作为识别结果。
综合本节的叙述,下面融合信号灯检测、识别的步骤,检测目标信号灯的位置并识别其形状信息,运行效果如图所示。
对图像进行信号灯检测及识别,可获取信号灯位置矩形框及形状信息,最后对信号灯区域进行标记可视化。实验表明此流程能准确定位信号灯区域,识别信号灯的类别,实现信号灯检测识别的目标。更进一步,可对多信号灯的情形进行连通域分析,并按照子区域裁剪的方式进行类似的处理,即可拓展到多信号灯的检测识别应用。
三、系统设计
为了更好地集成对比不同步骤的处理效果,贯通整体的处理流程,本案例开发了一个GUI界面,集成图像读取、颜色显著增强、信号灯检测、信号灯识别等关键步骤,并显示处理过程中产生的中间结果图像。其中,集成应用的界面设计如图所示:
单击“图像读取”按钮可弹出文件选择对话框,可选择道路信号灯图像并显示到右侧窗口;单击“颜色显著增强”按钮,可以分别对红、黄、绿颜色进行显著增强,并在右侧窗口汇总显示。为了验证处理流程的有效性,选择多信号灯的图像进行实验,具体效果如图所示。此实验图的红色、绿色显著图最为明显,可进行二值化检测标记。
单击“信号灯检测”按钮,将在右侧窗口显示二值化图、区域标记结果和区域裁剪图。信号灯检测模块可定位标记信号灯区域,并裁剪信号灯局部图像,进行汇集显示。
单击“信号灯识别”按钮,将对已定位的信号灯区域图像进行分类识别,判断信号灯的类型,在右侧窗口显示识别结果。信号灯识别模块可对定位出的信号灯区域进行分类识别,此实验图像三个信号灯的颜色及形状信息识别为“左绿-箭头-左|红-圆|红-圆|”,并将其作为标题信息在最后一个坐标系窗口进行显示。
最后,单击“信号灯导出”按钮,可将此实验图像的基本信息、信号灯位置和类型进行汇总,导入Excel表格。导出数据包含了图像路径、信号灯数目、信号灯位置和形状信息,对应了当前实验图像的检测识别结果,读者可以尝试其他的图像进行实验分析,也可自定义导出数据的内容格式,进行实验拓展。
总结
随着人工智能技术的不断发展,智能驾驶特别是无人驾驶技术创新也得以大幅进步,道路信号灯的检测识别作为重要的组成部分,也产生了越来越多的研究成果。考虑到数据规模和基础算法应用的要求,本案例采用颜色分割知识进行信号灯检测,采用颜色统计及图形属性信息进行信号灯的识别,能够快速定位信号灯并判别其颜色和类型,基于GUI框架搭建了道路交通信号灯检测识别的集成应用,可方便观察各个步骤的处理过程并展开分析。