车牌号码识别
第一部分 引言
现代智能交通系统(ITS)中,车牌号码自动识别是计算机视觉与模式识别技术在智能交通领域应用的重要研究课题之一,是实现交通管理智能化的重要环节。识别技术可应用于道路交通监控、交通事故现场勘察、交通违章自动纪录、高速公路自动收费系统、停车场自动安全管理、小区智能化管理等方面,具有巨大的经济价.因此车牌号码自动识别技术已经得到了广泛应用.汽车牌照自动识别整个处理过程分为预处理、边缘提取、车牌定位、字符分割、字符识别五大模块,其中字符识别过程主要由以下3个部分组成:①正确地分割文字图像区域;②正确的分离单个文字; 正确识别单个字符。用MATLAB软件编程来实现每一个部分,最后识别出汽车牌照。在研究的同时对其中出现的问题进行了具体分析,处理。
第二部分 对采集图像的预处理
数字图像处理(Digital Image Processing)又称为计算机图像处理,它是指将图像信号转换成数字信号并利用计算机对其进行处理的过程。数字图像处理最早出现于20世纪50年代,当时
的电子计算机已经发展到一定水平,人们开始利用计算机来处理图形和图像信息。数字图像处理作为一门学科大约形成于20世纪60年代初期.早期的图像处理的目的是改善图像的质量,它以人为对象,以改善人的视觉效果为目的。图像处理中,输入的是质量低的图像,输出的是改善质量后的图像,常用的图像处理方法有图像增强、复原、编码、压缩等。首次获得实际成功应用的是美国喷气推进实验室(JPL)。他们对航天探测器徘徊者7号在1964年发回的几千张月球照片使用了图像处理技术,如几何校正、灰度变换、去除噪声等方法进行处理,并考虑了太阳位置和月球环境的影响,由计算机成功地绘制出月球表面地图,获得了巨大的成功。随后又对探测飞船发回的近十万张照片进行更为复杂的图像处理,以致获得了月球的地形图、彩图及全景镶嵌图,获得了非凡的成果,为人类登月创举奠定了坚实的基础,也推动了数字图像处理这门学科的诞生。在以后的数字图像处理技术一般来讲,对图像进行处理(或加工、分析)的主要目的有三个方面:
(1) 提高图像的视感质量,如进行图像的亮度、彩变换,增强、抑制某些成分,对图像进行几何变换等,以改善图像的质量。
(2) 提取图像中所包含的某些特征或特殊信息,这些被提取的特征或信息往往为计算机
分析图像提供便利。提取特征或信息的过程是模式识别或计算机视觉的预处理。提取的特征可以包括很多方面,如频域特征、灰度或颜特征、边界特征、区域特征、纹理特征、形状特征、拓扑特征和关系结构等。
汽车牌照网上选号(3)图像数据的变换、编码和压缩,以便于图像的存储和传输。图像是人类获取和交换信息的主要来源,因此,图像处理的应用领域必然涉及到人类生活和工作的方方面面.随着人类活动范围的不断扩大,图像处理的应用领域也将随之不断扩大。
1、图象的采集与转换(代码及截图)
I=imread(’car.jpg’);
figure(1),imshow(I);title('原图')
I1=rgb2gray(I);
figure(2),subplot(1,2,1),imshow(I1);title('灰度图');
figure(2),subplot(1,2,2),imhist(I1);title(’灰度图直方图');
I2=edge(I1,’robert',0。15,’both');
figure(3),imshow(I2);title('robert算子边缘检测')
se=[1;1;1];
I3=imerode(I2,se);
figure(4),imshow(I3);title('腐蚀后图像’);
se=strel('rectangle',[25,25]);
I4=imclose(I3,se);
figure(5),imshow(I4);title(’平滑图像的轮廓');
I5=bwareaopen(I4,2000);
figure(6),imshow(I5);title(’从对象中移除小对象’);
图1 原图 图2 灰度图
图3 reboot算子边缘图 图4 腐蚀后图像
图5 平滑图像轮廓图 图 6 从轮廓图中移除小对象后图像
2、牌照区域的分割
对车牌的分割可以有很多种方法,本程序是利用车牌的彩信息的彩分割方法。根据车牌底等有关的先验知识,采用彩像素点统计的方法分割出合理的车牌区域,确定车牌底蓝RGB对应的各自灰度范围,然后行方向统计在此颜范围内的像素点数量,设定合理的阈值,确定车牌在行方向的合理区域。然后,在分割出的行区域内,统计列方向蓝像素点的数量,最终确定完整的车牌区域.
[y,x,z]=size(I5);
myI=double(I5);
tic
Blue_y=zeros(y,1);
for i=1:y
for j=1:x
if(myI(i,j,1)==1)
Blue_y(i,1)= Blue_y(i,1)+1;%蓝像素点统计
end
end
end
[temp MaxY]=max(Blue_y);%Y方向车牌区域确定
PY1=MaxY;
while ((Blue_y(PY1,1)>=5)&&(PY1>1))
PY1=PY1—1;
end
PY2=MaxY;
while ((Blue_y(PY2,1)〉=5)&&(PY2〈y))
PY2=PY2+1;
end
IY=I(PY1:PY2,:,:);
Blue_x=zeros(1,x);%进一步确定x方向的车牌区域
for j=1:x
for i=PY1:PY2
if(myI(i,j,1)==1)
Blue_x(1,j)= Blue_x(1,j)+1;
end
end
end
PX1=1;
while ((Blue_x(1,PX1)<3)&&(PX1〈x))
PX1=PX1+1;
end
PX2=x;
while ((Blue_x(1,PX2)〈3)&&(PX2>PX1))
PX2=PX2-1;
end
PX1=PX1—1;%对车牌区域的校正
PX2=PX2+1;
dw=I(PY1:PY2-8,PX1:PX2,:);
t=toc;
figure(7),subplot(1,2,1),imshow(IY),title('行方向合理区域’);
figure(7),subplot(1,2,2),imshow(dw),title('定位剪切后的彩车牌图像’)
图7 行方向区域和最终定位出来的车牌
3、车牌进一步处理
经过上述方法分割出来的车牌图像中存在目标物体、背景还有噪声,要想从图像中直接提取出目标物体,最常用的方法就是设定一个阈值T,用T将图像的数据分成两部分:大于T的像素和小于T的像素,即对图像二值化。均值滤波是典型的线性滤波算法,它是指在图像上对目标像素给一个模板,该模板包括了其周围的临近像素.再用模板中的全体像素的平均值来代替原来像素值.(代码及截图如下:)
imwrite(dw,'dw。jpg');
[filename,filepath]=uigetfile(’dw。jpg’,'输入一个定位裁剪后的车牌图像');
jpg=strcat(filepath,filename);
a=imread('dw。jpg');
b=rgb2gray(a);
imwrite(b,’1.车牌灰度图像.jpg');
figure(8);subplot(3,2,1),imshow(b),title(’1。车牌灰度图像’)
g_max=double(max(max(b)));
g_min=double(min(min(b)));
T=round(g_max-(g_max-g_min)/3); % T 为二值化的阈值
[m,n]=size(b);
d=(double(b)>=T); % d:二值图像
imwrite(d,'2.车牌二值图像.jpg’);
figure(8);subplot(3,2,2),imshow(d),title('2.车牌二值图像’)
figure(8),subplot(3,2,3),imshow(d),title('3。均值滤波前')
% 滤波
h=fspecial('average',3);
d=im2bw(round(filter2(h,d)));
imwrite(d,'4。均值滤波后。jpg’);
figure(8),subplot(3,2,4),imshow(d),title('4。均值滤波后')
se=eye(2); % eye(n) returns the n—by—n identity matrix 单位矩阵
[m,n]=size(d);
if bwarea(d)/m/n>=0.365
d=imerode(d,se);
elseif bwarea(d)/m/n<=0。235
d=imdilate(d,se);
end
imwrite(d,’5。膨胀或腐蚀处理后.jpg');
figure(8),subplot(3,2,5),imshow(d),title('5。膨胀或腐蚀处理后')
图8
第三部分 车牌字符的分割与识别
在汽车车牌自动识别过程中,字符分割有着承前启后的作用。它在前期车牌定位的基础上进行字符的分割,然后再利用分割的结果进行字符识别。字符识别的算法很多,因为车牌字符间间隔较大,不会出现字符粘连情况,所以此处采用的方法为寻连续有文字的块,若长度大于某阈值,则认为该块有两个字符组成,需要分割。
一般分割出来的字符还要进行进一步的处理,以满足下一步字符识别的需要。但是对于车牌的识别,并不需要太多的处理就已经可以达到正确识别的目的.在此只进行了归一化处理,然后进行后期处理。
发布评论