接着昨天的工作,把最后一部分识别讲完。

关于字符识别这块,一种最省事的办法是匹配识别,将所得的字符和自己的标准字符库相减,计算所得结果,值最小的即为识别的结果。不过这种方法是在所得字符较为标准的情况,由于众多因素影响,切割出来的字符往往不是标准的,因此识别效果也不好。本次采用的BP神经网络方法,至于像其他的分类器方法,没有尝试,这里就不说了。

利用神经网络的方法的思路也比较清晰,将已有的字符库输入到神经网络的输入口进行训练,然后用训练好的神经网络对待识别的字符继续识别,输出识别结果。matlab里面已经集成好神经网络,直接调用即可。

这里说明一下,考虑到减小输入量,这里把输入的字符划分为八行四列,计算每块的总数,然后把这些数作为样本输入到神经网络。

字符识别部分代码:

for i=:
ii=int2str(i);
fname=strcat('D:\1_2学习\图像处理\车牌识别\matlab_car_plate-recognization\char_result\character_test\cha&num\',ii,'.bmp');
image=imread(fname);
change_image=catch2chi2character(image);
P(:,i)=change_image;
end
T = [eye() eye() eye() eye()];
alphabet = P;
targets = T; [R,Q] = size(alphabet);
[S2,Q] = size(targets);
S1=;% purelin tansig
net = newff(minmax(alphabet),[S1,S2],{ 'purelin' 'purelin' },'trainscg','learngdm');%trainscg traingdx
net.inputWeights{,}.initFcn ='randnr';
net.layerWeights{,}.initFcn ='randnr';
net.performFcn = 'sse';
net.trainParam.goal = 0.1;
net.trainParam.show = ;
net.trainParam.epochs = ;
net.trainParam.mc = 0.95;
net.trainparam.lr=0.015;%0.01 %设置学习速率
P = alphabet;
T = targets;
[net,tr] = train(net,P,T);%训练好的神经网络

函数catch2chi2character:

function  lett=catch2chi2character(I1)
%% 训练样本前期处理
% bw_7050=imresize(I1,[ ],'nearest');%将图片统一划为50*25大小
[m n]=size(I1);
bw_7050=I1;
% figure,imshow(I1);
histrow=sum(bw_7050'); %计算水平投影
histcol=sum(bw_7050); %计算竖直投影
for i=:m
if(histrow(i)>)
row_x=i;
break;
end
end
for i=:n
if(histcol(i)>)
col_x=i;
break;
end
end
for i=n:-:
if(histcol(i)>)
col_y=i;
break;
end
end
for i=m:-:
if(histrow(i)>)
row_y=i;
break;
end
end
picture(:,:)=bw_7050(row_x:row_y,col_x:col_y);
bw_7050=imresize(picture,[ ],'nearest');%将图片统一划为50*25大小
% figure,imshow(bw_7050) for cnt=:%粗网格特征作为输入矢量
for cnt2=:
Atemp=sum(bw_7050((cnt*-:cnt*),(cnt2*-:cnt2*))); %获取字符的统计特征
lett((cnt-)*+cnt2)=sum(Atemp);
end
end
ma=max(max(lett));
mi=min(min(lett));
lett=(lett-mi)/(ma); histrow=sum(bw_7050'); %计算水平投影
histcol=sum(bw_7050); %计算竖直投影 lett=lett';
end

字符识别:

 for i=:
ii=int2str(i);
fname=strcat('D:\1_2学习\图像处理\车牌识别\matlab_car_plate-recognization\char_result\',ii,'.bmp');
image=imread(fname);
[size_x size_y]=size(image);
max_num=max(max(image));
min_num=min(min(image))-;
for ix=:size_x
for ij=:size_y
if image(ix,ij)>min_num+(max_num-min_num)/
image(ix,ij)=;
else
image(ix,ij)=;
end
end
end
% I2 = bwmorph(image,'remove'); %提取边缘
% image_main = bwmorph(I2,'skel',Inf); %骨架化
% figure,imshow(image)
change_image=catch2chi2character(image);
Ptest(:,i-)=change_image;
end
[a,b]=max(sim(net,Ptest));
disp(b);
liccode=char(['A':'H' 'J':'N' 'P':'Z' '':'']); %建立自动识别字符代码表
for i=:
str(i)=liccode(b(i));
end

汉字识别和字符差不多,这里就不贴上去了。。

总结一下:采用这种方式,基本上字符都可以识别出来。考虑到样本采集、数字处理过程中对字符的影响,像字符O和D,一定情况下无法识别。这也是程序所存在的问题,即没有对相似的字符进行区分。。汉字也存在这种情况,左右结构的也没有考虑。因此想做到完整还有好多工作要做。。

这个是简单的GUI结果图:

总结一下:

1.获取的车牌规格要统一,否则很难把握好车牌定位这块。

2.切割字符关键在于让程序确定在车牌的位置,这样切割起来就比较方便了。不足的地方在于从定位到切割这块要耗费一点时间,感觉是自己程序太过复杂?不知道有没比较简单的思路没。

3.字符识别想要做的好,工作还是比较多的。这次神经网络训练过程中参数设置很重要,土办法是去试,不知道有没有科学点的办法。。

4.算是对这段时间来的一个总结,里面涉及到的内容还是很多的,多看看模式识别方面的知识。

结束。。2015-5-11

基于matlab的蓝色车牌定位与识别---识别的更多相关文章

  1. 【原】基于matlab的蓝色车牌定位与识别---绪论

    本着对车牌比较感兴趣,自己在课余时间摸索关于车牌的定位与识别,现将自己所做的一些内容整理下,也方便和大家交流. 考虑到车牌的定位涉及到许多外界的因素,因此有必要对车牌照的获取条件进行一些限定: 一.大 ...

  2. 基于matlab的蓝色车牌定位与识别---定位

    接着昨天的工作继续.定位的过程有些是基于车牌的颜色进行定位的,自己则根据数字图像一些形态学的方法进行定位的. 合着代码进行相关讲解. 1.相对彩色图像进行灰度化,然后对图像进行开运算.再用小波变换获取 ...

  3. 基于matlab的蓝色车牌定位与识别---分割

    接着上面的工作,接下去就该是进行字符分割了.考虑到为了后面的字符识别,因此在这部分需要实现的目标是需要把车牌的边框全部切除,对重新定位的车牌进行垂直方向水平方向调整,保证字符是正的.最后才是字符的分割 ...

  4. 车牌识别LPR(四)-- 车牌定位

    第四篇:车牌定位 车牌定位就是采用一系列图像处理或者数学的方法从一幅图像中将车牌准确地定位出来.车牌定位提取出的车牌是整个车牌识别系统的数据来源,它的效果的好坏直接影响到整个系统的表现,只有准确地定位 ...

  5. 数字图像处理:基于MATLAB的车牌识别项目 标签: 图像处理matlab算法 2017-06-24 09:17 98人阅读 评论(0)

    学过了数字图像处理,就进行一个综合性强的小项目来巩固一下知识吧.前阵子编写调试了一套基于MATLAB的车牌识别的项目的代码.今天又重新改进了一下代码,识别的效果好一点了,也精简了一些代码.这里没有使用 ...

  6. 基于MATLAB的手写公式识别(2)

    基于MATLAB的手写公式识别 图像的预处理(除去噪声.得到后续定位分割所需的信息.) 预处理其本质就是去除不需要的噪声信息,得到后续定位分割所需要的图像信息.图像信息在采集的过程中由于天气环境的影响 ...

  7. 基于MATLAB的人脸识别算法的研究

    基于MATLAB的人脸识别算法的研究 作者:lee神 现如今机器视觉越来越盛行,从智能交通系统的车辆识别,车牌识别到交通标牌的识别:从智能手机的人脸识别的性别识别:如今无人驾驶汽车更是应用了大量的机器 ...

  8. 基于MATLAB的手写公式识别(3)

    基于MATLAB的手写公式识别 图像的膨胀化,获取边缘(思考是否需要做这种处理,初始参考样本相对简单) %膨胀 imdilate(dilate=膨胀/扩大) clc clear A1=imread(' ...

  9. 基于MATLAB的手写公式识别(9)

    基于MATLAB的手写公式识别(9) 1.2图像的二值化 close all; clear all; Img=imread('drink.jpg'); %灰度化 Img_Gray=rgb2gray(I ...

随机推荐

  1. 立个flag---每天一篇博客

    从今天开始,需要更努力的学习了.开始写博客.锻炼自己,提高自己,争取可以从前端小菜鸟变成技术大牛.加油!

  2. HTTP之间的区别和特性

    一. Http 简介 Http,学名超文本传输协议 它理解起来并不复杂,平时并不起眼,但经常使用; 前后端交互,多数依赖于http协议,重要性看个人理解,我不敢使用个人认为不掌握的技术; 二. HTT ...

  3. Awesome Blockchain 区块链技术导航

    区块链技术导航:收集整理最全面最优质的区块链(BlockChain)技术开发相关资源. 以后找不到文档资料的时候去导航站看看. 先亮个像,我长这样: 导航站内容 区块链开发所涉及的资源: 如 项目白皮 ...

  4. jsp学习与提高(一)——JSP生命周期、三大指令及动作

    1.jsp定义: 1.1以java语言为脚本语言,运行在服务端的程序: 1.2处理客户请求,生成页面 1.3其本质是个sevlet会生成.java文件编译后再生成.class文件 2.jsp生命周期( ...

  5. VS2015 调试出现无法启动iis express web服务器

    VS2015 调试出现无法启动iis express web服务器 在项目目录下找到.vs文件夹,然后在.vs/config/applicationhost.config找到这个配置文件,删除掉,然后 ...

  6. 【手撸一个ORM】第五步、Expression(表达式目录树)转换为Where子句

    说明 在SQL中,查询.修改比较常用到WHERE子句,在这里根据使用场景不同,定义了两个类,一个用于查询,一个用于修改(插入)操作.原因是: 查询操作支持一级导航属性查询,如student.Schoo ...

  7. C# 指定WebBrowser 的 User Agent 版本

    今天用WebBrowser 打开网页,本机ie是ie9 可是WebBrowser 显示的效果明显不是ie9 ,百度查资料才知道,其实是因为直接用IE跟使用WebBrowser 运行的是不同的User ...

  8. ParallelsDesktop安装DOS7.1并与MAC共享文件

    ParallelsDesktop安装DOS7.1并与MAC共享文件 Table of Contents 1. 在Parallels Desktop中安装DOS7.1 2. 配置与Mac共享文件 1 在 ...

  9. Myeclipse发布第一个jsp页面及web project部署到tomcat上的几种方法

    菜鸟日记: 1:new web project: 2:fix the visiting  path of the tomcat,打开在安装目录下conf目录中的server.xml,在</Hos ...

  10. 单列表变量与字符串拆分的对照(SqlServer)

    最近遇到一个问题,在SQLServer中,需要根据用户传入的一系列ID值更新对应的记录.有两种方法,一种是将这些ID值使用逗号分隔,拼接成字符串传入,一种是以表变量的方式传入.最开始,我想当然的认为传 ...