关于交通标牌检测的博客和论文非常多,例如,本人最近在博客上就看到有一篇简单的交通标志检测与识别介绍文章《自动驾驶之眼——摄像头是如何认识交通标志的?》,该文很简洁明了地阐述了交通标志检测识别的主要流程。本文将结合上学期的课程设计,来整理一下交通标识牌检测与识别的思路与实现方法。
一、要求
首先要明确一下本文到底是要干什么。本文要完成基于视觉的交通标识牌检测与识别,说白了,就两个事:1)在一张图中找到交通标识牌在哪里(检测);2)认清楚这个标识牌是啥,表达的什么意思(识别)。那么最后得到的结果预览如下:
二、使用数据
交通标识牌种类数不胜数,我国的交通标志一共有一百余种,按类别可分为黄底黑边的警告标志、白底红圈的禁令标志、蓝底白字的指示标志,形状上以三角形、圆形和矩形为主。本文主要是为了介绍一下交通标识牌的识别流程和一些主要方法的实现,为了简化工作,本文挑选了以下五类交通标识牌。可以看出来,博主用心良苦,选择的交通标识牌具有很清楚的特征:1)颜色上,这五类交通标识牌的外边框都是红色的;2)形状上,标识牌都是标准的圆形。这事实上也表明了,交通标识牌具有着鲜明的特征,故无论是人眼还是机器,都较易识别。(其他种类的交通标志牌也是一样,利用形状和颜色特征来处理)
三、使用方法
在我看来,目前处理交通标牌识别的主要有两种方法,1)传统的图像处理+机器学习办法;2)最近很火的深度学习。那么本文采用的是前者,后者后续再进行介绍。
1>检测:颜色和形状。
交通标志牌为了起到其警示作用,在颜色和形状上都有着易区分性,如本文所讨论的五类标志牌,颜色特征为外框均为鲜艳的红色;形状特征为均为圆形。于是,检测的思路如下,最终得到了圆形部分的交通标牌:接下来,主要分为颜色分割和形状检测两部分进行讨论:
基于颜色分割的图像二值化处理:
最直观、简单的是利用RGB颜色空间来描述图像的色彩情况,但是,RGB色彩空间极易受到光线情况的影响,鲁棒性并不是很好,所以在相关论文中,你会发现,很少有人直接使用RGB色彩空间进行色彩分割。而实际上,本人拿有限的样本和测试集进行测试,RGB色彩分割效果在图像成像质量较理想的时候效果极佳,但是的确容易受到干扰。本文此处选择了HSI色彩空间模型进行色彩分割。先来点理论知识:
色调H(Hue):与光波的波长有关,它表示人的感官对不同颜色的感受,如红色、绿色、蓝色等,它也可表示一定范围的颜色,如暖色、冷色等。
饱和度S(Saturation):表示颜色的纯度,纯光谱色是完全饱和的,加入白光会稀释饱和度。饱和度越大,颜色看起来就会越鲜艳,反之亦然。
亮度I(Intensity):对应成像亮度和图像灰度,是颜色的明亮程度。
从理论上看,HSI色彩空间将饱和度和亮度信息独立了出来,这样一定程度上就降低了光线带来的影响。听上去很有道理,但是,实际上,这也仅仅是一定程度上降低了亮度和色彩的耦合关系,并不是完全地进行了解耦,所以,效果会有提升,但是很难带来质的改变(这是笔者自己的体验,也许是笔者能力不足,实现得不是很理想)
那么从RGB色彩空间转换到HSI空间的转换公式如下:
函数RGB2HSI是将RGB色彩空间转换到HSI色彩空间,其转换的过程参照式(2.2),最后将饱和度S和强度I均放大100倍,便于操作。 最后得到的H、 S、 I的取值范围分别为[0,