东北大学秦皇岛分校毕业设计(论文) 第 40 页
这是一个自定义函数的Pretreatment.m 文件,可以解决频繁写重复代码的问题,前面的图像预处理及车牌定位的代码可以写进Location.m文件中,通过代码DW = Location(I); 取得车牌定位后的图像;同时字符分割的代码亦可写进StringSplit.m 文件中,可以通过代码[PIN0,PIN1,PIN2,PIN3,PIN4,PIN5,PIN6]=StringSplit(DW); 取得的字符分割后的图像。
5.3.2 神经系统识别的matlab实现
根据前面讲到的算法原理,具体程序代码如下: %% 归一化训练样本
I0=pretreatment(imread('BP/0.jpg')); I1=pretreatment(imread('BP/1.jpg')); I2=pretreatment(imread('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('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(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','logsig','logsig'},'trainrp'); net.inputWeights{1,1}.initFcn ='randnr';
东北大学秦皇岛分校毕业设计(论文) 第 41 页
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('1.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']; for i=2:7
T0= sim(net ,P0(:,i)); T1 = compet (T0) ; d = find(T1 == 1) - 1; if (d==10) str='A'; elseif (d==11) str='B'; elseif (d==12) str='C'; elseif (d==13) str='D';
%训练样本
东北大学秦皇岛分校毕业设计(论文) 第 42 页
elseif (d==14) str='G'; elseif (d==15) str='K'; elseif (d==16) str='L'; elseif (d==17) str='M'; elseif (d==0) str='0'; elseif (d==1) str='1'; elseif (d==2) str='2'; elseif (d==3) str='3'; elseif (d==4) str='4'; elseif (d==5) str='5'; elseif (d==6) str='6'; elseif (d==7) str='7'; elseif (d==8) str='8'; elseif (d==9) str='9'; else
str=num2str(d); end switch i
东北大学秦皇岛分校毕业设计(论文) 第 43 页
case 2 str2=str; case 3 str3=str; case 4 str4=str; case 5 str5=str; case 6 str6=str; otherwise str7=str; end end