基于OpenCV的车牌识别—车牌定位

时间:2021-03-14 14:27:53

本来一直想写点自己在做车牌识别的经历,但感觉没有必要。感觉这个东西大把的有。但是我自己在学习汇报的时候思路是混乱的。故我自己想借此机会整理一下自己的思路。更准确的说的留下自己一些想法和问题。我在初学阶段是根据那本《深入理解OpenCV—实用计算机视觉项目解析》来的,但是当时由于C++和OpenCV的程序功底不行,也只是初略的看了一下。书本随带的代码,我是没有跑出来。我估计大部分读者应该跟我一下,并没有将程序实现。我在网上找到了类似的程序,然后在他的程序进行了修改。原论坛的程序也仅仅只能将自带的图片识别出来,大多情况下是调试出现BUG。

原先的程序在车牌定位这一块,采用的是“经验值”的方法。将原始图像RGB模型转换成HSV模型(好像后面并没有什么用),经过预处理之后(中值滤波等等),然后利用sobel 算子检验出X轴方向的水平特性轮廓得到Sobel_image。同时采用Canny算子在HSV的原图的第二通道上检测轮廓得出Canny_image。同时也在基于RGB模型的原始图像上采用sobel 算子。其次三张图片都使用Otsu二值化、形态学闭运算(填补白色区域的间隙)等等。接下来将三者的图像进行对比,将三张图片依次对比,通过重叠区域阈值,选取出最好的一张图片做为后期处理的图片。采用轮廓函数提取出最外层的轮廓,并计算最小外接矩阵的大小,依次将这些备选区域送入验证函数,筛选出接近车牌的大小。经过初步的筛选,已经将大部分非车牌区域筛选掉。最后使用SVM判断候选区域是否为车牌区域并输出结果。

 

为什么说是“经验值”的方法,这个程序很大的问题在于将三者图像进行重叠区域筛选时,有可能会将真正的有信息的图像筛选出去。换句话来说就是没有任何依据,可以根据重叠区域(某个阈值)来进筛选。但是原作者还是做很大量的工作。

 

言归正传,作者根据湖大的一篇论文—《基于车牌OpenCV的快速车牌定位的研究和实现》,文章中提出将RGB模型转化成HSV模型,且根据蓝色在HSV在的区域每个通道的取值范围将此作为阈值,提取出图片中蓝色部分作为备选区域。这样有效提高了车牌和车色颜色在不相差较大的情况下的识别率。但是同时存在一个问题,那么蓝色的车和蓝色的牌照呢?这个确实是一个该算法的致命问题。作者将本文的方法和上述方法对比得出这样解决办法。将两者相结合,先用本文的方法进行测试,如果可以得出的结果当然是最好的,但是得不出结果,则采用上述的文章的类似的方法,但仅仅在RGB模型的原图进行Sobel算子,经过预处理得出后期处理的图片。这里的预处理过程中与原图的单个处理,大径相同只有些许变化。本文也没有很好的解决这个问题。故此希望在以后学习之中会有更好的方法解决这个问题。

其系统结构图如下:

基于OpenCV的车牌识别—车牌定位

 

 

下面作者要解释一下为什么要保留验证函数,验证函数是根据车牌在图片大小和车牌规格的宽高比例设定的。这样做无遗对备选区域筛选的很严格。同时减少了后面SVM的工作量,前期的验证过程之中,可以减少大量的非车牌备选区域。但是同时带来的问题就是对图片的“质量”要求较高。这里的质量要求较高时指的因为验证函数中限定条件之中车牌的像素必须在30*3.14*30和180*3.14*180之间且车牌宽高之比在3-4之间。这已经将车牌的要求放的很松了,如果还继续放宽条件,这个验证函数将失去意义。作者之所以想保留验证函数,因为作者的SVM二类分类器

1.      正负样本过少,SVM还未能完全将车牌区域和非车牌区域分离出来。

2.      SVM采取的特征仅仅是将车牌的灰度值作为特征向量进行训练,这个方法本身就有问题。作者本来是想用HOG+SVM判断的,但是由于其它原因没有加入。

3.      作者在想做一个车牌识别肯定是有自己应用的场合。没有必要将各种类型的生活照中的车牌识别出来。这样做无疑是将自己陷入困境。顾此这个验证函数是很有必要性。

好了,现在我解释完了为什么要保留验证函数。

 

下面介绍SVM,这是一个二分类的问题,在OpenCV中确实有几个模型可供选择,但其中CV_SVM::RBF 和SVM::LinerAR对二分类有较好的效果。前者是基于径向的函数,后者是线性划--分没有任何方向的映射。使用CV_SVM::RBF

模型的参数很重要,由于作者个人比较不喜欢调节参数,而且感觉对于简单的二分类的问题SVM::LinerAR可以解决。对于那些想用CV_SVM::RBF ,OpenCV中有一个Autotrain的训练函数。作者在使用过程中也遇到麻烦,直至现在也没有解决。

 

对于为什么训练样本的正负样本过少,作者只能说因为是程序直接将灰度像素提取作为特征向量,故它的鲁棒性(适应性)不强,这也是作者为什么考虑要加入HOG特征作为特征向量。HOG+SVM在训练车牌为正负样本为500时,其准确已经能达到了91.3%。后来作者没有使用也有其他的原因。下面附带了程序代码,可以参考学习!


          http://download.csdn.net/detail/chengchaopeng520/9785121