d=qiege(d); else
temp=qiege(imcrop(d,[1 1 wide m])); %返回已经切割好的区域 [m,n]=size(temp); all=sum(sum(temp));
two_thirds=sum(sum(temp([round(m/3):2*round(m/3)],:))); if two_thirds/all>y2
flag=1;word1=temp; % WORD 1 end
d(:,[1:wide])=0;d=qiege(d); end end
% 分割出第二个字符
[word2,d]=getword(d);%getword的函数与上面类似,字母、数字和文字在一些细节上需要去区分
% 分割出第三个字符 [word3,d]=getword(d); % 分割出第四个字符 [word4,d]=getword(d); % 分割出第五个字符 [word5,d]=getword(d); % 分割出第六个字符
[word6,d]=getword(d); % 分割出第七个字符 [word7,d]=getword(d);
subplot(5,7,1),imshow(word1),title('1'); subplot(5,7,2),imshow(word2),title('2'); subplot(5,7,3),imshow(word3),title('3'); subplot(5,7,4),imshow(word4),title('4'); subplot(5,7,5),imshow(word5),title('5'); subplot(5,7,6),imshow(word6),title('6'); subplot(5,7,7),imshow(word7),title('7'); [m,n]=size(word1);
% 将生成的图片归一化大小为 40*20 word1=imresize(word1,[40 20]); word2=imresize(word2,[40 20]); word3=imresize(word3,[40 20]); word4=imresize(word4,[40 20]); word5=imresize(word5,[40 20]); word6=imresize(word6,[40 20]); word7=imresize(word7,[40 20]);
subplot(5,7,15),imshow(word1),title('1');
subplot(5,7,16),imshow(word2),title('2'); subplot(5,7,17),imshow(word3),title('3'); subplot(5,7,18),imshow(word4),title('4'); subplot(5,7,19),imshow(word5),title('5'); subplot(5,7,20),imshow(word6),title('6'); subplot(5,7,21),imshow(word7),title('7'); imwrite(word1,'1.jpg'); imwrite(word2,'2.jpg'); imwrite(word3,'3.jpg'); imwrite(word4,'4.jpg'); imwrite(word5,'5.jpg'); imwrite(word6,'6.jpg'); imwrite(word7,'7.jpg');
liccode=char(['0':'9' 'A':'Z' '苏豫陕鲁晋']); %建立自动识别字符代码表 SubBw2=zeros(40,20); @*20的零矩阵 l=1; for I=1:7
ii=int2str(I); %int2str整型转换字符串 t=imread([ii,'.jpg']);
SegBw2=imresize(t,[40 20],'nearest'); %改变图片的大小 if l==1 %第一位汉字识别 kmin=37;
kmax=41; %模板中汉字所在的位置 elseif l==2 %第二位 A~Z 字母识别 kmin=11;
kmax=36; %模板中数字所在的位置
else l>=3 %第三位以后是字母或数字识别 kmin=1;
kmax=36; %模板中字母所在的位置
end
for k2=kmin:kmax
fname=strcat('字符模板\\',liccode(k2),'.jpg'); SamBw2=imread(fname);
Error(k2)=sum(sum(abs(SegBw2-SamBw2)));
%将现有字符逐个与模板字符相减,认为相减误差最小的现有字符与该模板字符匹配 end
Error1=Error(kmin:kmax); MinError=min(Error1);
findc=find(Error1==MinError);%寻找最匹配的字符
Code(l*2-1)=liccode(findc(1)+kmin-1);%将上述找到的字符位置与liccode中的字符链接上
Code(l*2)=' ';%在字符之间加空格 l=l+1; end
figure(10),imshow(a),title (['车牌号码:', Code],'Color','b');
函数getword
function [word,result]=getword(d) word=[];flag=0;y1=8;y2=0.5; while flag==0 [m,n]=size(d); wide=0;
while sum(d(:,wide+1))~=0 && wide<=n-2 wide=wide+1; end
temp=qiege(imcrop(d,[1 1 wide m])); [m1,n1]=size(temp); if wide
d=qiege(d); % 切割出最小范围 else word=[];flag=1; end else