📄 shenjingwangluo.m
字号:
clc
clear all
close all
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%神经网络
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%模板格式5*5,归一化0-1
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%输入层神经元25个,中间层100,输出层1
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%缺模板
I=imread('E:\车牌\chepai24.jpg');
I1=im2double(I);
I2=rgb2gray(I1);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
[f1,f2]=freqspace(size(I2),'meshgrid');
D=100/size(I2,1);
Hd=ones(size(I2));
r=f1.^2+f2.^2;
for i=1:size(I2,1)
for j=1:size(I2,2)
t=r(i,j)/(D*D);
Hd(i,j)=exp(-t);
end
end
Y=fft2(double(I2));
Y=fftshift(Y);
Ya=Y.*Hd;
Ya=ifftshift(Ya);
Ia=ifft2(Ya);
figure,imshow(I2);
J=imnoise(I2,'gaussian',0,0.002);
h=fspecial('average',3);
I3=uint8(round(filter2(h,I2)));
I4=medfilt2(J,[3,3]);
I5=wiener2(J,[3,3]);
I6=wiener2(I5,[3,3]);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
fmax=0;fmin=1;
for a=1:size(I6,1)
for b=1:size(I6,2)
if I2(a,b)>fmax
fmax=I6(a,b);
end
if I2(a,b)<fmin
fmin=I6(a,b);
end
end
end
fazhi=fmax-(fmax-fmin)/3;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%二值化
I7=im2bw(I6,fazhi);
SE = ones(3,1);
I8 = erode(I7,SE);
figure,imshow(I8)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%转换
[y2,x2,z]=size(I8);
xiangsu1=0;
xiangsu2=0;
for i1=1:1:x2
for j1=1:1:y2
if I8(j1,i1)==0
xiangsu2=xiangsu2+1;
end
if I8(j1,i1)==1
xiangsu1=xiangsu1+1;
end
end
end
if xiangsu1>xiangsu2
for i1=1:1:x2
for j1=1:1:y2
if I8(j1,i1)==0
I8(j1,i1)=1;
else
I8(j1,i1)=0;
end
end
end
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
I_y2=zeros(y2,1);
I_x2=zeros(x2,1);
for i2=1:1:y2
for j2=1:1:x2
I_y2(i2)=I_y2(i2)+I8(i2,j2);
end
end
for i2=1:1:x2
for j2=1:1:y2
I_x2(i2)=I_x2(i2)+I8(j2,i2);
end
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
y2_mean=0;
for j3=1:1:y2
y2_mean=y2_mean+I_y2(j3);
end
y2_mean=y2_mean/(y2);
for i3=1:1:y2
if I_y2(i3)>y2_mean
PY1=i3;
break
end
end
for i3=y2:-1:1
if I_y2(i3)>y2_mean
PY2=i3;
break
end
end
IY=I8(PY1:PY2,:,:);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
x2_mean=0;
for j4=1:1:x2
x2_mean=x2_mean+I_x2(j4);
end
x2_mean=x2_mean/(x2);
for i4=1:1:x2
if I_x2(i4)>x2_mean
PX1=i4;
break
end
end
for i4=x2:-1:PX1+1
if I_x2(i4)>x2_mean
PX2=i4;
break
end
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
IX=I8(PX2:PX1,:,:)
PX1=PX1-2;
PX2=PX2+2;
Plate=I8(PY1+1:PY2-2,PX1+2:PX2-2,:);
figure,imshow(Plate);
title('车牌显示')
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
I9=imresize(Plate,[100,400]);
figure,imshow(I9)
[y,x,z]=size(I9);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%X方向的投影车牌
p_x=zeros(1,x);
for j5=1:x
for i5=1:y
if(I9(i5,j5)==1)
p_x(1,j5)= p_x(1,j5)+1;
end
end
end
figure,plot(p_x);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
p=0;
C=qiege(I9,p_x,p); %切割
F=1; %标志
while(F==1) %非常重要的一部,检查是否有没有割到的字符
BW=size(C{1},2);
for s=2:length(C) %遍历检查最大的字符
if BW<size(C{s},2)
BW=size(C{s},2);
end
end
if BW>=size(I9,2)*0.25 %此最大的字符与车牌比较是否大于其长度的0.25
p=p+0.2; %如果大于则逐步提高切割阀值,继续切割
C=qiege(I9,p_x,p);
else F=0;
end
end
i6=1;
for s=1:length(C)
if size(C{s},2)>=size(I9,2)*0.1 %删除多余切割部分
C1{i6}=C{s};
i6=i6+1;
end
end
for s=1:length(C1)
C1{s}=imresize(C1{s},[100 50]); %字符归一化
figure,imshow(C1{s}); %依次显示切割出的字符%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
load net net;%%载入训练后的神经网络
xxx=C1{s};
xunsianhang=25;
mm=100;
nn=50;
kkkk=5;
pyyy(1:xunsianhang,1)=1;
pxx1=ones(5,5);
load net net;%%载入训练后的神经网络
[i,j]=find(xxx==1);
imin=min(i);
imax=max(i);
jmin=min(j);
jmax=max(j);
xxx1=xxx(imin:imax,jmin:jmax);
xxx1=imresize(xxx1,[100,50]);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
for jj=1:1:5
for tt=1:1:5
xxx11(jj,tt,1)=0;
end
end
for jj=1:1:5
for k=1:1:5
for l=1+(jj-1)*20:1:jj*20
for m=1+(k-1)*10:1:k*10
xxx11(jj,k,1)=xxx11(jj,k,1)+xxx1(l,m,1);
end
end
end
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
pxx1=xxx11;
pxx1=pxx1/(mm*nn/25);
for m=0:kkkk-1
pyyy(m*kkkk+1:(m+1)*kkkk,1)=pxx1(1:kkkk,m+1,1);
end
[iii,jjj]=size(pyyy);
%%对输入模式进行识别
a=sim(net,pyyy);
aa=round(a);
%%输出识别结果
switch aa
case{1}
sprintf('it is "0".')
case{2}
sprintf('it is "2".')
case{3}
sprintf('it is "A".')
case{4}
sprintf('it is "B".')
case{5}
sprintf('it is "黑".')
case{6}
sprintf('it is "5".')
case{7}
sprintf('it is "8".')
case{8}
sprintf('it is "6".')
case{9}
sprintf('it is "7".')
case{10}
sprintf('it is "9".')
case{11}
sprintf('it is "辽".')
case{12}
sprintf('it is "D".')
case{13}
sprintf('it is "K".')
case{14}
sprintf('it is "M".')
case{15}
sprintf('it is "皖".')
case{16}
sprintf('it is "沪".')
end
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -