基于图像处理的车牌识别定位算法研究 联系客服

发布时间 : 星期一 文章基于图像处理的车牌识别定位算法研究更新完毕开始阅读06bd5ced551810a6f52486bf

大学本科毕业论文(设计)

读入字符图像 与模板库中的字母逐一进行相关运算 寻找相关度最大值所对应的模板 输出此模板所对应的值 图4-1 字符识别算法

Figure.4-1 Character Recognition Algorithm

因此在字符识别之前必须把模板库设置好。汽车拍照的字符一般有七个,大部分车牌第一位是汉字,通常代表车辆所属省份,或是军种、警别等有特定含义的字符简称;紧接其后的为字母与数字。车牌字符识别与一般文字识别在于它的字符数有限,汉字共约50多个,大写英文字母26个,数字10个。所以建立字符模板库也极为方便。本次设计所识别的车牌只有字母与数字。为了实验方便,结合本次设计所选汽车牌照的特点,只建立了3个字母与3个数字的模板。其他模板设计的方法与此相同。 4.1 模板设计

分析字符分割得到的图像以及其他车牌图像中字符的特点,将模板大小定为26×14;背景为黑色,代表灰度值 0,字符边缘为白色。代表灰度值255。

设计过程如下:

1.

用画图工具先画出B、P、M、8、4、2等几个字符的图像。并分别保存为m11.jpg,m12.jpg,M13.jpg,m14.jpg,m15.jpg,m16.jpg。根据画图的经验其大小应略大于26×14,以利于后面的处理。所得到的字符均为黑字白底。字体为方正姚体,大小16号。所画出的图形如下:

25

大学本科毕业论文(设计)

2. 对1中获得的粗略图像用MATLAB进行处理。处理的方面包括a.去除边框,利用二维数组的映射关系实现,去掉开始行(列)与结束行(列)即所有外围像素点b.提取模板的边缘。其实现方法与前面的汽车边缘提取的方法相同,也是利用梯度算子。C.尺寸大小变换,切割为标准的26×14格式。

3. 整个处理过程结束后,再用imwrite 函数写入图像库中,作为标准模板使用。

模板的设计过程,共进行了两次。作为一幅jpg或者bmp形式的图片,其中包含了许许多多的像素点,各象素点的值也不一样,到底如何来确定这些像素点的值呢?模板设置无疑成为一个难点。于是便投机取巧,将本身分割得到的字符保存起来直接作为模板使用。这种方法明显不具有科学性。图像识别中模板匹配法是将未知的东西与已知的东西来进行比较。因此模板库中的字符应该是已知的,是预先设置好的是不可更改的,而不是在实验过程中来得到。第二次便是用以上的画图工具来一步一步逼近实现模板设置。实验结果显示,这种方法简单易行。

4.2识别过程

字符识别中模板匹配方法是实现离散输入模式分类的有效途径之一,其实质是度量输入与样本之间的某种相似性,取相似性最大者为输入模式所属类别,它根据字符的直观形象抽取特征,用相关匹配原理进行识别,即是将输入字符与标准字符在一个分类器中进行匹配。车牌字符相关匹配算法如下:

输入字符用输入函数X表示,标准模板用函数T表示,它们的大小均为26×14。将未知的模式逐个与模板匹配,求出其相似度。

?(X?T) Si?m?1n?1NMi?Tm?1ne1NM)

i其中,M=26,N=14。Ti 指第i个模板。X×Ti 是指矩阵对应元素相乘。如果把X与T都归一化为”1”和”0”,则上式表示标准模板与待识图像上对应点均为”1”的数目与标准模板上”1”点的数目之比。如果 maxSi>λ 则判定X∈Ti,否则拒识,这里λ为拒识域值。本次实验中直接取相关最大值为判定域值。

26

大学本科毕业论文(设计)

用MATLAB来实现字符的识别。其中有两个很重要的函数可以直接调用:corr2 函数和max函数。

Corr2 函数直接用来计算图像拒阵A与B的相关系数r。A与B的大小及数据类型必须相同,得到的结果r是双精度标量。其调用方法如下: r=corr2(A,B)

因此本设计中的字符识别只需调用此函数,即将分割出来的字符与设置好的模板一一进行相关运算,然后寻找出它们中的最大相关值。max函数就是用来选择几个数值的大小值。其调用方式如下: [b,c]=max(a(:))

其中b返回的是比较后得到的最大值,c是最大值所对应的元素位置。 同时还自编了一个识别函数result.m用来返回识别结果。程序代码如下: function c=result(H); M1=imread('M1.jpg'); M2=imread('M2.jpg'); M3=imread('M3.jpg'); M4=imread('M4.jpg'); M5=imread('M5.jpg'); M6=imread('M6.jpg'); M1=double(M1); M2=double(M2); M3=double(M3); M4=double(M4); M5=double(M5); M6=double(M6); d=zeros(6); d(1)=corr2(H,M1); d(2)=corr2(H,M2); d(3)=corr2(H,M3); d(4)=corr2(H,M4);

27

大学本科毕业论文(设计)

d(5)=corr2(H,M5); d(6)=corr2(H,M6); [D,e]=max(d(:)); switch e case 1 c='P'; case 2 c='B'; case 3 c='M'; case 4 c=1; case 5 c=0; case 6 c=3; otherwise end

M1,M2,M3,M4,M5,M6为标准模板对应的二维数组。函数在开始运行时,从主函数里得到待识别的字符,此字符与模板进行相关运算,同时找出相关运算后的最大值及对应的函数位置。然后对最大位置进行判别,返回所对应的字符给主程序。并在MATLAB运行窗口显示出来。

编写result.m函数大大简化了计算量,每个字符在识别的时候直接调用此函数,避免了重新编程浪费的时间及空间。这是本次车牌识别中的一大亮点

运行结果,MATLAB的运行窗口显示出的车牌号码为:B.8.4.2.M.P.B,完成了准确识别车牌的目的。

5.结束语

通过对车牌自动识别系统的研究,我们对智能运输系统这一领域的研究有

28