汽车车牌的号码识别.docx
报告书目录1 技术要求12 基本原理13 各模块的功能23.1 图像预处理23.2 车牌定位53.3 字符分割和识别74 调试过程及结论105 心得体会106 参考文献10汽车车牌的号码识别1 技术要求用相机拍摄获取彩色汽车车牌的图片,应用MATLAB软件对所拍摄车牌号图片进行相应处理(如,去噪,去除背景提取目标,边缘分割,轮廓提取等)最终从一幅图像中提取车牌中的字母和数字(只能用黑色显示)。2 基本原理汽车车辆牌照识别系统的基本工作原理为:将摄像头拍摄到的包含车辆牌照的图像输入到计算机中进行预处理,再由检索模块对牌照进行搜索、检测、定位,并分割出包含牌照字符的矩形区域,然后对牌照字符进行二值化并将其分割为单个字符,然后输入JPEG或BMP格式的数字,输出则为车牌号码的数字。汽车车辆牌照识别系统的基本工作原理图如图1所示:字符分割车辆图1 基本工作原理图输出结果字符识别车牌的定位图像预处理图像采集我们知道输入的彩色图像包含大量颜色信息,会占用计算机较多的存储空间,且处理时也会降低系统的执行速度,因此对图像进行识别等处理时,通常将彩色图像转换为灰度图像,以加快处理速度。对图像进行灰度化处理、边缘提取、再利用形态学方法对车牌进行定位。具体步骤如下:首先通过MATLAB软件对图像进行灰度转换,二值化处理然后采用4X1的结构元素对图像进行腐蚀,去除图像的噪声。采用25X25的结构元素,对图像进行闭合应算使车牌所在的区域形成连通。在进行形态学滤波去除其它区域。3 各模块的功能3.1 图像预处理对汽车图像进行图像转换、图像增强和边缘检测等。载入车牌图像如代码如下所示:I=imread('car.jpg');%应用imread函数从图形文件中读取命名为car的图像;figure(); subplot(3,2,1),imshow(I), title('原始图像');%以“原始图像”为题目将图片显示出来。结果如图2所示:图-2 原始图像对提取出来的原始图像进行下列处理:转化为灰度图像,采用Robert算子进行边缘检测,腐蚀图像,填充图像,形态滤波。具体各个过程的源程序如下所示:I1=rgb2gray(I); %转化为灰度图像subplot(3,2,2),imshow(I1),title('灰度图像');%用imshow函数显示灰度图像如图3所示:图-3 灰度图像I2=edge(I1,'robert',0.09,'both'); %采用robert算子进行边缘检测subplot(3,2,3),imshow(I2),title('边缘检测后图像');%用imshow函数显示边缘检测后图像如图4所示:图-4 边缘检测后图像se=1;1;1; %线型结构元素 I3=imerode(I2,se); %腐蚀图像subplot(3,2,4),imshow(I3),title('腐蚀后边缘图像');%用imshow函数显示腐蚀后边缘图像如图5所示:图-5 腐蚀后边缘图像se=strel('rectangle',25,25); %矩形结构元素I4=imclose(I3,se); %图像聚类、填充图像subplot(3,2,5),imshow(I4),title('填充后图像');%用imshow函数显示填充后图像如图6所示:图-6 填充后图像I5=bwareaopen(I4,2000);%去除聚团灰度值小于2000的部分subplot(3,2,6),imshow(I5),title('形态滤波后图像');%用imshow函数显示形态滤波后图像如图7所示 图-7 形态滤波后图像3.2 车牌定位从预处理后的汽车图像中分割出车牌图像。即在一幅车辆图像中找到车牌所在的位置。具体代码如下所示: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(); PY1=MaxY; while (Y1(PY1,1)>=50)&&(PY1>1) PY1=PY1-1; end PY2=MaxY; while (Y1(PY2,1)>=50)&&(PY2<y) PY2=PY2+1; end IY=I(PY1:PY2,:,:); X1=zeros(1,x); for j=1:x for i=PY1:PY2 if(I6(i,j,1)=1) X1(1,j)= X1(1,j)+1; end end end PX1=1; while (X1(1,PX1)<3)&&(PX1<x) PX1=PX1+1; end 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,1),imshow(dw),title('定位剪切后的彩色车牌图像');程序运行结果得到如图8所示图形:图-8 车牌定位和处理后图形3.3 字符分割和识别对分割出的车牌图像进行几何校正、去噪、二值化以及字符分割以从车牌图像中分离出组成车牌号码的单个字符图像,对分割出来的字符进行预处理(二值化、归一化),然后分析提取,对分割出的字符图像进行识别给出文本形式的车牌号码。源代码如下所示:if isrgb(I) I1 = rgb2gray(dw); %将RGB图像转化为灰度图像else I1=I; endg_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,2);imshow(I1),title('二值化车牌图像');I2=bwareaopen(I1,20);subplot(3,2,3);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 endPy1=1;Py0=1;while (Y1(Py0,1)<20)&&(Py0<y1) Py0=Py0+1;endPy1=Py0; while(Y1(Py1,1)>=20)&&(Py1<y1) Py1=Py1+1; endI2=I2(Py0:Py1,:,:);subplot(3,2,4);imshow(I2),title('目标车牌区域');X1=zeros(1,x1);for j=1:x1 for i=1:y1 if(I3(i,j,1)=1) X1(1,j)= X1(1,j)+1; end end endPx0=1;Px1=1;for i=1:7 while (X1(1,Px0)<3)&&(Px0<x1) Px0=Px0+1; end Px1=Px0; while (X1(1,Px1)>=3)&&(Px1<x1)|(Px1-Px0)<10) Px1=Px1+1; end Z=I2(:,Px0:Px1,:); switch strcat('Z',num2str(i) case 'Z1' PIN0=Z; case 'Z2' PIN1=Z; case 'Z3' PIN2=Z; case 'Z4' PIN3=Z; case 'Z5' PIN4=Z; case 'Z6' PIN5=Z; otherwise PIN6=Z; end figure(3); subplot(1,7,i); imshow(Z);%将分割出的字符在figure(3)中显示出来 Px0=Px1;end通过执行以上实现字符分割和识别的程序,可以得到如下的图9所示图像,最终实现题目所得要求。图-9 分割后识别的图形4 调试过程及结论通过对程序的调试和修改能实现实验的要求,当输入相应模块的名称进行运行时可以得到相应的图形,并且能最终得到清晰的图像。在调试过程中很多地方出现Missing variable or function提示错误,经过对程序的检查发现此类的错误提示多数是因为输入了不合法的字符或者是错误的标点符号造成的,只要将提示错误位置改为合法字符或标点就能解决这类问题。另外在分割提取图像中不能得到所要的只含有车牌号的图像,而是得到整幅图像,经过排查得知这个错误是在分割时使用了错误的函数名称,将错误的函数名称改过来就能得到符合要求的图像。经过调试和修改最终得到了符合训练要求的图像。5 心得体会6 参考文献1 何东健,数字图像处理.西安电子科技大学出版社,2008年.2 阮秋琦,数字图像处理.电子工业出版社,2001年.3 徐建华,图像处理与分析.科学出版社,1999年.4 徐中立,数字图像的智能信息处理.科学教育出版社,2001年.11