您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 国内外标准规范 > 基于matlab车牌的定位与分割识别程序
基于Matlab的车牌定位与分割经典算法I=imread('car.jpg');%读取图像figure();subplot(3,2,1),imshow(I),title('原始图像');I1=rgb2gray(I);%转化为灰度图像subplot(3,2,2),imshow(I1),title('灰度图像');I2=edge(I1,'robert',0.09,'both');%采用robert算子进行边缘检测subplot(3,2,3),imshow(I2),title('边缘检测后图像');se=[1;1;1];%线型结构元素I3=imerode(I2,se);%腐蚀图像subplot(3,2,4),imshow(I3),title('腐蚀后边缘图像');se=strel('rectangle',[25,25]);矩形结构元素I4=imclose(I3,se);%图像聚类、填充图像subplot(3,2,5),imshow(I4),title('填充后图像');I5=bwareaopen(I4,2000);%去除聚团灰度值小于2000的部分subplot(3,2,6),imshow(I5),title('形态滤波后图像');[y,x,z]=size(I5);I6=double(I5);Y1=zeros(y,1);fori=1:yforj=1:xif(I6(i,j,1)==1)Y1(i,1)=Y1(i,1)+1;endendend[tempMaxY]=max(Y1);figure();subplot(3,2,1),plot(0:y-1,Y1),title('行方向像素点灰度值累计和'),xlabel('行值'),ylabel('像素');%求的车牌的行起始位置和终止位置PY1=MaxY;while((Y1(PY1,1)=50)&&(PY11))PY1=PY1-1;endPY2=MaxY;while((Y1(PY2,1)=50)&&(PY2y))PY2=PY2+1;endIY=I(PY1:PY2,:,:);X1=zeros(1,x);forj=1:xfori=PY1:PY2if(I6(i,j,1)==1)X1(1,j)=X1(1,j)+1;endendendsubplot(3,2,2),plot(0:x-1,X1),title('列方向像素点灰度值累计和'),xlabel('列值'),ylabel('像数');%求的车牌的列起始位置和终止位置PX1=1;while((X1(1,PX1)3)&&(PX1x))PX1=PX1+1;endPX2=x;while((X1(1,PX2)3)&&(PX2PX1))PX2=PX2-1;endPX1=PX1-1;PX2=PX2+1;%分割出车牌图像%dw=I(PY1:PY2,PX1:PX2,:);subplot(3,2,3),imshow(dw),title('定位剪切后的彩色车牌图像')4.2车牌字符分割确定车牌位置后下一步的任务就是进行字符切分分离出车牌号码的全部字符图像。ifisrgb(I)I1=rgb2gray(I);%将RGB图像转化为灰度图像elseI1=I;endg_max=double(max(max(I1)));g_min=double(min(min(I1)));T=round(g_max-(g_max-g_min)/3);%T为二值化的阈值[m,n]=size(I1);%d:二值图像%h=graythresh(I1);I1=im2bw(I1,T/256);subplot(3,2,4);imshow(I1),title('二值化车牌图像');I2=bwareaopen(I1,20);subplot(3,2,5);imshow(I2),title('形态学滤波后的二值化图像');[y1,x1,z1]=size(I2);I3=double(I2);TT=1;%%%%%%%去除图像顶端和底端的不感兴趣区域%%%%%Y1=zeros(y1,1);fori=1:y1forj=1:x1if(I3(i,j,1)==1)Y1(i,1)=Y1(i,1)+1;endendendPy1=1;Py0=1;while((Y1(Py0,1)20)&&(Py0y1))Py0=Py0+1;endPy1=Py0;while((Y1(Py1,1)=20)&&(Py1y1))Py1=Py1+1;endI2=I2(Py0:Py1,:,:);subplot(3,2,6);imshow(I2),title('目标车牌区域');%分割字符按行积累量%X1=zeros(1,x1);forj=1:x1fori=1:y1if(I3(i,j,1)==1)X1(1,j)=X1(1,j)+1;endendendfigure(5);plot(0:x1-1,X1),title('列方向像素点灰度值累计和'),xlabel('列值'),ylabel('累计像素量');Px0=1;Px1=1;%分割字符fori=1:7while((X1(1,Px0)3)&&(Px0x1))Px0=Px0+1;endPx1=Px0;while(((X1(1,Px1)=3)&&(Px1x1))||((Px1-Px0)10))Px1=Px1+1;endZ=I2(:,Px0:Px1,:);switchstrcat('Z',num2str(i))case'Z1'PIN0=Z;case'Z2'PIN1=Z;case'Z3'PIN2=Z;case'Z4'PIN3=Z;case'Z5'PIN4=Z;case'Z6'PIN5=Z;otherwisePIN6=Z;endfigure(3);subplot(1,7,i);imshow(Z);Px0=Px1;Endfunctioninpt=pretreatment(I)%YUCHULISummaryofthisfunctiongoeshere%Detailedexplanationgoeshereifisrgb(I)I1=rgb2gray(I);elseI1=I;endI1=imresize(I1,[5020]);%将图片统一划为50*20大小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%神经网络进行识别。closeall;clearall;%%%%归一化训练样本%%%%%%I0=pretreatment(imread('0.jpg'));I1=pretreatment(imread('1.jpg'));I2=pretreatment(imread('2.jpg'));I3=pretreatment(imread('3.jpg'));I4=pretreatment(imread('4.jpg'));I5=pretreatment(imread('5.jpg'));I6=pretreatment(imread('6.jpg'));I7=pretreatment(imread('7.jpg'));I8=pretreatment(imread('8.jpg'));I9=pretreatment(imread('9.jpg'));I10=pretreatment(imread('A.jpg'));I11=pretreatment(imread('C.jpg'));I12=pretreatment(imread('G.jpg'));I13=pretreatment(imread('L.jpg'));I14=pretreatment(imread('M.jpg'));I15=pretreatment(imread('R.jpg'));I16=pretreatment(imread('H.jpg'));I17=pretreatment(imread('N.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),[1000,32,18],{'logsig','logsig','logsig'},'trainrp');net.inputWeights{1,1}.initFcn='randnr';net.layerWeights{2,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=imread('DSC01323.jpg');I=imread('DSC01344.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',PIN2',PIN3',PIN4',PIN5',PIN6'];fori=2:7T0=sim(net,P0(:,i));T1=compet(T0);d=find(T1==1)-1if(d==10)str='A';elseif(d==11)str='C';elseif(d==12)str='G';elseif(d==13)str='L';elseif(d==14)str='M';elseif(d==15)str='R';elseif(d==16)str='H';elseif(d==17)str='N';elsestr=num2str(d);endswitchicase2str1=str;case3str2=str;case4str3=str;case5str4=str;case6str5=str;otherwisestr6=str;endend%显示定位后的分割出的车牌彩图,%%%%%%%识别结果以标题形式显示在图上%%%s=strcat('渝',str1,str2,str3,str4,str5,str6);figure();imshow(dw),title(s);非诚勿扰欢迎下载
本文标题:基于matlab车牌的定位与分割识别程序
链接地址:https://www.777doc.com/doc-3909278 .html