您的位置:首页 > 运维架构

车拍条件下交通标志实时识别

2017-02-26 19:05 246 查看
一、项目设计与实现

1.1总体设计简介

交通标志有着显著的颜色和形状特征,主要功能以指示、提示和警示为主。标志的意义:警告标志用于警告车辆、行人注意危险地点;禁令标志用于禁止或限制车辆、行人的交通行为;指示标志用于指示车辆、行人的行进;标志的颜色、形状特点:警告标志均为黄底、黑边、黑色图案;形状都为顶角向上的等边三角形;禁令标志大部为为白底,红圈、红杠、黑色图案,部分存在特例,如解除禁止超车、解除限制速度标志为白底、黑圈、黑杠、黑色图案;形状大部分为圆形(除了让路标志为顶角向下的等边三角形);指示标志颜色为蓝底、白色图案,形状为圆形和矩形。根据交通标志的以上特点,我们将图像中的目标进行颜色和形状的分割,在处理后加以匹配和识别。

项目总体分为三个部分,分别是目标提取、特征提取、识别。下面从这三个方面介绍如何实现。

目标提取:将目标进行颜色分割,分为红、黄、蓝三部分,使用二值去噪去除噪声,之后使用八临点去除杂质等方法实现形态处理,最后实现目标提取。流程图如下。


图1
特征提取:将目标提取出来之后需要进行特征提取,根据一般路标的形态与特征,我们将目标分为红色圆形、黄色三角形、蓝色圆形、蓝色矩形、红色三角形五种,分别进行提取,提取出来之后通过Zernike矩计算,提取八个Zernike不变矩。流程图如下。


图2
识别:提取出不变矩之后,根据前面目标的分类,分别进入红色圆形神经网络、黄色三角形神经网络、蓝色圆形神经网络、蓝色矩形神经网络、红色三角形神经网络等五个神经网络,运用最小欧式距离进行相似度比较,最终实现目标。流程图如下。


图3

1.2相关算法介绍

1.2.1  颜色分割算法
1.   基于RGB空间的分割算法
分析:我国的交通标志基本分为三种(警告标志、禁令标志、指示标志)共有三种颜色(红色表示禁令,黄色表示警告,蓝色表示指示)在RGB模型中,其各分量极易受光照的影响,各个分量间关联性较大,难以较好的分割各个颜色,但RGB空间运算量小,速度快。
(1)     三色差量法:
对于所研究图像的所有像素点:
如果(R-G)>0.08&&(R-B)>0.08那么是红色像素
如果(B-G)>0.01&&(B-R)>0.01那么是蓝色像素
如果(R-B)>0.12&&(G-B)>0.12那么是黄色像素
如果(是其它数值)那么是其它色彩像素。





 
经测试和实践,我们选择了基于RGB空间的三色差量改进分割算法
具体算法如下:在上述三色差量改进算法中,实践测试下,黄色及蓝色分割并不理想。于是我们提出蓝色和黄色增强分割算法。对于蓝色分割,在RGB分割的初步条件下,确定蓝色目标大概范围,然后在截取该范围进行HSV空间的增强分割。对于黄色部分的分割,目前大多数算法都不够理想,我们提出在黄色部分的基础上在进行黑色的检测。这样对于黄色三角形标志,由于黄色部分所占的比例并不是太大,检测中容易漏检。加上黄色边缘的黑色分割,可以增大标志面积,提高提取率。

1.2.2         目标检测算法

     对分割出的图像,进行轮廓提取。然后计算每个轮廓的外接矩形。初步通过矩形的大小、长宽比去掉一些小的目标。

1.2.3         形状分类算法

对于交通标志,一共有五类。即,红色圆形,红色三角形,蓝色圆形,蓝色矩形,黄色三角形。一般形状可以用几何特征、不变矩等方法分割。HU不变矩具有旋转、伸缩不变性。但要耗费一定时间计算HU不变矩。我们采用几何特征分类[5]

具体算法如下:

  对于每个待提取目标,计算出每个目标轮廓的外接矩形或外接圆形、轮廓包含面积、轮廓长度等特征进行区分

对于圆形

            rate =PI*radius*radius/(rect.area());

其中radius为目标外接圆形半径

         if (rate<0.8||rate>1.4)  判断为非圆形

              else 则为圆形

对于矩形

doublerarea=abs(contourArea(contour,true));//轮廓面积

doublerate_l,rate_s;

rate_l =lc/(2*(rect.width+rect.height));

rate_s =rarea/(rect.area());

其中lc为轮廓周长

if(rate_l<1.15&&rate_l>0.85&&rate_s<1.15&&rate_s>0.85)则为矩形

否则进行HSV空间提取,再用同样的条件选取目标。

对于三角形

double rate_s =2*abs(contourArea(contour,true))/(rect.area());

coun为轮廓

通过轮廓面积与外接矩形的比值确定

if (rate_s<0.75||rate_s>1.35)   判断为非三角形

否则为三角形

1.2.4         特征提取算法

图像特征一般有几何特征、不变矩特征通过提取zernike不变矩,考虑到时间,我们提取了8个zernike不变矩特征作为神经网络的输入。

1.2.5         目标识别算法

    目前识别算法主要有图片特征匹配、神经网络、支持SVM等 

我们选取了应用较为广泛的BP神经网络算法。

根据目标分类,共设计训练了5类BP神经网络

具体特征如下:

/*****************************************
BP ANN NAME:     innode     hidenode    outnode     

redcircle         8           12         6
redtri            8           6          2
bluecircle        8           10         5
bluerect          8           8          4
yellowtri         8           12        6
****************************************/
平台为OPENCV CVANN_MLP
神经网络;
1.3各模块设计与实现

  1.3.1 图像分割

在image_segmentation.h下
       //color division
void  
colordivision(Mat
rgbimage,Mat &redbw,Mat &yellowbw,Mat &bluebw );
void  
hsvdivision(const
Mat &src,Mat &division,int
whichcolor);
  1.3.2 目标提取

在image_segmentation.h下
//提取圆形、三角形、矩形标志
      void  
findCircleRegion(Mat&image ,Mat&bw,vector<
vector<Point>>
contours,vector<Rect> &signroi,bool
Isdrawrectangle);
void  
findRectangleRegion(Mat&image ,Mat&bw,vector<
vector<Point>>
contours,vector<Rect> &signroi,bool
Isdrawrectangle);
void  
findTriangleRegion(Mat&image ,Mat&bw,vector<
vector<Point>>
contours,vector<Rect> &signroi,bool
Isdrawrectangle);
1.3.3 特征提取

 在zernike.h目录小

         void
getZernikeMoment(const
Mat &src, double
Ze[8]);
1.3.4 神经网络识别

 在data目录下5个XML文件通过加载可以直接识别

        bpredcircle.load("data/redcircle.xml");
        bpredtri.load("data/redtri.xml");
        bpbluecircle.load("data/bluecircle.xml");
        bpbluerect.load("data/bluerect.xml");
        bpyellowtri.load("data/yellowtri.xml");



二、测试与分析

2.1数据来源与真实性

  由于并没有找到可靠地数据库资源,为了保证图片来源的广泛性和真实性,我们通过互联网搜集与路标相关的图片,比较具有代表性,且真实的反映出实际环境下的识别和检测效果。

2.2基本分类器实现效果

     
















 对于红色:红色比较容易分割,目标提取率较高

 对于蓝色:蓝色比较容易受环境的影响,比如天空的颜色,很容易干扰识别效果。

 对于黄色:黄色范围比较小,识别较为困难,若增大识别范围,很容易识别多余的目标,比如偏于黄色的树叶等环境物体。在整体光线不强的情况下,黄色也十分难以分割出来。

                             目标检测测试

类型
测试数量
正确检测数量
正确检测率
红色圆形
30
28
93.3%
红色三角形
10
8
80%
黄色三角形
30
26
86.7%
蓝色圆形
20
18
90%
蓝色矩形
20
18
90%
 

2.3识别效果

由于我们训练的数据有限,我们选取了10组红色圆形标志、10组黄色三角形标志、10组蓝色圆形标志、7组蓝色矩形标志、4组红色三角形标志。对于已经训练过的图片,可以正确识别,和训练图片环境接近的图片也可以识别出来。受于训练数据的影响,对于其他受环境影响较大,残缺不完整的交通标志,识别准确率不高,还必须进一步优化和提高。

                             识别测试

类型
测试数量
正确识别数量
正确识别率
红色圆形
30
25
83.3%
红色三角形
10
7
70%
黄色三角形
30
23
76.7%
蓝色圆形
20
16
80%
蓝色矩形
20
16
80%
 

2.4 实时性

  由于我们采用的RGB分割图像,减少了HSV浮点数运算的计算量,可以减小检测间,提高实时性。

       硬件平台:

      

软件平台:

 VS2010 +OPENCV 2.4.5实时性测试(图片没有归一化为640x480,仅供参考)

类型
图片大小
图片数量/张
平均时间/ms
红色
640x480~320x220
20
170
黄色
640x480~320x220
20
177
蓝色
640x480~320x220
20
160
混合
640x480~320x220
20
185
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息