基于 matlab 的汽车牌照识别程序
摘要:本次作业的任务是设计一个基于matlab的汽车牌照识别程序,能够实现车牌图像预处
理,车牌定位,字符分割,然后通过神经网络对车牌进行字符识别,最终从一幅图像中提取
车牌中的字母和数字,给出文本形式的车牌号码。
关键词:车牌识别,matlab,神经网络
1 引言
随着我国交通运输的不断发展,智能交通系统(Intelligent Traffic System,简称ITS)的
推广变的越来越重要,而作为ITS的一个重要组成部分,车辆牌照识别系统(vehicle license
plate recognition system,简称LPR)对于交通管理、治安处罚等工作的智能化起着十分重要
的作用。它可广泛应用于交通流量检测,交通控制于诱导,机场,港口,小区的车辆管理,
不停车自动收费,闯红灯等违章车辆监控以及车辆安全防盗等领域,具有广阔的应用前景。
由于牌照是机动车辆管理的唯一标识符号,因此,车辆牌照识别系统的研究在机动车管理方
面具有十分重要的实际意义。
2 车辆牌照识别系统工作原理
车辆牌照识别系统的基本工作原理为:将摄像头拍摄到的包含车辆牌照的图像通过视频
卡输入到计算机中进行预处理,再由检索模块对牌照进行搜索、检测、定位,并分割出包含
牌照字符的矩形区域,然后对牌照字符进行二值化并将其分割为单个字符,然后输入JPEG
或BMP格式的数字,输出则为车牌号码的数字。
3 车辆牌照识别系统组成
(1)图像预处理:对汽车图像进行图像转换、图像增强和边缘检测等。
(2)车牌定位:从预处理后的汽车图像中分割出车牌图像。即在一幅车辆图像中找到车牌
所在的位置。
(3)字符分割:对车牌图像进行几何校正、去噪、二值化以及字符分割以从车牌图像中分
离出组成车牌号码的单个字符图像
(4)字符识别:对分割出来的字符进行预处理(二值化、归一化),然后分析提取,对分
割出的字符图像进行识别给出文本形式的车牌号码。
4 汽车牌照识别系统的matlab实现
4.1 图像预处理与车牌定位
输入的彩色图像包含大量颜色信息,会占用较多的存储空间,且处理时也会降低系统
的执行速度,因此对图像进行识别等处理时,常将彩色图像转换为灰度图像,以加快处理
速度。对图像进行灰度化处理、边缘提取、再利用形态学方法对车牌进行定位。具体步骤
如下:首先对图像进行灰度转换,二值化处理然后采用4X1的结构元素对图像进行腐蚀,去
除图像的噪声。采用25X25的结构元素,对图像进行闭合应算使车牌所在的区域形成连通。
在进行形态学滤波去除其它区域。
I=imread('DSC01344.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);
for i=1:y
for j=1:x
if(I6(i,j,1)==1)
Y1(i,1)= Y1(i,1)+1;
end
end
end
[temp MaxY]=max(Y1);
figure();
subplot(3,2,1),plot(0:y-1,Y1),title('行方向像素点灰度值累计和'),xlabel('行值'),ylabel('像素');
%%%%%%%求的车牌的行起始位置和终止位置%%%%%%%%%
PY1=MaxY;
while ((Y1(PY1,1)>=50)&&(PY1>1))
PY1=PY1-1;
end
PY2=MaxY;
while ((Y1(PY2,1)>=50)&&(PY2
PX2=x;
while ((X1(1,PX2)<3)&&(PX2>PX1))
PX2=PX2-1;
end
PX1=PX1-1;
PX2=PX2+1;
%分割出车牌图像%
dw=I(PY1:PY2,PX1:PX2,:);
subplot(3,2,3),imshow(dw),title('定位剪切后的彩色车牌图像')
%将RGB图像转化为灰度图像
4.2 车牌字符分割
确定车牌位置后下一步的任务就是进行字符切分分离出车牌号码的全部字符图像。
I1 = rgb2gray(I);
g_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);
for i=1:y1
for j=1:x1
if(I3(i,j,1)==1)
Y1(i,1)= Y1(i,1)+1 ;
end
end
end
Py1=1;
Py0=1;
while ((Y1(Py0,1)<20)&&(Py0
=20)&&(Py1if(I3(i,j,1)==1)
X1(1,j)= X1(1,j)+1;
end
end
end
figure(5);
plot(0:x1-1,X1),title('列方向像素点灰度值累计和'),xlabel('列值'),ylabel('累计像素量');
Px0=1;
Px1=1;
%%%%%%%%%%%%分割字符%%%%%%%%%%%%%%%%%%
for i=1:7
while ((X1(1,Px0)<3)&&(Px0=3)&&(Px1