《基于MATLAB的车牌识别系统设计完整版样本.doc》由会员分享,可在线阅读,更多相关《基于MATLAB的车牌识别系统设计完整版样本.doc(25页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、资料内容仅供您学习参考,如有不当之处,请联系改正或者删除。基于MATLAB的车牌识别系统设计 学 院 测控与通信工程学院专 业 信号与信息处理学生姓名 二妮子 学 号 指导教师 么么哒 基于MATLAB的车牌识别系统设计摘要: 本文主要介绍了基于MATLAB的有关数字图像处理的车牌数字识别系统。系统是利用单张包含车牌的静态图片进行识别的, 整个识别过程主要分为车牌定位和字符分割和字符识别三个大的模块。而其中的字符识别是系统的核心部分。字符识别当前运用的最多的就是神经网络和模板匹配的方法, 本文所介绍的就是基于神经网络的方法来实现车牌数字的识别。过程中也相应结合了特征提取、 直方图统计等一系列方
2、法。从实验得知, 这种神经网络的方法实现简单, 且容易理解, 在确保识别准确率的前提下, 能够提高识别的效率, 使得系统在比较准确地定位了车牌及分割出字符后, 能更准确地实现字符的识别。关键词: 车牌识别; matlab; 神经网络1 引言随着中国交通运输的不断发展, 智能交通系统( Intelligent Traffic System, 简称ITS) 的推广变的越来越重要, 而作为ITS的一个重要组成部分, 车牌识别系统( LPRS) 是智能交通系统的重要组成部分。随着机动车辆数量的大幅度增加以及计算机技术的发展, 人们对交通控制系统的要求显著提高。因而智能交通系统被广泛地应用于交通控制系统
3、当中, 比如高速公路收费、 停车场车辆管理、 违章车辆监控、 交通诱导控制等场合。这使得车牌识别系统也得到了更广泛的关注。与传统的车辆管理方法比较, 车牌识别系统能够大大提高交通管理的效率和水平, 帮助实现车辆管理的规范化。由于牌照是机动车辆管理的唯一标识符号, 因此, 车辆牌照识别系统的研究在机动车管理方面具有十分重要的实际意义。2 车辆牌照识别系统工作原理车辆牌照识别系统的基本工作原理为: 将摄像头拍摄到的包含车辆牌照的图像经过视频卡输入到计算机中进行预处理, 再由检索模块对牌照进行搜索、 检测、 定位, 并分割出包含牌照字符的矩形区域, 然后对牌照字符进行二值化并将其分割为单个字符, 然
4、后输入JPEG或BMP格式的数字, 输出则为车牌号码的数字。3 车辆牌照识别系统组成1.读入图像: 输入的图像由于受到天气影响, 包括晴天、 阴天、 晚上等,由于光照影响和摄像机曝光的不同,再加上有些车牌老化污损、 陈旧退色,这些都可能使车牌图像产生对比度不足的弊端,图像细节分辨不清,车牌字符部分不突出.而且,对高速行进中的汽车拍摄的图像往往产生模糊、 扭曲、 变形等现象,这些都增加了预处理的难度。而这些处理需要很复杂的过程, 因为系统把读入的图片默认为比较清晰的、 几乎没有倾斜角度的图片。 2.图像预处理: 图像预处理过程需要把图像转换成便于车牌定位的二值化图像。需要经过图像灰度化, 图像增
5、强, 边缘提取, 二值化操作。 3.车牌定位: 从预处理后的汽车图像中分割出车牌图像。即在一幅车辆图像中找到车牌所在的位置。4.字符分割: 对车牌图像进行几何校正、 去噪、 二值化以及字符分割以从车牌图像中分离出组成车牌号码的单个字符图像5.字符识别: 对分割出来的字符进行预处理( 二值化、 归一化) , 然后分析提取, 对分割出的字符图像进行识别给出文本形式的车牌号码。4 汽车牌照识别系统的matlab实现4.1 图像预处理 图像在形成、 传输或变换过程中, 受多种因素的影响, 如: 光学系统失真、 系统噪声、 曝光不足或过量、 相对运动等, 往往会与原始景物之间或图像与原始图像之间产生了某
6、种差异, 这种差异称为降质或退化。因此在图像处理之前必须进行预处理, 包括去除噪音、 边界增强、 增加亮度等。 输入的彩色图像包含大量颜色信息, 会占用较多的存储空间, 且处理时也会降低系统的执行速度, 因此对图像进行识别等处理时, 常将彩色图像转换为灰度图像, 以加快处理速度。对图像进行灰度化处理、 边缘提取、 再利用形态学方法对车牌进行定位。 具体步骤如下: 首先对图像进行灰度转换, 二值化处理然后采用4X1的结构元素对图像进行腐蚀, 去除图像的噪声。采用25X25的结构元素, 对图像进行闭合应算使车牌所在的区域形成连通。再进行形态学滤波去除其它区域。图像预处理原图像灰度图像边缘检测腐蚀图
7、像填充后图像形态学滤波后图像 经过对比原始图片, 我们能够发现形态滤波后的图像已经很接近正确的车牌位置了, 因此后期处理将经过这张图来找出车牌位置。车牌定位 观察经过预处理后得到的图像发现车牌位置有明显的矩形有明显的矩形图样, 经过对矩形区域的定位即可获得具体的车牌位置。( 1) 车牌的行起始和终止位置的确定。车牌的列起始位置和终止位置的确定。(2) 最后拼合获取的车牌在图像的行列位置定位剪切后彩色车牌图像(3) 字符分割 在汽车牌照自动识别过程中, 字符分割有承前启后的作用。它在前期牌照定位的基础上进行字符的分割, 然后再利用分割的结果进行字符识别。灰度图像二值化车牌图像 4.3 车牌字符识
8、别建立字符模板数据库 模板库的合理建造是字符识别准确的关键之一, 因此在字符识别之前必须把模板库设置好。汽车牌照的字符一般有 7个, 大部分车牌第一位是汉字, 一般代表车辆所属省份, 或是军种,警别等有特定含义的字符简称; 紧接其后的为字母与数字。车牌字符识别与一般文字识别在于它的字符数有限, 十个阿拉伯数字09, 26个大写英文字母AZ以及相关的车牌用汉字: 京、 沪、 苏、 台、 港、 澳、 甲、 乙、 丙、 使、 领、 学、 试、 境、 消、 边、 警等, 以及新式军牌中的汉字南、 兰、 广、 北、 沈、 济、 空、 海等; 车牌颜色: 蓝、 白、 黑、 黄等。因此建立字符模板库也极为方
9、便。4.3.1 构造训练样本如下图所示的数字和字母 建立模板数据库时必须对这些图片进行统一处理, 因为对前面处理分割后的车牌图像的测量得知单个字符的最佳宽高比是1: 2, 因此将这些图片归一化为5025大小; 因为之后的字符识别考虑使用神经网络算法进行字符识别, 因此再将上面归一化后的模板图像的样本排列在一起构成125018的矩阵样本。 将样本进行归一化为50X20大小, 再将图像按列转换成一个1000X1的行向量, 将上述18个图像的样本排列在一起构成1000X18的矩阵样本, 尽可能多的采集汽车图像提取车牌, 部分切分出车牌字符, 构造出更多1000X18的矩形样本, 用构造好的样本库对神
10、经网络进行训练。4.3.2 构造输入样本, 按同样的方法, 将前面分割出的样本归一化 4.3.3 神经网络进行识别总结 当前, 基于数字图像的车牌数字识别系统已经开发完毕。系统设计过程中, 在对图像处理概念和方法有了一定了解之后, 开始了系统的开发, 此过程大概用了一个半月时间。而后完成系统的实现和测试。系统基本完成了当初预计的功能, 根据输入的包含车牌信息的静态图片, 利用神经网络方法识别车牌内部数字。就当前结果来看, 系统基本实现了当初预计的功能。 本系统的特点: 1. 原创性: 在消化理解了现有一些图像操作算法的基础上, 根据实际情况, 将有关算法转化为了个人的方法, 从系统实验结果能够
11、看到, 这些算法起到了一定效果 2. 多方式运行: 系统能够实现一键运行, 即运行程序立即显现结果。同时, 能够进行分步运行, 帮助用户及使用者观察到系统每一步运行所产生的变化, 进而更加理解系统的作用, 能够更好的运行系统。 3. 方法的丰富性: 系统中运用了多种图像处理算法, 并加之个人理解, 从而形成了一个功能比较齐全的软件系统。展望 虽然系统当前完成了基本功能, 可是由于图像处理操作很多, 而且其设计的知识也相当的广, 在短时间内很难全部理解和灵活运用, 再加之个人技术水平的限制, 因此系统仍存在一些不足之处, 总结起来主要有以下三个方面: 1. 系统默认输入图片为具有一定清晰度的图片
12、, 可是也会有模糊的情况, 系统应降低它的局限性, 因此应增加一些更进一步的图像增强的操作, 以使得能够处理大部分图片, 且能更好的进行车牌定位。 2. 车牌定位算法, 虽然能够定位出车牌的位置, 但有时还是会出现一定偏差, 仍能够进一步完善。 3.系统字符识别过程中的神经网络参数选择如果更加精确, 能够更加准确的识别。附录: clear all;close all;clc; I=imread(H:/532.jpg); %读取图片 figure(1);imshow(I);I1=rgb2gray(I); %转化为灰度图像 figure(2);imshow(I1);I2=edge(I1,rober
13、ts,0.09,both); %采用robert算子进行边缘检测 figure(3);imshow(I2);se=1;1;1; %线型结构元素 I3=imerode(I2,se); %腐蚀图像figure(4);imshow(I3);se=strel(rectangle,25,25); %矩形结构元素 I4=imclose(I3,se); %图像聚类、 填充图像 figure(5);imshow(I4);I5=bwareaopen(I4, ); %去除聚团灰度值小于 的部分 figure(6);imshow(I5);y,x,=size(I5); I6=double(I5); %绘制行曲线图 Y
14、1=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 figure(7); subplot(1,2,1); plot(0:y-1,Y1),title(行像素灰度值累计),xlabel(行值),ylabel(像素和); temp, MaxY=max(Y1); PY1=MaxY; while (Y1(PY1,1)=80)&(PY11) PY1=PY1-7; end PY2=MaxY; while (Y1(PY2,1)=80)&(PY2y) PY2=PY2+7; end %绘制列曲线图 X1
15、=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 subplot(1,2,2); plot(0:x-1,X1),title(列像素灰度值累计),xlabel(列值),ylabel(像数和); PX1=1; while (X1(1,PX1)3)&(PX1x) PX1=PX1+7; end PX2=x; while (X1(1,PX2)PX1) PX2=PX2-7; end DW=I(PY1:PY2,PX1:PX2,:); figure(8); imshow(DW),title(
16、车牌定位后图像);% 车牌图像转为灰度 if isrgb(I) I1 = rgb2gray(I); else I1 = I; end % 二值化车牌图像 I1 = im2bw(I1,graythresh(I1);%二值化图像 I2 = bwareaopen(I1,16);%去除小于16像素的区块 figure(); subplot(1,2,1); imshow(I2),title(二值化车牌图像); % 分割字符按行积累量 y,x=size(I2); I3=double(I2); X1=zeros(1,x); for j=1:x for i=1:y if(I3(i,j,1)=1) X1(1,j
17、)= X1(1,j)+1; end end end subplot(1,2,2); plot(0:x-1,X1),title(车牌列像素点累计),xlabel(列值),ylabel(像素和); % 分割字符 Px0=1; Px1=1; figure(); for i=1:7 while (X1(1,Px0)3)&(Px0=3)&(Px1x)|(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 Z
18、4 PIN3=Z; case Z5 PIN4=Z; case Z6 PIN5=Z; otherwise PIN6=Z; end subplot(1,7,i); imshow(Z); Px0=Px1; end function inpt = Pretreatment(I) % 训练样本前期处理 if isrgb(I) I1 = rgb2gray(I); else I1=I; end I1=imresize(I1,50 25);%将图片统一划为50*25大小 I1=im2bw(I1,0.9); m,n=size(I1); inpt=zeros(1,m*n); % 将图像按列转换成一个行向量 for
19、 j=1:n for i=1:m inpt(1,m*(j-1)+i)=I1(i,j); end end close all; clear all; % 归一化训练样本 I0=pretreatment(imread(BP/0.jpg); I1=pretreatment(imread(BP/1.jpg); I2=pretreatment(imread(BP/2.jpg); I3=pretreatment(imread(BP/3.jpg); I4=pretreatment(imread(BP/4.jpg); I5=pretreatment(imread(BP/5.jpg); I6=pretreatm
20、ent(imread(BP/6.jpg); I7=pretreatment(imread(BP/7.jpg); I8=pretreatment(imread(BP/8.jpg); I9=pretreatment(imread(BP/9.jpg); I10=pretreatment(imread(BP/A.jpg); I11=pretreatment(imread(BP/B.jpg); I12=pretreatment(imread(BP/C.jpg); I13=pretreatment(imread(BP/D.jpg); I14=pretreatment(imread(BP/G.jpg); I
21、15=pretreatment(imread(BP/K.jpg); I16=pretreatment(imread(BP/L.jpg); I17=pretreatment(imread(BP/M.jpg); P=I0,I1,I2,I3,I4,I5,I6,I7,I8,I9,I10,I11,I12,I13,I14,I15,I16,I17; T=eye(18,18); %输出样本 % bp神经网络参数设置 net=newff(minmax(P),1250,32,18,logsig,logsig,logsig,trainrp); net.inputWeights1,1.initFcn =randnr;
22、 net.layerWeights2,1.initFcn =randnr; net.trainparam.epochs=5000; net.trainparam.show=50; %net.trainparam.lr=0.003; net.trainparam.goal=0.; net=init(net); net,tr=train(net,P,T); %训练样本 % 测试 I=imread(CAR/0.jpg); DW=Location(I);%车牌定位 PIN0,PIN1,PIN2,PIN3,PIN4,PIN5,PIN6=StringSplit(DW);%字符分割及处理 % 测试字符, 得
23、到识别数值 PIN0=pretreatment(PIN0); PIN1=pretreatment(PIN1); PIN2=pretreatment(PIN2); PIN3=pretreatment(PIN3); PIN4=pretreatment(PIN4); PIN5=pretreatment(PIN5); PIN6=pretreatment(PIN6); P0=PIN0,PIN1,PIN2,PIN3,PIN4,PIN5,PIN6; for i=2:7 T0= sim(net ,P0(:,i); T1 = compet (T0) ; d = find(T1 = 1) - 1; if (d=1
24、0) str=A; elseif (d=11) str=B; elseif (d=12) str=C; elseif (d=13) str=D; elseif (d=14) str=G; elseif (d=15) str=K; elseif (d=16) str=L; elseif (d=17) str=M; elseif (d=0) str=0; elseif (d=1) str=1; elseif (d=2) str=2; elseif (d=3) str=3; elseif (d=4) str=4; elseif (d=5) str=5; elseif (d=6) str=6; elseif (d=7) str=7; elseif (d=8) str=8; elseif (d=9) str=9; else str=num2str(d); end switch i case 2 str2=str; case 3 str3=str; case 4 str4=str; case 5 str5=str; case 6 str6=str; otherwise str7=str; end end % 识别出的结果以标题形式显示在图上 S=strcat(黑,str2,str3,str4,str5,str6,str7); figure(); imshow(DW),title(S);