数字图像处理论文

 时间:2020-06-05  贡献者:zhideedu.com

导读:数字图像处理论文.docx,姓名 学号 成绩张鑫 1341901230江苏科技大学 数字图像处理本科生课程论文论文题目:车牌识别方法研究 完成时间:2016、6、5 所在专业:计算机科学与技术 所在班级:13419012车牌识别

数字图像处理论文.docx
数字图像处理论文.docx

姓名 学号 成绩张鑫 1341901230江苏科技大学 数字图像处理本科生课程论文论文题目:车牌识别方法研究 完成时间:2016、6、5 所在专业:计算机科学与技术 所在班级:13419012

车牌识别方法研究13 级计算机专业 2 班 1341901230 张鑫 摘要: 车牌识别在人类社会交通系统中担当重要角色,一个设计优良的车牌识别 系统会给人们生活带来极大的方便,本文通过运用 matlab 和数字图像处理的一 些知识简单通过图像预处理,车牌定位,字符分割,采用模板匹配法实现车牌字 符的识别。

关键词:图像预处理 边缘处理 字符分割 字符识别一、研究背景随着我国公路交通事业的发展,车辆的数量正在迅速增长,在给出行提供 方便的同时, 车辆管理上存在的问题日益突出,人工管理的方式已经不能满足实 际的需要。

微电子、 通信和计算机技术在交通领域的应用极大地提高了交通管理 效率。

作为信息来源的自动检测、图像识别技术越来越受到人们的重视。

近年来 计算机的飞速发展和数字图像技术的日趋成熟,为传统的交通管理带来巨大转 变,先进的计算机处理技术,不但可以将人力从繁琐的人工观察、监测中解放出 来, 而且能够大大提高其精确度,汽车牌照自动识别系统就是在这样的背景与目 的下进行开发的。

汽车牌照等相关信息的自动采集和管理对于交通车辆管理、园 区车辆管理、停车场管理、交警稽查等方面有着十分重要的意义,成为信息处理 技术的一项重要研究课题。

车牌识别的难点: 1)由于车牌图像多在室外采集,会受到光照条件、天气条件的影响,会出 现图像模糊,对比度低,目标区域过小,色彩失真等影响,并且会伴随复杂的背 景图像,这些都会影响车牌定位及识别。

2)每次采集时目标所处位置不会一样,采集视角会有很大变化,并且由于 车牌挂的不正,都将导致车牌出现扭曲。

3)牌照多样性。

其他国家的汽车牌照格式,如尺寸大小,牌照上字符的排 列等,通常只有一种。

而我国则根据不同车型、用途,规定了多种牌照格式,例 如分为军车、警车、普通车等。

我国标准车牌照是由汉字、英文字母和阿拉伯数 字组成的, 汉字的识别与字母和数字的识别有很大的不同, 增加了识别的难度。

4) 我国汽车牌照的底色和字符颜色多样, 蓝底白字、 黄底黑字、 黑底白字、 红底黑字、绿底白字等多种。

5)由于环境、道路或人为因素造成汽车牌照污染严重,这种情况下国外发 达国家不允许上路,而在我国仍可上路行驶。

使得车牌的对比度降低,特征不是 很明显,即使在定位准确的情况下,字符的识别也会受到很大影响。

目前在国内存在多种牌照格式,且存在以上种种困难和特殊性,加大了我

国车牌自动识别的难度,使得中国车辆牌照识别远远难于国外的车辆牌照识别。

因而如何提高识别率和识别处理的实时性及实用性成了一个紧要的任务。

二、主要理论概况2.1 一个完整的车牌号识别系统要完成从图像采集到字符识别输出,过程相当复杂,基本可以分成硬件部分跟软件部分,硬件部分包括系统触发、图像采 集,软件部分包括图像预处理、车牌位置提取、字符分割、字符识别四大部分, 一个车牌识别系统的基本结构如图 2.1 所示:原始图像图像预处 理车牌位置 提取字符分割字符识别输出结果图 2.1 车牌识别系统基本结构框图 1:原始图像:由停车场固定彩色摄像机、数码相机或其他扫描装置拍摄到 的图像。

2:图像预处理:对动态采集到的图像进行滤波,边界增强等处理以克服图 像处理。

3: 车牌位置提取: 通过运算得到图像的边缘, 再计算边缘图像的投影面积, 寻找谷峰点以大概确定车牌的位置,再计算连通域的宽高比,剔除不在阈值范围 内的连通域,最后便得到了车牌区域。

4:字符分割:利用投影检测的字符定位分割方法得到单个的字符。

5: 字符识别: 利用模板匹配的方法与数据库中的字符进行匹配从而确认出 字符。

6:输出结果:得到最后的汽车牌照,包括汉字、字母和数字。

2.2 车牌号图像识别要进行牌照号码、颜色识别 。

为了进行牌照识别,需要以下几个基本的步骤: a.牌照定位,定位图片中的牌照位置; b.牌照字符分割,把牌照中的字符分割出来; c.牌照字符识别,把分割好的字符进行识别,最终组成牌照号码。

牌照识别过程中,牌照颜色的识别依据算法不同,可能在上述不同步骤实 现,通常与牌照识别互相配合、互相验证。

三、研究的主要内容 3.1 总体实行方案

用摄像机获取自然环境下的汽车彩色图像,将彩色图像用 matlab 软件处 理成灰度图像并绘制直方图, 然后进行边缘检测图像的腐蚀,平滑图像以及去除 二值图像的小对象等操作, 再进行车牌的定位和字符分割与识别最终达到识别车 牌照的目的3.2各模块的实现输入待处理的原始图像3.2.1I=imread('d:\a.png'); imshow(I);结果如下图 4.2.13.2.2 图像的灰度化并绘制直方图 I=imread('d:\a.jpg'); I1=rgb2gray(I);%灰度处理 subplot(1,2,1),imshow(I1);title('gray image'); subplot(1,2,2),imhist(I1);title('灰度图直方图');

图 3.2.23.2.3 边缘检测边缘是一定存在在两个拥有不一样灰度值的相邻的区域之间的, 是灰度值 不连续的一种表现,也是分割图象、纹理和形状特征提取等图像分析的基础。

本 文用 Roberts 算子来实现边缘检测,他是一种利用局部差分算子寻找边缘的算 子,Robert 算子图像处理后结果边缘不是很平滑,当然还需要后续的腐蚀,平滑 图像以及去除二值图像的小对象操作来提高精度。

由于阈值越小检测的边缘越 丰富,结合选取的灰度图选择阈值为 0.16 较为合适。

I=imread('d:\cars.jpg'); I2=edge(I1,'roberts',0.16,'both'); imshow(I2);title('roberts operator edge detection image');

图 3.2.33.2.4 图像的腐蚀操作腐蚀操作就是通过不断的删除图片上的像素,将图片缩小,以此来达到去除小点 状图形的效果。

I=imread('d:\cars.jpg'); se=[1;1;1]; I3=imerode(I2,se); imshow(I3);title('corrosion image');

图 3.2.43.2.5 平滑图像图像平滑是去掉图像中的高频信息,使图像变的模糊,噪声一般都是高频信 息,平滑的过程也就意味着除去图片噪声的过程 I=imread('d:\cars.jpg'); se=strel('rectangle',[16,16]); I4=imclose(I3,se); imshow(I4);title('smothing image');

图 3.2.53.2.6 除去二值图像的小对象除去二值图像的小对象就为了去掉面积较小无关的白色区域, 将车牌所在的大面 积白色区域凸显出来。

I=imread('d:\cars.jpg');I5=bwareaopen(I4,200); figure(6),imshow(I5);title('remove the small objects');图 3.2.6

3.3 车牌定位自然环境下,汽车图像背景十分复杂,受光照不均匀、污渍等影响,所以在 自然背景下准确的将车牌区域确定下来是整个识别过程的关键, 所以先要对原图 像进行大范围横向(X),纵向(Y)像素点相关搜索,找到符合汽车牌照的候 选区,然后对候选区做进一步的分析,判断,最终确定一个最佳的区域作为牌照 区域。

[y,x,z]=size(I5);%返回 I5 各维的尺寸,存储在 x,y,z 中? myI=double(I5);%将 I5 转换成双精度?tic??????%tic 计时开始, toc 计 时结束? tic; Blue_y=zeros(y,1);%产生一个 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 方向车牌区域确定???%?MaxY 是 yellow_y 元素中最大值 temp 的索引?? PY1=MaxY; while ((Blue_y(PY1,1)>=5)&&(PY1>1)) PY1=PY1-1; end PY2=MaxY; while ((Blue_y(PY2,1)>=5)&&(PY2

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)&&(PX1PX1)) PX2=PX2-1; end PX1=PX1-1; %车牌区域校正?? PX2=PX2+1; size(I) dw=I(PY1:PY2-9,PX1:PX2,:); toc; subplot(1,2,1),imshow(IY),title('行方向合理区域');%车牌行方向 区域的确定? subplot(1,2,2),imshow(dw),title('定位裁减后的彩色车牌图像');% 车牌已经定位后的区域显示如下:

图 3.33.4 字符的分割与识别 3.4.1对分割出的彩色车牌图像进行灰度转换、二值化、均值滤波、腐蚀膨胀以 及字符分割以从车牌图像中分离出组成车牌号码的单个字符图像, 对分割出来的 字符进行预处理(二值化、归一化),然后分析提取,对分割出的字符图像进行 识别给出文本形式的车牌号码。

代码如下: imwrite(dw,'彩色车牌.jpg');%将彩色车牌写入彩色车牌文件中 a=imread('彩色车牌.jpg');%读取车牌文件中的数据 b=rgb2gray(a);%将车牌图像转换为灰度图 imwrite(b,'车牌灰度图像.jpg');%将灰度图像写入文件中 figure(8);subplot(3,2,1),imshow(b),title('车牌灰度图像') 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,'均值滤波前.jpg'); subplot(3,2,2),imshow(d),title('均值滤波前') %均值滤波前 % 滤波 h=fspecial('average',3); %建立预定义的滤波算子,average 为均值滤波,模板的尺寸为 3*3 d=im2bw(round(filter2(h,d)));%使用指定的滤波器 h 对 h 进行 d 即均 值滤波

imwrite(d,'均值滤波后.jpg'); subplot(3,2,3),imshow(d),title('均值滤波后') % 某些图像进行操作 % 膨胀或腐蚀 % se=strel('square',3); % 使用一个 3X3 的正方形结果元素对象对创建的图像进行膨胀 % 'line'/'diamond'/'ball'... se=eye(2); % eye(n) returns the n-by-n identity matrix 单位 矩阵 [m,n]=size(d);%返回矩阵 b 的尺寸信息, 并存储在 m,n 中 if bwarea(d)/m/n>=0.365 %计算二值图像中对象的总面积与整个面积的比 是否大于 0.365 d=imerode(d,se);%如果大于 0.365 则图像进行腐蚀 elseif bwarea(d)/m/n<=0.235 %计算二值图像中对象的总面积与整个面 积的比是否小于 0.235 d=imdilate(d,se);%如果小于则实现膨胀操作 end imwrite(d,'膨胀或腐蚀处理后.jpg'); subplot(3,2,4),imshow(d),title('膨胀或腐蚀处理后');

图 3.4.13.4.2% 寻找连续有文字的块,若长度大于某阈值,则认为该块有两个字符组成,需要 分割 %首先创建子函数 qiege 与 getword,而后调用子程序,将车牌的字符分割开并 且进行归一化处理 代码如下: d=qiege(d); [m,n]=size(d); % subplot(3,2,5),imshow(d),title(n) k1=1;k2=1;s=sum(d);j=1; while j~=n while s(j)==0 j=j+1; end k1=j; while s(j)~=0 && j<=n-1 j=j+1; end k2=j-1; if k2-k1>=round(n/6.5) [val,num]=min(sum(d(:,[k1+5:k2-5]))); d(:,k1+num+5)=0; end end % 分割

% 再切割 d=qiege(d); % 切割出 7 个字符 y1=10;y2=0.25;flag=0;word1=[]; while flag==0 [m,n]=size(d); left=1;wide=0; while sum(d(:,wide+1))~=0 wide=wide+1; end if widey2 flag=1;word1=temp; end d(:,[1:wide])=0;d=qiege(d); end end % 分割出第二个字符 [word2,d]=getword(d); % 分割出第三个字符 [word3,d]=getword(d); % 分割出第四个字符 [word4,d]=getword(d); % 分割出第五个字符 [word5,d]=getword(d); % 分割出第六个字符 [word6,d]=getword(d); % 分割出第七个字符

[word7,d]=getword(d); figure(9); subplot(2,7,1),imshow(word1),title('1'); subplot(2,7,2),imshow(word2),title('2'); subplot(2,7,3),imshow(word3),title('3'); subplot(2,7,4),imshow(word4),title('4'); subplot(2,7,5),imshow(word5),title('5'); subplot(2,7,6),imshow(word6),title('6'); subplot(2,7,7),imshow(word7),title('7'); [m,n]=size(word1); % 商用系统程序中归一化大小为 40*20,此处演示 word1=imresize(word1,[40 word2=imresize(word2,[40 word3=imresize(word3,[40 word4=imresize(word4,[40 word5=imresize(word5,[40 word6=imresize(word6,[40 word7=imresize(word7,[40 20]); 20]); 20]); 20]); 20]); 20]); 20]);subplot(2,7,8),imshow(word1),title('1'); subplot(2,7,9),imshow(word2),title('2'); subplot(2,7,10),imshow(word3),title('3'); subplot(2,7,11),imshow(word4),title('4'); subplot(2,7,12),imshow(word5),title('5'); subplot(2,7,13),imshow(word6),title('6'); subplot(2,7,14),imshow(word7),title('7'); imwrite(word1,'1.jpg'); imwrite(word2,'2.jpg'); imwrite(word3,'3.jpg'); imwrite(word4,'4.jpg'); imwrite(word5,'5.jpg'); imwrite(word6,'6.jpg'); imwrite(word7,'7.jpg');

图 3.4.2

四、车牌识别此处采用相减的方法来求得字符与模板中哪一个字符最相似, 然后找到相 似度最大的输出。

汽车牌照的字符一般有七个,大部分车牌第一位是汉字,通 常代表车辆所属省份,紧接其后的为字母与数字。

车牌字符识别与一般文字识 别在于它的字符数有限,汉字共约 50 多个,大写英文字母 26 个,数字 10 个。

为了实验方便,结合本次设计所选汽车牌照的特点,只建立了 7 个数字 26 个 字母与 10 个数字的模板。

其他模板设计的方法与此相同。

首先取字符模板,接着依次取待识别字符与模板进行匹配,将其与模板字 符相减,得到的 0 越多那么就越匹配。

把每一幅相减后的图的 0 值个数保存, 即为识别出来的结果。

代码如下: liccode=char(['0':'5' '9':'L':'T' '京辽鲁陕苏豫浙']); 动识别字符代码表 SubBw2=zeros(40,20); l=1; for I=1:7 ii=int2str(I); %转为串 %产生 40*20 的全 0 矩阵 %建立自t=imread([ii,'.jpg']); %读取图片文件中的数据 SegBw2=imresize(t,[40 20],'nearest'); %对图像做缩放处理 SegBw2=double(SegBw2)>20; if l==1 kmin=37; kmax=43; elseif l==2 kmin=11; kmax=36; else l>=3 kmin=1; kmax=36; %第三位以后是字母或数字识别 %第二位 A~Z 字母识别 %第一位汉字识别

end for k2=kmin:kmax fname=strcat('字符模板\',liccode(k2),'.jpg'); %把 行向量转化成字符串 SamBw2 = imread(fname); SamBw2=double(SamBw2)>1; for i=1:40 for j=1:20 SubBw2(i,j)=SegBw2(i,j)-SamBw2(i,j); end end % 以上相当于两幅图相减得到第三幅图 Dmax=0; for k1=1:40 for l1=1:20 if ( SubBw2(k1,l1) > 0 | SubBw2(k1,l1) <0 ) Dmax=Dmax+1; end end end Error(k2)=Dmax; end Error1=Error(kmin:kmax); MinError=min(Error1); findc=find(Error1==MinError); Code(l*2-1)=liccode(findc(1)+kmin-1); Code(l*2)=' '; %输出最大相关图像 l=l+1; end figure(10),imshow(dw),title (['车牌号码:', Code],'Color','y'); 函数代码: function e=qiege(d) [m,n]=size(d); top=1;bottom=m;left=1;right=n; %int while sum(d(top,:))==0&&top<=m top=top+1; end

while sum(d(bottom,:))==0&&bottom>1 bottom=bottom-1; end while sum(d(:,left))==0&&left=1 right=right-1; end dd=right-left; hh=bottom-top; e=imcrop(d,[left top dd hh]); %返回图像的一个裁剪区域function [word,result]=getword(d) word=[];flag=0;y1=8;y2=0.5; while flag==0 [m,n]=size(d); wide=0; while sum(d(:,wide+1))~=0&&wide<=n-2 wide=wide+1; end temp=qiege(imcrop(d,[1 1 wide m])); [m1,n1]=size(temp); if widey2 d(:,[1:wide])=0; if sum(sum(d))~=0 d=qiege(d);%切割出最小范围 else word=[];flag=1; end else word=qiege(imcrop(d,[1 1 wide m])); d(:,[1:wide])=0; if sum(sum(d))~=0 d=qiege(d);flag=1; else d=[]; end end end result=d;

图 4五、小结本实验主要进行了车牌识别的软件方面的研究,分别从图像预处理、车牌 定位、字符分割和字符识别几个方面进行了分析,通过分析最后的实验结果,本 实验基本是可行的,当然还需要进一步的修改。

通过本学期选修的数字图像处理这门课,我学到了很多新知识,另外,这 门课对 matlab 的熟悉使用有一定的需求,让我掌握了 matlab 的基本知识。

车牌 识别这个实验我做的还是有瑕疵的,在最后的识别本牌号码时将 0 识别成了 B, 还需进一步研究。

参考文献: [1] MATLAB 函数速查手册.邓薇.人民邮电出版社 [2] MATLAB 从入门到精通.周建兴.人民邮电出版社 [3] 数字图像的智能信息处理[M].徐中立.科学教育出版社 [4] 数字图像处理[M].阮秋琦.电子工业出版社

数字图像处理论文资料 红外图像的目标检测与识别技术研究毕业论文 数字视频监控系统毕业设计论文 数字温度控制器的设计与制作毕业论文 数字图像处理毕业论文 数字图像处理论文——各种题目 数字图像处理课程论文 数字图像处理考查论文 【免费下载】数字图像处理论文
欧阳修论作文 追求作文 小学生看图作文 我的同桌作文500字 回眸作文 写信的作文 家务劳动作文 高尚的人作文 初二作文 德语学习 小米手机4价格图片 红领巾心向党手抄报图片 母爱的手抄报 水粉画图片 历史手抄报花边 银河系图片 学习的手抄报 关于地震的手抄报 传统文化手抄报模板 心凉的图片