基于MATLAB的字符识别研究_第1页
基于MATLAB的字符识别研究_第2页
基于MATLAB的字符识别研究_第3页
基于MATLAB的字符识别研究_第4页
基于MATLAB的字符识别研究_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、精品感谢下载载PixcoxP(x|(卜=>functionBayes2%算法视线见模式识别P33P44(各类样本的协方差不相等)%为了提高实验样本测试的精度,故采用多次模拟求平均值的方法N=input('实验模拟次数N(N最好为奇数)=');Result(1:3,1:3)=0;%判别矩阵的初始化fork=1:N%控制程序模拟次数N%生成二维正态分布的样本2XN维的矩阵X1=mvnrnd(12,40;06,300)'%2XNX2=mvnrnd(53,50;01,200)'X3=mvnrnd(47,20;09,500)'%样本程序%测试样本X10=mv

2、nrnd(12,40;06,100)'%2XNX20=mvnrnd(53,50;01,100)'X30=mvnrnd(47,20;09,100)'%先验概率P(1)=length(X1)/(length(X1)+length(X2)+length(X3);P(2)=length(X2)/(length(X1)+length(X2)+length(X3);P(3)=length(X3)/(length(X1)+length(X2)+length(X3);%计算相关量cov(X):协方差矩阵Ave:均值%W1=-1/2*inv(cov(X1');W2=-1/2*in

3、v(cov(X2');W3=-1/2*inv(cov(X3');%Ave1=(sum(X1')/length(X1)'Ave2=(sum(X2')/length(X2)'Ave3=(sum(X3')/length(X3)'%计算平均值(2维列向量)w1=inv(cov(XT)*Ave1;w2=inv(cov(X2')*Ave2;w3=inv(cov(X3')*Ave3;%2w10=-1/2*Ave1'*inv(cov(X1')*Ave1-1/2*log(det(cov(XT)+log(P(1);w2

4、0=-1/2*Ave2'*inv(cov(X2')*Ave2-1/2*log(det(cov(X2')+log(P(2);w30=-1/2*Ave3'*inv(cov(X3')*Ave3-1/2*log(det(cov(X3')+log(P(3);%fori=1:3forj=1:100ifi=1g1=X10(:,j)'*W1*X10(:,j)+w1'*X10(:,j)+w10;g2=X10(:,j)'*W2*X10(:,j)+w2'*X10(:,j)+w20;g3=X10(:,j)'*W3*X10(:,j)

5、+w3'*X10(:,j)+w30;ifg1>=g2&g1>=g3Result(1,1)=Result(1,1)+1;elseifg2>=g1&g2>=g3Result(1,2)=Result(1,2)+1;%记录误判情况elseResult(1,3)=Result(1,3)+1;%记录误判情况endelseifi=2g1=X20(:,j)'*W1*X20(:,j)+w1'*X20(:,j)+w10;g2=X20(:,j)'*W2*X20(:,j)+w2'*X20(:,j)+w20;g3=X20(:,j)'

6、*W3*X20(:,j)+w3'*X20(:,j)+w30;ifg2>=g1&g2>=g3Result(2,2)=Result(2,2)+1;elseifg1>=g2&g1>=g3Result(2,1)=Result(2,1)+1;elseResult(2,3)=Result(2,3)+1;endelseg1=X30(:,j)'*W1*X30(:,j)+w1'*X30(:,j)+w10;g2=X30(:,j)'*W2*X30(:,j)+w2'*X30(:,j)+w20;g3=X30(:,j)'*W3*X30

7、(:,j)+w3'*X30(:,j)+w30;ifg3>=g1&g3>=g2Result(3,3)=Result(3,3)+1;elseifg2>=g1&g2>=g3Result(3,2)=Result(3,2)+1;elseResult(3,1)=Result(3,1)+1;endendendendend%画出各样本的分布情况subplot(2,1,1)plot(X1(1,:),X1(2,:),'r.','LineWidth',2),holdonplot(X2(1,:),X2(2,:),'go',

8、'LineWidth',2),holdonplot(X3(1,:),X3(2,:),'b+','LineWidth',2),holdontitle('训练样本分布情况')legend('训练样本1','训练样本2','训练样本3')subplot(2,1,2)plot(X10(1,:),X10(2,:),'r.','LineWidth',2),holdonplot(X20(1,:),X20(2,:),'go','LineWidt

9、h',2),holdonplot(X30(1,:),X30(2,:),'b+','LineWidth',2),holdontitle('测试样本分布情况')legend('测试样本1','测试样本2','测试样本3')%由于多次循环后存在小数,根据实际情况判别矩阵须取整%如果N为偶数,可能出现小数为0.5的情况,此时将无法更加准确判断矩阵Result=Result/N%判别矩阵,反映Bayes的判别效果fori=1:length(Result)ifround(sum(Result(i,:)-

10、fix(Result(i,:)=1m,n=find(max(Result(i,:)-fix(Result(i,:)=(Result(i,:)-fix(Result(i,:);n=min(n);%存在小数点相同的情况随即选取一个forj=1:length(Result)ifj=nResult(i,j)=fix(Result(i,j)+1;elseResult(i,j)=fix(Result(i,j);endendelseifround(sum(Result(i,:)-fix(Result(i,:)=2m,n1=find(max(Result(i,:)-fix(Result(i,:)=(Resul

11、t(i,:)-fix(Result(i,:);m,n2=find(min(Result(i,:)-fix(Result(i,:)=(Result(i,:)-fix(Result(i,:);n1=min(n1);n2=min(n2);%如果有存在小数点相同的情况,随即选取一个forj=1:length(Result)ifj=n1Result(i,j)=fix(Result(i,j)+1;elseifj=n2Result(i,j)=fix(Result(i,j);elseResult(i,j)=fix(Result(i,j)+1;endendelsecontinue,endend图像预处理具体步骤

12、如下:首先对图像进行灰度转换,二值化处理然后采用4X1的结构元素对图像进行腐蚀,去除图像的噪声。采用25X25的结构元素,对图像进行闭合应算使车牌所在的区域形成连通。再进行形态学滤波去除其它区域。I=imread('CAR/0.jpg');%读取图片博始图像I1=rgb2gray(I);%转化为灰度图像灰度图像I2=edge(I1,'roberts',0.09,'both');%采用robert算子进行边缘检测se=1;1;1;%线型结构元素I3=imerode(I2,se);%腐蚀图像se=strel('rectangle',2

13、5,25);%矩形结构元素I4=imclose(I3,se);%图像聚类、填充图像I5=bwareaopen(I4,2000);%去除聚团灰度值小于2000的部分通过对比原始图片,我们可以发现形态滤波后的图像已经很接近正确的车牌位置了,因此后期处理将通过这张图来找出车牌位置。2.车牌定位观察经过预处理后得到的图像发现车牌位置有明显的矩形有明显的矩形图样,通过对矩形区域的定位即可获得具体的车牌位置。(1)车牌的行起始和终止位置的确定y,x=size(I5);I6=double(I5);%绘制行曲线图Y1=zeros(y,1);fori=1:yforj=1:xif(I6(i,j)=1)Y1(i,1

14、)=Y1(i,1)+1;endendendfigure();subplot(1,3,1);plot(0:y-1,Y1),title('行像素灰度值累计'),xlabel('行值'),ylabel('像素和');temp,MaxY=max(Y1);PY1=MaxY;while(Y1(PY1,1)>=80)&&(PY1>1)PY1=PY1-7;endPY2=MaxY;while(Y1(PY2,1)>=80)&&(PY2<y)PY2=PY2+7;end2 2)车牌的列起始位置和终止位置的确定%绘制

15、列曲线图X1=zeros(1,x);forj=1:xfori=PY1:PY2if(I6(i,j)=1)X1(1,j)=X1(1,j)+1;endendendsubplot(1,3,2);plot(0:x-1,X1),title('列像素灰度值累计'),xlabel('列值'),ylabel('像数和');PX1=1;while(X1(1,PX1)<3)&&(PX1<x)PX1=PX1+7;endPX2=x;while(X1(1,PX2)<3)&&(PX2>PX1)PX2=PX2-7;end鼻

16、 帐 a品111L1一11列信:素灰度值累计4540353D25201510500200400600 时0列值(3)最后拼合获取的车牌在图像的行列位置DW=I(PY1:PY2,PX1:PX2,:);subplot(1,3,3);imshow(DW),title('车牌定位后图像');3 .字符分割在汽车牌照自动识别过程中,字符分割有承前启后的作用。它在前期牌照定位的基础上进行字符的分割,然后再利用分割的结果进行字符识别。%车牌图像转为灰度ifisrgb(I)I1=rgb2gray(I);elseI1=I;end%二值化车牌图像I1=im2bw(I1,graythresh(I1)

17、;%二值化图像I2=bwareaopen(I1,16);%去除小于16像素的区块figure();subplot(1,2,1);imshow(I2),title('二值化车牌图像');%分割字符按行积累量y,x=size(I2);I3=double(I2);X1=zeros(1,x);forj=1:xfori=1:yif(I3(i,j)=1)X1(1,j)=X1(1,j)+1;endendendsubplot(1,2,2);plot(0:x-1,X1),title('车牌列像素点累计),xlabel('歹!J值'),ylabel('像素和'

18、;);列值%分割字符Px0=1;Px1=1;figure();fori=1:7while(X1(1,Px0)<3)&&(Px0<x)Px0=Px0+1;endPx1=Px0;while(X1(1,Px1)>=3)&&(Px1<x)|(Px1-Px0)<10)Px1=Px1+1;endZ=I2(:,Px0:Px1);switchstrcat('Z',num2str(i)case'Z1'PIN0=Z;case'Z2PIN1=Z;case'Z3'PIN2=Z;case'Z4&

19、#39;PIN3=Z;case'Z5'PIN4=Z;case'Z6'PIN5=Z;otherwisePIN6=Z;endsubplot(1,7,i);imshow(Z);Px0=Px1;end分割成七块后的车牌图像4. 建立字符模板数据库汽车牌照的字符一般有7个,大部分车牌第一位是汉字,通常代表车辆所属省份,或是军种警别等有特定含义的字符简称;紧接其后的为字母与数字。十个阿拉伯数字09,26个大写英文字母AZ以及相关的车牌用汉字:京、沪、苏、台、港、澳、甲、乙、丙、使、领、学、试、境、消、边、警等。functioninpt=Pretreatment(I)%训练样

20、本前期处理ifisrgb(I)I1=rgb2gray(I);elseI1=I;endI1=imresize(I1,5025);%将图片统一划为50*25大小I1=im2bw(I1,0.9);m,n=size(I1);inpt=zeros(1,m*n);%将图像按列转换成一个行向量forj=1:nfori=1:minpt(1,m*(j-1)+i)=I1(i,j);endend这是一个自定义函数的Pretreatment.m文件,可以解决频繁写重复代码的问题,前面的图像预处理及车牌定位的代码可以写进Location.m文件中,通过代码DW=Location(I);取得车牌定位后的图像;同时字符分割

21、的代码亦可写进StringSplit.m文件中,可以通过代码PIN0,PIN1,PIN2,PIN3,PIN4,PIN5,PIN6=StringSplit(DW);取得的字符分割后的图像。5. 字符识别字符的识别目前用于车牌字符识别(OCR)中的算法主要有基于模板匹配的OCR算法以及基于人工神经网络的OCR算法。设计代码如下:closeall;clearall;%归一化训练样本I0=pretreatment(imread('BP/0.jpg');I1=pretreatment(imread('BP/1.jpg');I2=pretreatment(imread(&#

22、39;BP/2.jpg');I3=pretreatment(imread('BP/3.jpg');I4=pretreatment(imread('BP/4.jpg');I5=pretreatment(imread('BP/5.jpg');I6=pretreatment(imread('BP/6.jpg');I7=pretreatment(imread('BP/7.jpg');I8=pretreatment(imread('BP/8.jpg');I9=pretreatment(imread(&

23、#39;BP/9.jpg');I10=pretreatment(imread('BP/A.jpg');I11=pretreatment(imread('BP/B.jpg');I12=pretreatment(imread('BP/C.jpg');I13=pretreatment(imread('BP/D.jpg');I14=pretreatment(imread('BP/G.jpg');I15=pretreatment(imread('BP/K.jpg');I16=pretreatment(

24、imread('BP/L.jpg');I17=pretreatment(imread('BP/M.jpg');P=I0',I1',I2',I3',I4',I5',I6',I7',I8',I9',I10',I11',I12',I13',I14',I15',I16',I17'T=eye(18,18);%输出样本%bp神经网络参数设置net=newff(minmax(P),1250,32,18,'logsig'

25、,'logsig','logsig','trainrp');net.inputWeights1,1.initFcn='randnr'net.layerWeights2,1.initFcn='randnr'net.trainparam.epochs=5000;net.trainparam.show=50;net.trainparam.lr=0.003;net.trainparam.goal=0.0000000001;net=init(net);net,tr=train(net,P,T);%训练样本%测试I=imrea

26、d('CAR/0.jpg');DW=Location(I);%车牌定位PIN0,PIN1,PIN2,PIN3,PIN4,PIN5,PIN6=StringSplit(DW);%字符分割及处理%测试字符,得到识别数值PIN0=pretreatment(PIN0);PIN1=pretreatment(PIN1);PIN2=pretreatment(PIN2);PIN3=pretreatment(PIN3);PIN4=pretreatment(PIN4);PIN5=pretreatment(PIN5);PIN6=pretreatment(PIN6);P0=PIN0',PIN1'

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论