交通标志牌的检测与识别


转载请注明: http://blog.csdn.net/wchccy?viewmode=contents


             Driver Assistance System已经成为学术研究的一大领域,作为智能交通的一部分,有大量研究人员投身其中,每年都会有大量的成果发表在IEEE trans on intelligent transportation system等顶级期刊,会议上。有些成熟技术甚至已走出学术界,应用于工业界,如福特公司的自动刹车系统,Google 的无人驾驶汽车,而 Mobileye 甚至已将其固化为车载芯片,并占有大部分的高档车市场份额。

    近来跟随师兄也在探究此方面的发展,并努力实现自己的系统。

    这里首先是对于交通路牌的识别:大部分交通路牌可以分为两部分:

                                                 

交通标志牌的检测与识别_第1张图片 交通标志牌的检测与识别_第2张图片
   

                                                                red    circular   sign                                                                   blue  rectangular sign

        由于其外形规则,图案单一,因此在这里我主要采用rule-based method,而非机器学习(当然,也是因为机器学习实验失败了)。由于要检测的物体局限于红色和蓝色,因此在这里我们利用其颜色信息,于Jack Greenhalgh and Majid Mirmehdi 的 Real-Time Detectionand Recognition of Road Traffic Signs   IEEE TRANSACTIONSON INTELLIGENT TRANSPORTATION SYSTEMS, VOL. 13, NO. 4, DECEMBER 2012这篇paper,遍历所有像素点,成功将蓝色及红色区域变的比背景更亮。

                 

交通标志牌的检测与识别_第3张图片 交通标志牌的检测与识别_第4张图片
交通标志牌的检测与识别_第5张图片 交通标志牌的检测与识别_第6张图片

 

       在这之后,我利用hough circle transformation 以及 contour contourpolygonization,成功分割出相应区域,效果较好,但逐像素计算效率低下,对一张图的检测时间的70%都花在了像素处理上,所以准备最近看一看opencv的灰度转换源码,提升效率,争取达到实时性。

   在这之后,好学的博主怎会就此终止,于是有了下面的识别部分,这也是博主第一次接触pattern recognition,虽然内容很简单……

   首先将识别对象局限于红色圆形的限速标志,(指路牌的识别,博主是不敢想的,中文字符,分布不对则,想想就头痛)。于是博主开始了艰辛的旅程:首先想到的是最简单的模板匹配,但模板匹配要求template与target大小一致,思索良久,受当初看haar检测目标的源码启示,我将待检测图像以一定比例不断缩放,然后用template作为搜索框在待检测图像范围内进行移动匹配,根据归一化平方差公式计算得到最小的值即为匹配。

   模板:      (尺寸统一,这里采用双数,而非单个数字是因为单个数字虽然检测更准,但结果只能得到一个数字,暂时还未想到如何找到里面的两个数字);

   下表左侧为测试图片,右侧为6个模板与图像的最小平方差:

交通标志牌的检测与识别_第7张图片交通标志牌的检测与识别_第8张图片
交通标志牌的检测与识别_第9张图片交通标志牌的检测与识别_第10张图片
交通标志牌的检测与识别_第11张图片交通标志牌的检测与识别_第12张图片
交通标志牌的检测与识别_第13张图片交通标志牌的检测与识别_第14张图片
                                交通标志牌的检测与识别_第15张图片
交通标志牌的检测与识别_第16张图片交通标志牌的检测与识别_第17张图片
        由此表看出,检测结果较好,只有最后一幅图的检测错误。之后我仔细思索了错误原因,发现两点如下:

  (1)待测图像经过压缩后长宽比失调,其标志牌高度大于宽度,因此检测出现错误,这并非方法的问题;

  (2)“15”是一个奇特的标志,两数字之间的空白区域大小不一,如图:      

  

交通标志牌的检测与识别_第18张图片交通标志牌的检测与识别_第19张图片

   因此,检测15的时候常有偏差,还真是不太清楚如何解决这个问题呀,也许只能把两种15都放入模板库中。

   在成功识别出这些标示牌之后,一个新的问题出现了,就是红色圆形标志不仅包括限速标志,还有一些其他的诸如禁止通行,禁止鸣笛等标志,那么这些标志的出现超出了我们预期的简单环境,在此介绍一种博主自己想出来的方法:

   1.我们观察上面表格里的实验数据,将每一组数据的方差值取均值得到六组均值分别为(10^6):

    

1.31 1.20 1.28 1.08 1.07 1.23

   

   2.当将测试图片替换为非限速标志,其得到的数据如下:

交通标志牌的检测与识别_第20张图片交通标志牌的检测与识别_第21张图片
交通标志牌的检测与识别_第22张图片交通标志牌的检测与识别_第23张图片
交通标志牌的检测与识别_第24张图片交通标志牌的检测与识别_第25张图片

  3.如上表所示:三组的平方差均值分别为(10^6):

1.71 1.64 1.82

    4.因此可见:限速标志牌与非限速标志牌的平方差均值在不同的两个结果集里,前者<1.4,后者>1.6,由此我们可以得到区分二者的阈值,i.e, 1.4

    到此我们对于交通标志牌的检测以及简单识别就告一段落了,在现有的少量待测数据面前,其结果不错,至于鲁棒性受角度及光照的影响还需要大量数据进行检测及改进。

    PS:在此之前,我曾试着用sift以及surf进行识别,但大概是因为图案过于简单,导致极值点很少,而match的特征点更少,因而放弃。


转载请注明: http://blog.csdn.net/wchccy?viewmode=contents


        

你可能感兴趣的:(CV)