基于Opencv的车牌识别工具研究与实现 下载本文

内容发布更新时间 : 2024/4/28 2:12:51星期一 下面是文章的全部内容请认真阅读。

三江学院2014届本科生毕业设计(论文)

样本来进行训练,实现机器学习,样本数量的多少,决定了算法识别率的高低和算法的稳定性好坏。当在该算法之中,网络中输入数据的选择和网络结构以及参数优化很好的时候,该算法性能将会很优越。该方法具有非常好的分类能力,在实际的系统应用也比较多。

(2)模板匹配字符识别算法[16]:提取字符特有的性质和模板库相比对,找出彼此最接近的比较结果作为最终识别结果。

(3)统计特征算法[17][18]:顾名思义统计计算出字符特征设计分类器,但是字符本身难于分辨使该方法在实际应用中很难实现,有待详细的分析和研究探索。

本文对字符进行提取主要采用模板匹配法。它是字符识别中相对简单的处理方法,虽然准备工作比较繁琐,但该方法实现容易。

2.4本章小结

本章简要介绍OpenCV计算机视觉库,接着介绍车牌识别技术与车牌定位、字符分割和字符识别一些常用的算法。

7

三江学院2014届本科生毕业设计(论文)

第3章 车牌识别软件的总体设计

3.1 需求概述

结合汽车牌识别的一般过程,该软件能够实现以下一些功能:

(1)友好的用户界面:用户结合软件界面中的按钮和图像手动操作,按照既定车牌识别程序来执行实现,简单明了。

(2)车牌预处理:用一定的车牌图像输入处理算法,找到车牌定位。 (3)车牌定位:本软件采用基于车牌图像先验知识,对经过初步处理(二值化)后的图片,进行扫描统计,并暂存在一个数组中,然后根据数组值确定车牌的边界,最终车牌区域定位分割下来。

(4)字符分割:对定位到的车牌图片进行归一化处理便于和模板进行匹配识别,从而提高识别得出正确的结果。

(5)字符识别:识别分割字符,然后识别结果输出到屏幕上。

3.2 软件总体结构设计

根据整个软件的需求,将车牌识别工具通过4个模块来实现,划分成图像预处理模块、车牌定位模块、字符分割模块和字符识别模块,如图3-1所示。

图像灰度化图像预处理边缘检测图像二值化水平分割车牌定位车牌识别系统字符分割垂直分割车牌归一化垂直投影字符定位字符分割提取特征字符识别模板匹配识别结果 图3-1 车牌识别工具总体结构

其中:

(1)图像预处理部分,负责对拍摄的包含车牌信息的图片进行预处理。 (2)车牌定位部分,负责对预处理之后的图像,根据车牌共有的区域特征采取一定的算法,进一步识别定位车牌区域。

(3)字符分割部分,负责对已经确定区域的车牌,把车牌图像中的字符一个

8

三江学院2014届本科生毕业设计(论文)

个切分开,并把每一个字符保存为单个字符图像。

(4)字符识别部分,负责通过模板匹配算法,对每个字符图像进行字符识别。

3.3车牌识别的工作流程

对已采集的车牌图像进行处理,最终准确、快速地识别出车牌。总体工作流程如图3-2所示。

开始已采集到的图像字符个数是否是7图像预处理Y字符识别车牌定位识别结果保存与输出N判断是否为标准字符结束Y字符分割

图3-2 车牌识别的工作流程图

(1)图像预处理:对收集到的车牌图像进行灰度化处理,接着用 Canny 算子对图像进行边界检测,最后取自适应阈值二值化图像,来提高正确识别率。

(2)车牌定位:分割预处理之后的车牌边界,获得准确的车牌区域,再保存成统一大小。

(3)字符分割:对已经定位分割好的车牌区域进行垂直投影,获取字符信息;然后进行字符定位;最后将字符分割开来,保存为单个的字符图像。

(4)字符识别:提取出分割好的字符的特征值,将提取的特征值与模板比较,显示出识别的结果,并加以保存。

(5)输出结果保存在数组中,识别结束。

3.4本章小结

本章对本软件的功能模块设计进行了简要分析,并介绍了该软件的需求、总体结构和工作流程。

9

三江学院2014届本科生毕业设计(论文)

第4章 车牌识别技术实现

4.1车牌图像预处理技术 4.1.1图像预处理

由于车牌图像在拍摄时,会受到光照、障碍物、拍摄角度、摄像设备等的影响,图像中会产生较多与车牌无关的图像数据,造成噪声,这会大大地影响车牌的识别效果,所以必须对要识别的图像进行预处理,去除掉这些噪声干扰。本文通过对图像灰度化、二值化、边缘检测来去除车牌中的干扰数据,提高车牌识别效果。 (1)灰度化

数字图像分为彩色图像和灰度图像[19]。在RGB模式,当R=G =B,一个灰色的颜色表示,其中R值=G=B称为灰度值[20],通常使用G表示。图像灰度化就是把彩色的变换为灰色的。由于彩色图像占用大量的存储空间,为了加快处理速度,需要对彩色图像和灰度图像之间进行互相变换。

在OpenCV库函数中,利用cvCvtColor函数来处理灰度转换。该函数原型如下[21]:cvCvtColor(const CvArr*src,const CvArr*dst,int code)其中SRC是一个8位图像输入,8位图像输出DST,code表示颜色的空间模型,定义为CV_BGR2GRAY表示将源图像转换成灰度图的格式。图像灰度处理如图4-1(a)(b)。

(a)车牌原始图像 (b)车牌灰度化以后图像

图4-1 图像灰度处理示意图

经过了灰度化处理后,减小计算量提高了图像处理效率,能够满足车牌定位的实时性和精确性的要求。 (2)边缘检测

边缘检测通过边界分析的方法致力于图像的提取分割,分割效果取决于算子的使用。比如Canny算子[22]能够找到要检测图像的边界,同时将其他的干扰排除。在OpenCV库函数中,Canny边缘检测算法的函数为cvCanny[23]函数。

(3)基于灰度图像的二值化

找出适中的阈值是二值化图像的关键,灰度图像二值化就是进一步确定这个值。如果确定的像素灰度值小于找到的阈值,那么就把此像素的灰度值设为0,相反设为255。设最初灰度图像为f(x,y),转换后的二值图像为g(x,y),则二值化的过程可表示如公式4-1所示[24]:

10

三江学院2014届本科生毕业设计(论文)

?255,f?x,y??t g?x,y????0,f?x,y??t图4-1 二值化公式

经过二值化以后的车牌比原车牌变得更清晰更容易识别。处理结果如图4-2:

(a)二值化之前的灰度图像

(b)二值化以后的图像 图4-2 二值化前后对比图

整个过程使用函数:Void CMyDialog::Threshold (IplPic * Subs, IplPic *Pic_O); 该函数先对图像进行二值化处理,然后再进行Canny边缘检测。 部分代码如下:

// 最大灰度、最小灰度值获取

if(CV_Pic_Subs(Pic,func,j,i)>thresMax) //像素值比255大 thresMax=CV_Pic_Subs(Pic,func,j,i);//把元素值赋给 thresMax else if(CV_Pic_Subs(Pic,func,j,i)

thresMin=CV_Pic_Subs(Pic,func,j,i); //则改变thresMin

4.1.2车牌定位

一个车牌识别系统成功的关键因素在于车牌区域的确定,首先第一步的定位工作对后面的分割,识别有着直接的影响。所以车牌定位先要找到这个准确的区域,然后从这个区域把车牌分割出来,为后续的识别做准备。本文中根据车牌图像的先验知识,确定车牌的上下边界,然后利用OpenCV库中的CMyDialog函数,把车牌区域设为感兴趣区域,将图像处理为大小一致并且归一化,图像尺寸为20×40像素。

首先对二值化后的图像进行行扫描和列扫描,从而得到车牌区域。接下来找出每行的非零像素值的个数统计出来存储在数组中,最后通过投影统计出所有的图像像素,并保存投影数值和最大的。对保存的数值判断,如果满足要求这样就找出了车牌上水平线,同样的方法找出下水平线。

车牌左右边界寻找方法跟上段叙述的上下水平线方法相似,变成纵向扫描统

11