1 简介
车辆车牌识别系统的基本工作原理为:将摄像头拍摄到的包含车辆车牌的图像输入到计算机中进行预处理,再由检索模块对车牌进行搜索、检测、定位,并分割出包含车牌字符的矩形区域,然后对车牌字符进行二值化并将其分割为单个字符,然后输入JPEG或BMP格式的数字,输出则为车牌号码的数字。车牌自动识别是一项利用车辆的动态视频或静态图像进行车牌号码、车牌颜色自动识别的模式识别技术。其硬件基础一般包括触发设备、摄像设备、照明设备、图像采集设备、识别车牌号码的处理机等,其软件核心包括车牌定位算法、车牌字符分割算法和光学字符识别算法等。一个完整的车牌识别系统应包括车辆检测、图像采集、车牌识别等几部分。车牌识别单元对图像进行处理,定位出车牌位置,再将车牌中的字符分割出来进行识别,然后组成车牌号码输出,再获得当前时间。通过出停车场时对车辆再次进行处理,获得停车时间。
2 部分代码
%-----------------------------出停车场---------------------------
clc;
clear all;
[filename,filepath]=uigetfile('.jpg','输入一个需要识别的车牌图像');% 直接自动读入%
fil=strcat(filepath,filename); %strcat函数:连接字符串;把filepath的字符串与filename的连接,即路径/文件名
I=imread(fil);
I1=rgb2gray(I);
I2=edge(I1,'roberts',0.15,'both');
se=[1;1;1];
I3=imerode(I2,se);
se=strel('rectangle',[25,25]);
I4=imclose(I3,se);
I5=bwareaopen(I4,2000);
[y,x,z]=size(I5);
myI=double(I5);
t
% 滤波
h=fspecial('average',3);
d=im2bw(round(filter2(h,d)));
end
% 分割出第二个字符
[word2,d]=getword(d);
% 分割出第三个字符
[word3,d]=getword(d);
% 分割出第四个字符
[word4,d]=getword(d);
% 分割出第五个字符
[word5,d]=getword(d);
% 分割出第六个字符
[word6,d]=getword(d);
% 分割出第七个字符
[word7,d]=getword(d);
[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]);
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);
l=1;
for I=1:7;
ii=int2str(I);
t=imread([ii,'.jpg']);
SegBw2=imresize(t,[40 20],'nearest');
SegBw2=double(SegBw2)>20;
if l==1 %第一位汉字识别
kmin=37;
kmax=43;
elseif l==2 %第二位字母识别
kmin=11;
kmax=36;
else l>=3 %第三位后字母或数字识别
kmin=1;
kmax=36;
end
for k2=kmin:kmax
fname=strcat('字符模板\',liccode(k2),'.jpg');
SamBw2=imread(fname);
SamBw2=double(SamBw2)>1;
for i=1:40
for j=1:20
SubBw2(i,j)=SegBw2(i,j)-SamBw2(i,j);
end
end
%相当于两幅图相减得第三幅图
Dmax=0;
for k1=1:40;
for l1=1:20
if(SubBw2(k1,l1)>0 || SubBw2(k1,l1)<0)
Dmax=Dmax+1;
end
end
end
Error(k2)=Dmax;
end
Error1=Error(kmin:kmax);
MinError=min(Error1);
findc=find(Error1==MinError);
Code(l*2-1)=liccode(findc+kmin-1);
Code(l*2)=' ';
l=l+1;
end
t=toc;
%与文本文件数据对比
file=fopen('Data.txt');
while feof(file)~=1
fid=fgetl(file);
if(strcmp(fid,Code)==1)
fic=fgetl(file);
end
end
fclose(file);
fib=datestr(now);
fie=datevec(fic);
fid=datevec(fib);
ts=etime(fid,fie);
aa={Code;num2str(ts);'单位为秒'};
msgbox(aa,'车牌及停车时间');%弹出框
3 仿真结果
4 参考文献
[1]赖特. "基于模板匹配及人工神经网络算法的图像识别应用——MATLAB实现机动车牌号码辨识." 智能建筑与智慧城市 11(2017):5.
部分理论引用网络文献,若有侵权联系博主删除。
5 MATLAB代码与数据下载地址
见博客主页