版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、图像处理车牌识别系统设计实验报告书目录一、摘要2二、 设计原理31、车牌的定位研究32、字符分割的研究33、字符识别的研究3三、 详细设计步骤31、车牌定位41.1 图像的预处理41.2车牌定位72、字符分割102.1对读入图像进行预处理操作112.2图像校正122.3去除水平方向上的边框132.4去除垂直方向上的边框152.5去除车牌上的圆点173、字符识别203.1建立字符模板数据库203.2对分割字符进行匹配224、系统界面的实现25四、 设计结果分析29五、 设计体会29车牌识别系统的设计一、摘要 车牌是一辆汽车独一无二的信息,因此,对车辆牌照的识别技术可以作为辨识一辆车最为有效的方法
2、。随着ITS(智能交通系统)的高速发展,对车牌识别技术的研究也随之发展。从根本上讲,牌照识别应用了先进的图像处理,模式识别,人工智能技术来获取,处理,解释,记录拍照的图像。目前, 汽车牌照的自动识别技术已经得到了广泛应用。汽车牌照自动识别整个处理过程分为预处理、边缘提取、车牌定位、字符分割、字符识别五大模块,其中字符识别过程主要由以下3个部分组成:正确地分割文字图像区域;正确的分离单个文字;正确识别单个字符。用MATLAB软件编程来实现每一个部分,最后识别出汽车牌照。在研究的同时对其中出现的问题进行了具体分析、处理。2、 设计原理 车牌自动识别是一项利用车辆的动态视频或静态图像进行车牌、车牌颜
3、色自动识别的模式识别技术。其核心包括车牌定位算法、车牌字符分割算法和字符识别算法等。输入要处理图像车牌定位 预处理单字符识别字符分割字符特征提取 图1 牌照识别系统原理图主要研究容如下:1、车牌的定位研究。先进行图像的预处理,包括RGB彩色图像的灰度化、图像灰度拉伸、图像边缘检测、灰度图的二值化等;车牌定位采用基于水平和垂直投影分布特征的方法。2、字符分割的研究。先对定位后的车牌图像进行预处理,然后按照车牌的先验信息,用区域增长算法来确定候选车牌的字符区域。3、字符识别的研究。对于提取出的单个字符,先进行归一化操作,再与给定的模板做对比,识别出字符。三、 详细设计步骤1. 车牌定位:车辆牌照识
4、别整个系统主要是由车牌定位和字符识别两部分组成,其中车牌定位又可以分为图像预处理与边缘提取模块和牌照的定位;导入图像图像灰度校正基于颜色的基础移除大对象对图像进行压缩处理流程图:对灰度校正后图像进行形态学处理提取边缘计算X,Y方向车牌区域寻找到车牌,完成车牌定位移除图像中小对象平滑处理1.1 图像的预处理为了用于牌照的分割和牌照字符的识别,原始图象应具有适当的亮度,较大的对比度和清晰可辩的牌照图象。但由于该系统的摄像部分工作于开放的户外环境,加之车辆牌照的整洁度、自然光照条件、拍摄时摄像机与牌照的矩离和角度以与车辆行驶速度等因素的影响,牌照图象可能出现模糊、歪斜和缺损等严重缺陷,因此需要对原始
5、图象进行识别前的预处理。(1) 一般的车牌识别只对小对象进行移除,但是有时候因为拍照原因,即使对图像进行了很好的预处理,还是不能排除一些比较大的又和车牌比较相像的地方,例如图(1)中,车后面的玻璃窗仅仅进行灰度处理和形态学处理,平滑处理是无法排除其对车牌定位的影响的,因此需要对大对象移除(移除大对象前需对图像进行统一化-压缩)。图(1)实现的代码:img=image;I=img;x,y,z=size(img);if x>2000|y>2000 img=img(1:2:end,1:2:end,:); x,y,z=size(img);endhsi=rgb2hsi(img);for i=
6、1:x for j=1:y if (hsi(i, j ,1)<=0.65&&hsi(i, j,1)>=0.55&&hsi(i, j, 2)>0.4);%0.4 0. hsi(i, j,2)=0; hsi(i, j,3)=1; ; else hsi(i, j,2)=0; hsi(i, j,3)=0; end end endorigonImg=hsi2rgb(hsi);rgbnew=origonImg;(2) 灰度校正: 由于牌照图象在拍摄时受到种种条件的限制和干扰,图象的灰度值往往与实际景物不完全匹配,这将直接影响到图象的后续处理。如果造成这种影
7、响的原因主要是由于被摄物体的远近不同,使得图象中央区域和边缘区域的灰度失衡,或是由于摄像头在扫描时各点的灵敏度有较大的差异而产生图象灰度失真,或是由于曝光不足而使得图像的灰度变化围很窄。这时就可以采用灰度校正的方法来处理,增强灰度的变化围、丰富灰度层次,以达到增强图象的对比度和分辨率。 灰度校正图 graynew=rgb2gray(rgbnew);(3) 边缘检测: 边缘是指图像局部亮度变化显著的部分,是图像风、纹理特征提取和形状特征提取等图像分析的重要基础。所以在此我们要对图像进行边缘检测。图象增强处理对图象牌照的可辩认度的改善和简化后续的牌照字符定位和分割的难度都是很有必要实现代码:ori
8、gonImg=hsi2rgb(hsi);rgbnew=origonImg; graynew=rgb2gray(rgbnew); graynew=imfill(graynew,'holes'); for i=1:3 se1=1 1 1;1 1 1;1 1 1; graynew=imdilate( graynew,se1); se=1;1;1; graynew=imerode(graynew,se);% 腐蚀Imerode(X,SE).其中X是待处理的像,%SE是结构元素对象 graynew=getcenter(graynew);graynew=double(graynew);ro
9、w col=size(graynew);1.2车牌定位牌照的定位是在经图象预处理后的原始灰度图象中确定牌照的具体位置,并将包含牌照字符的一块子图象从整个图象中分割出来,供字符识别子系统识别之用。图为定位出的车牌实现代码:车牌裁剪:row col=size(graynew); colArray=zeros(row,1);for i=1:row for j=1:col if (graynew(i,j,1)=1) colArray(i,1)=colArray(i,1)+1; end endend maxcount maxIndex=max(colArray); roughY=maxIndex; wh
10、ile (colArray(roughY,1)>=5)&&(roughY>1) roughY=roughY-1; endy1=roughY; roughY=maxIndex; while (colArray(roughY,1)>=5)&&(roughY<row) roughY=roughY+1; endy2=roughY; rowArray=zeros(1,col);for i=1:col for j=y1:y2 if graynew(j,i)=1 rowArray(1,i)=rowArray(1,i)+1; end endendmaxc
11、ount maxIndex=max(rowArray); roughX=maxIndex; while (rowArray(1,roughX)>=5)&&(roughX>1) roughX=roughX-1; endx1=roughX; roughX=maxIndex; while (rowArray(1,roughX)>=5)&&(roughX<col) roughX=roughX+1; endx2=roughX;dw=img(y1:y2,x1:x2,:); greenframe=drawframe(img,y1,y2,x1,x2);
12、imwrite(greenframe,'imgAfterLocation/greenframe.jpg'); imwrite(dw,'imgAfterLocation/dw.jpg');2、字符分割:传统的字符分割方法有投影法、模板匹配法、聚类分析法。由于投影法比较准确、编程较简单,且易于实际操作,能满足在复杂环境下,所以我们采用的是投影法分割车牌字符。车牌分割总流程图:各部分代码实现和运行效果:2.1、对读入图像进行预处理操作I=imread('imgAfterLocation/dw.jpg');%读取图像I1 = rgb2gray(I);%彩
13、色图像转化为灰度图像T=graythresh(I1);%找到灰度图像的阈值y,x,z=size(I1);%计算I1各维的大小Se=strel('disk',fix(y/45);%创建一个平坦的圆盘形结构元素I2=imopen(I1,Se);%取圆盘形的开运算subplot(2,2,3);%图一的第三幅图imshow(I2),title('开运算后图像');Se=strel('diamond',fix(y/140);%创建一个平坦的菱形结构元素I3=imclose(I2,Se);%取菱形结构的闭运算I4=double(I3);%变为双精度2.2图像
14、校正代码:bw1=edge(I1,'sobel', 'horizontal');%用Sobel水平算子对图像边化figure,imshow(bw1)bw1=imcrop(bw1,0 0 500 100);%对图像进行剪切,保留图像的 %一条直线,减小运算量figure,imshow(bw1)theta=0:179;%定义theta角度围r=radon(bw1,theta);%对图像进行Radon变换figure,imshow(r)m,n=size(r);c=90;for i=1:mfor j=1:n if r(1,1)<r(i,j) r(1,1)=r(i,
15、j); c=j;end endend %检测Radon变换矩阵中的峰值所对应的列坐标rot=90-c;%确定旋转角度A=imrotate(I1,rot,'crop');%对图像进行旋转矫正2.3计算行方向的像素,用来去除行方向上的边框代码:计算行像素:Y1=zeros(y,1);for i=1:yfor j=1:xif(I4(i,j,1)=1) Y1(i,1)= Y1(i,1)+1;%计算I3第j列有几个一 end end endfigure(2);plot(Y1,0:y-1),title('行方向像素点灰度值累计和'),xlabel('累计像素量
16、9;),ylabel('行');去除行方向边框:Py0=fix(y/2);Py1=fix(y/2)+1;while (Y1(Py0,1)>=30)&&(Py0>2) Py0=Py0-1;%找到去除边框后上边的位置endwhile (Y1(Py1,1)>=30)&&(Py1<y) Py1=Py1+1;%找到去除边框后下边的位置endZ1=I4(Py0:Py1,:,:);%将二值图像上下边框去除figure(3);imshow(Z1),title('将二值图像上下边框去除后图像');2.4计算列方向的像素,用来
17、去除垂直方向上的边框代码:y,x,z=size(Z1);%计算此时图像的大小计算列像素X1=zeros(1,x);for j=1:xfor i=1:y if(Z1(i,j,1)=1) X1(1,j)= X1(1,j)+1;%计算I3第j列有几个一 end end endfigure(4);plot(0:x-1,X1),title('列方向像素点灰度值累计和'),xlabel('列值'),ylabel('累计像素');去除垂直边框x1=fix(x/2)+1;for i=1:5while (i=5) while (X1(1,x1)>=15)&a
18、mp;&(x1<x) x1=x1+1;%找到去除边框后右边的位置 end i=i+1; while (X1(1,x1)<15)&&(x1<x)&&(i<4) x1=x1+1;%从车牌中间开始寻找字符间隙,直到找到第四个间隙%为止,即找到去除边框后车牌右边的位置 end endendx0=fix(x*45/440);%找到第一个字符的位置for i=1:2while (i=2) while (X1(1,x0)>=5)&&(x0>2) x0=x0-1;%从车牌的第一个字符开始寻找第一个字符间隙,找到%去除边
19、框左边的位置 end i=i+1; while (X1(1,x0)<5)&&(x0>1)&&i=2) x0=x0-1;%找到去除边框后左边的位置 end endendZ2=Z1(:,x0:x1,:);%将二值图像左右边框去除figure(5);imshow(Z2),title('将二值图像垂直边框去除后图像');2.5再次计算列方向的像素,用来去除车牌上的圆点代码:y,x,z=size(Z2);%计算此时图像的大小X1=zeros(1,x);for j=1:x for i=1:y if(Z2(i,j,1)=1) X1(1,j)= X1
20、(1,j)+1;%计算I3第j列有几个一 end end End去除车牌中的圆点:y,x,z=size(Z2);Z2=double(Z2);x1=fix(x*105/409);x2=fix(x*128/409);for i=1:y for j=x1:x2 Z2(i,j)=0; endendfigure(6);imshow(Z2),title('去除圆点后图像');2.6用投影法分割车牌,把分割出来的子图转成标准子图代码:用投影法分割Px0=1;Px1=1;y=fix(x*90/409);for i=1:7 while (X1(1,Px0)<10)&&(Px
21、0<x) Px0=Px0+1;%找到待分割字符左边的位置 end Px1=Px0; a=1; while (X1(1,Px1)>=10)&&(Px1<x)|(Px1<x)&&(a/y)<=0.5) Px1=Px1+1;%找到待分割字符右边的位置 a=Px1-Px0; end Z3=Z2(:,Px0:Px1,:);%二值化图像分割后 figure(7); subplot(1,7,i); imshow(Z3);%将二值化图像分割后显示出来2.7变换为标准子图Z4=imresize(Z3,40 20);%将分割后的二值图变换为标准子图 f
22、igure(1); subplot(1,7,i); imshow(Z4),title('标准子图');%将标准子图显示出来 Px0=Px1; imwrite(Z4,strcat('imgAfterSplit/',num2str(i),'.jpg');%把标准子图存到imagAfterSplit中End3、字符识别:牌照字符识别:字符识别方法目前主要有基于模板匹配算法和基于人工神经网络算法。基于模板匹配算法首先将分割后的字符二值化,并将其尺寸大小缩放为字符数据库中模板的大小,然后与所有的模板进行匹配,最后选最佳匹配作为结果。基于人工神经元网络的算法
23、有两种:一种是先对待识别字符进行特征提取,然后用所获得特征来训练神经网络分配器;另一种方法是直接把待处理图像输入网络,由网络自动实现特征提取直至识别出结果。实际应用中,牌照识别系统的识别率与牌照质量和拍摄质量密切相关。牌照质量会受到各种因素的影响,如生锈、污损、油漆剥落、字体褪色、牌照被遮挡、牌照倾斜、高亮反光、多牌照、假牌照等等;实际拍摄过程也会受到环境亮度、拍摄亮度、车辆速度等等因素的影响。这些影响因素不同程度上降低了牌照识别的识别率,也正是牌照识别系统的困难和挑战所在。为了提高识别率,除了不断的完善识别算法,还应该想办法克服各种光照条件,使采集到的图像最利于识别。本系统字符识别方法采用基
24、于模板匹配算法。3.1建立字符模板数据库模板库的合理建造是字符识别准确的关键之一,所以在字符识别之前必须把模板库设置好。汽车牌照的字符一般有 7 个,大部分车牌第一位是汉字,通常代表车辆所属省份,或是军种 警别等有特定含义的字符简称;紧接其后的为字母与数字。车牌字符识别与一般文字识别在于它的字符数有限, 十个阿拉伯数字09, 26 个大写英文字母 AZ 以与相关的车牌用汉字:京、沪、台、港、澳、甲、乙、丙、使、领、学、试、境、消、边、警等,以与新式军牌中的汉字南、兰、广、北、济、空、海等;车牌颜色:蓝、白、黑、黄等。所以建立字符模板库也极为方便。为了提高识别的准确率,本系统的为每个字符都建立一
25、个模板库,并且可以动态添加字符到模板库,随着字符模板的增加,识别率也随之提高。建立模板数据库时必须对这些图片进行统一处理,因为对前面处理分割后的车牌图像的测量得知单个字符的最佳宽高比是1:2,所以将这些图片归一化为40×20大小;因为之后的字符识别考虑使用模板匹配算法进行字符识别,所以再将上面归一化后的模板图像的样本排列在一起构成40×20的矩阵样本。以下分别是粤和A字符模板:3.2对分割字符进行匹配Recognition.m程序代码(最终返回识别的车牌号):function CarNum = recognition ()codes=char('0':
26、9;9' 'A':'Z' '京津沪渝吉辽鲁豫冀鄂湘晋青皖赣浙闽粤琼陕甘云川贵黑藏蒙桂新宁'); %建立自动识别字符代码表;'京津沪渝吉辽鲁豫冀鄂湘晋青皖赣浙闽粤琼陕甘云川贵黑藏蒙桂新宁'% 编号:0-9分别为 1-10;A-Z分别为 11-36;% 京 津 沪 渝 吉 辽 鲁 豫 冀 鄂 湘 晋 青 皖 % 赣 浙 闽 粤 琼 陕 甘 云 川 贵 黑 藏 蒙 桂 新 宁% 37 -67SubBw2=zeros(40,20); l=1;for I=1:7ii=int2str(I); % 将整型数据转换为字符串型数据t=imr
27、ead('imgAfterSplit/',ii,'.jpg');% 依次读入七位车牌字符SegBw2=imresize(t,40 20,'nearest'); % 对读入的字符进行缩放SegBw2=im2bw(SegBw2);if I=1 % 第一位汉字识别kmin=37; kmax=67;elseif I=2 % 第二位 AZ 字母识别kmin=11; kmax=36;else % 第三位以后是字母或数字识别 ; 即I>=3kmin=1; kmax=36;endindex=getFinalTemp(kmin,kmax,codes,SegB
28、w2,I);CarNum(l)=codes(index); l=l+1;end% xlabel('第三步:识别结果为: ', CarNum,'Color','b');getFinalTemp.m 程序代码(返回最终识别的单个字符index 下标):function index=getFinalTemp(minIndex,maxIndex,codes,SegBw2,numIndex)if numIndex<3 %后五位不能出现 i 、o 字母; for i=minIndex:maxIndex path=strcat('template
29、/', codes(i); %调用 getFromLib 遍历文件夹找出同一字符最佳的模板 maxSame=getFromLib(path,SegBw2); near(i)= maxSame; % 记录下字符与模板i同的点个数 endelse for i=minIndex:maxIndex% if i=find(codes='l')&&i=find(codes='O if codes(i)='l'&&codes(i)='O' path=strcat('template/', code
30、s(i); %调用 getFromLib 遍历文件夹找出同一字符最佳的模板 maxSame=getFromLib(path,SegBw2); near(i)= maxSame; % 记录下字符与模板i同的点个数 end endendnearest=max(near); % 差别最小的,不同字符模板index=find(near=nearest); % 找出差别最小的模板的下标getFromLib.m 程序代码(遍历单个字符模板库,返回最佳的模板):function maxSame=getFromLib(path,carNum) files=dir(path '/*.jpg');
31、 for i=1:length(files) file=imread(path '/' num2str(i) '.jpg' ); if islogical(file)=0 filebw=im2bw(file); else filebw=file; end subImg=carNum-filebw; % 以上相当于两幅图相减得到第三幅图 进行匹配 sameDots=subImg=0; % 记录下字符与模板一样的点个数 sumDots=sum(sameDots(:); arr(i)=sumDots; end maxSame=max(arr);4、 系统界面的实现:界面我们小组一共分有了两个模块:一个是父模块车牌识别系统,进行显图,定位,分割和识别的操作;另一个是子模块是字符模块,是为了增加字符的模块进库,提高车牌的识别效率。父模块车牌识别系统图一界面分别有载入图片,车牌定位,车牌分割,车牌识别和增加字符模块五个按钮,每个按钮对应不同的功能。载入车牌:选择你需
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 专业售后售后服务
- 社区党员先锋行动计划保证书
- 企业间借款合同范本格式设计
- 专业代理记账服务合同
- 学业成绩承诺函保证承诺
- 致爱人的道歉信请求女友原谅
- 点工协议书格式
- 专业企业保证书范文
- 数据备份与恢复合同
- 爆破作业合同范本模板
- 大众顶级 辉腾 减振控制的空气悬架_图文
- 血液透析专科操作流程及评分标准
- 电工新技术介绍(课堂PPT)
- 座板式单人吊具(课堂PPT)
- 托班一日生活情况反馈表
- 机电设备维护保养技术
- FLAC3D常用命令
- JGJ_T231-2021建筑施工承插型盘扣式钢管脚手架安全技术标准(高清-最新版)
- 毕业论文(设计)除雪车工作装置设计
- 镜片加工知识之四研磨
- 核电站1E级电气设备鉴定标准技术经验
评论
0/150
提交评论