【数字图像处理】【Matlab】【汽车车牌识别】4-车牌字符识别+5-结果分析


author:zox
实验环境:Matlab2019a
课程设计:汽车车牌识别


序号内容
0 [任务+原理+设计方案]
1车牌图像预处理
2车牌定位
3车牌字符分割
4+5车牌字符识别+结果分析
6总结
源代码

三、课程设计步骤和结果

4.车牌字符识别

  车牌字符识别采用的是模板匹配的方法,字符识别的整体流程如下:

在这里插入图片描述

图26 车牌字符识别的流程图

  在字符识别过程中的一些关键的变量如下表:

表-5 字符识别变量索引

变量名称变量注解
image循环取到了7个字符的图像数据
dirpath模板所在子文件夹路径
pattern模板字符的数据信息
diatance字符与所有模板的欧氏距离
res单个字符的匹配结果
result车牌匹配结果

4.1字符归一化处理

  在对字符识别之前首先要对字符进行归一化处理,因为字符分割时是选择最大分割宽度对所有字符进行的分割,所以有的字符是贴近边界的,有的则是留有一些距离,所以为了对他们统一,自编写mynormalise函数对字符图像归一化,其操作步骤如下:

  1)为每个字符图像添加等宽的左右边界的黑色背景;

  2)再将得到的图像缩放到40×20的标准图大小;

  关键代码为:

[x,y]=size(image);
ny=y+10;
image=[zeros(x,round((ny-y)/2)) image zeros(x,round((ny-y)/2))];
image=imresize(image,[40,20]);
OUT=im2bw(image,0.5);

  归一化处理的结果如下图:

在这里插入图片描述

图27 归一化后的字符图像

4.2建立模板

  模板匹配是图象识别方法中最具代表性的基本方法之一, 本车牌识别系统采用相减的方法来求得字符与模板的欧氏距离,得到与模板哪一个字符最相似,然后找到相似度最大的输出。

  模板匹配法虽然识别率低,但实现简单,计算量小,只有矩阵的加减与统计,而且车牌字符只有数字、英文大写字母和部分汉字,需要的模板字库量不大,因此本系统使用这种方法。对于模板匹配,需建立标准模板库,库中字符使用40×20的统一大小。

  然后在识别过程中发现如果将所有汉字、字母和数字放在相同的模板库下的话,有可能会出现汉字识别成字母、字母识别成数字的情况。所以仔细分析过后发现汽车车牌的具体特征:

  1)第一位是代表省份的汉字;

  2)第二位是代表市区的大写字母;

  3)后五位字符为任意大写字母或数字;

  所以为了实验方便,结合本次设计所选汽车牌照的特点,建立了3个小的模板库分别用于识别不同位置的字符,这样字符识别准确率就会提高。

  模板是从网络上搜索到相关的图片,再把图片的像素修改为 40*20和分割出的待识别的字符相同,把修改后的模板图片保存到字符模板文件夹中。

  建立模板的关键代码如下:

string=["character","letter","letter+number"];%对应的模板下的子文件夹名称
length_f=zeros(3,1);%每个小模板库下的字符图数量
result=[];%识别结果
for st=1:3%循环建立模板库数据
    dirpath = fullfile(pwd, 'Template',string(st),'*.bmp');%后面为地址串(pwd为当前目录所在位置)
    files = ls(dirpath);%得到该路径下的所有文件
    length_f(st)=length(files);%求该文件夹下的模板图数量
    for t = 1 : length_f(st)
        filenamet = fullfile(pwd,'Template',string(st), files(t,:));%得到该路径下的所有文件的列表      
        [filepath,name,ext] = fileparts(filenamet);   %  fileparts()函数:返回指定文件的路径名称、文件名和扩展名。       
        imagedata = imread(filenamet);%读取该图片                                   
        imagedata = im2bw( imagedata,0.5); %二值化为logic数据                 
        pattern(st,t).feature = imagedata; %取图片特征信息                                              
        pattern(st,t).name =name; %取模版字符名字
    end
end

4.3字符识别

  首先取字符模板,接着依次取待识别字符与模板进行匹配,将其与模板字符相减,得到的0越多,重合的部分就越多,那么就越匹配。把每一幅相减后的图的0值个数保存,选出0最多的图片模板的结果,即为识别出来的结果,保存在res中。

  字符识别的关键代码如下:

for m = 1 : 7 %循环分割的字符图像进行匹配
image=imread([str,'Nword',num2str(m),'.bmp']);%读取对应图片
switch m
case 1
for n = 1 : length_f(1)
distance(m,n)=sum(sum(abs(image-pattern(1,n).feature)));%距离数组
end
case 2
for n = 1 : length_f(2)
distance(m,n)=sum(sum(abs(image-pattern(2,n).feature)));%距离数组
end
case {3,4,5,6,7}
for n = 1 : length_f(3)
distance(m,n)=sum(sum(abs(image-pattern(3,n).feature)));%距离数组
end  
end
st=m;
if st>3
st=3;
end
[value,number]=min(distance(m,:));%距离最小的
res(m) = pattern(st,number).name;
result = strcat(result,res(m));%将结果字符串连接起来
end

  最后将每步识别到的字符串起来得到最终的识别结果,整个车牌识别的过程结果图如下:

在这里插入图片描述

图28 识别结果

  为更好的对比每一次的车牌图像的识别效果,将每一次的识别结果都保存在系统目录下的日志文件中,便于查阅。

在这里插入图片描述

图29 识别结果提示框

  从结果可以看到车牌识别的效果是非常准确的。

5.结果分析

  实际在测试过程中选取了12张比较规范、清晰的车牌图像来进行测试,不断地对代码和模板库进行修正,最终达到这12张车牌图像都能100%识别准确。识别的对比结果如下:

表-6 识别结果1

序号原车牌信息识别的车牌信息识别时间
1吉AGH827吉AGH82730-May-2020 07:08:00
2辽B5705D辽B5705D30-May-2020 07:08:23
3辽P88888辽P8888830-May-2020 07:08:46
4鲁D56829鲁D5682930-May-2020 07:09:09
5陕A906L4陕A906L430-May-2020 07:09:38
6豫A04S89豫A04S8930-May-2020 07:10:01
7粤A6ZC93粤A6ZC9330-May-2020 07:10:22
8粤AC609Z粤AC609Z30-May-2020 07:10:41
9粤SX186Q粤SX186Q30-May-2020 07:11:04
10云AG289N云AG289N30-May-2020 07:11:24
11云AMW061云AMW06130-May-2020 07:11:48
12浙GM2U15浙GM2U1530-May-2020 07:12:13

  另外还在网上找寻了12张相对来说有一些模糊的车牌图像来进行检查设计的汽车车牌识别系统的准确率,识别结果如下:

表-7 识别结果2

序号原车牌信息识别的车牌信息识别时间
1黑E99999E9999J30-May-2020 07:15:35
2沪B69999宁U6999930-May-2020 07:16:11
3沪DE3156DE315630-May-2020 07:16:32
4京A83760京A8376030-May-2020 07:16:54
5辽AQ6493AQ649330-May-2020 07:17:15
6鲁A12345A1234530-May-2020 07:17:38
7鲁AZ8886鲁AZ888630-May-2020 07:18:01
8鲁HC9669HC966930-May-2020 07:19:35
9苏EK69X0苏EK69X030-May-2020 07:20:48
10湘AB3597A83S9730-May-2020 07:21:20
11豫S32B69S3286930-May-2020 07:21:45
12粤DB8888粤D8888830-May-2020 07:22:09

(表中加粗部分为识别错误的字符)

  由此得出系统的识别正确率为1-14/(7×12)=83.3%,正确率还是比较合理的,而且分析错误的字符中,汉字识别错误的最多,这也是由于汉字的复杂性导致的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zoxiii

越打赏越生长

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值