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

一、项目设计与实现

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



  • 13
    点赞
  • 52
    收藏
    觉得还不错? 一键收藏
  • 36
    评论
评论 36
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值