完整版基于数字图像处理的车牌识别本科毕业论文.docx
《完整版基于数字图像处理的车牌识别本科毕业论文.docx》由会员分享,可在线阅读,更多相关《完整版基于数字图像处理的车牌识别本科毕业论文.docx(20页珍藏版)》请在冰点文库上搜索。
完整版基于数字图像处理的车牌识别本科毕业论文
本科生毕业论文(设计)
题目:
基于数字图像处理的车牌识别设计
姓名:
周金鑫
学院:
数理与信息工程学院
专业:
电子信息工程
班级:
111
学号:
指导教师:
刘纯利职称:
教授
2014年12月24日
安徽科技学院教务处制
摘要3
关键词3
1、设计目的3
2、设计原理:
3
3、设计步骤:
3
4、实行方案4
4.1.总体实行方案:
4
4.2.各模块的实现:
4
4.2.1输入待处理的原始图像:
4
4.2.2图像的灰度化并绘制直方图:
5
4.2.3边缘检测6
4.2.6除去二值图像的小对象8
4.4字符的分割与识别11
4.4.1.车牌的再处理11
4.4.2字符分割13
6、致谢20
基于数字图像处理的车牌识别设计
电子信息工程专业学生周金鑫
指导教师刘纯利
摘要:
车牌识别在人类社会交通系统中担当重要角色,一个设计优良的车牌识别系统会给人们生活带来极大的方便,本文通过运用matlab和数字图像处理的一些知识简单通过图像预处理,车牌定位,字符分割,采用模板匹配法实现车牌字符的识别。
关键词:
图像预处理边缘处理字符分割字符识别
1、设计目的
车牌识别系统主要是为了辨别所拍图片中的车牌部分,以此识别车辆。
通过车牌识别系统的设计,来实现经过我校西大门的车辆的识别。
2、设计原理:
设计的原理主要如下图所示:
3、设计步骤:
流程图如下:
4、实行方案
4.1.总体实行方案:
用摄像机获取自然环境下的汽车彩色图像,将彩色图像用matlab软件处理成灰度图像并绘制直方图,然后进行边缘检测图像的腐蚀,平滑图像以及去除二值图像的小对象等操作,再进行车牌的定位和字符分割与识别最终达到识别车牌照的目的。
4.2.各模块的实现:
4.2.1输入待处理的原始图像:
I=imread(‘car.jpg');
imshow(I);%显示车牌的原始图片,结果如下:
图4.2.1原始图像picture1
4.2.2图像的灰度化并绘制直方图:
彩色图像的存储器所需的成本高,且减缓系统的速度执行,所以,在图像识别处理彩色图像一般都转换成灰度图像,以加快图像信息的处理速度。
从彩色图像到灰度图像的转换叫做灰度处理。
灰度直方图的横坐标代表图片的像素数,从左到右由暗到亮,灰度直方图的纵轴就表示其所占有图片的面积,峰值越低就意味着该明暗值的像素数量越少,从图4.2.2可以看出峰值最高的即为车牌区域。
I1=rgb2gray(I);%灰度处理
subplot(1,2,1),imshow(I1);title('grayimage');
subplot(1,2,2),imhist(I1);title('灰度图直方图');%绘制灰度图和直方图
显示结果图像如下:
图4.2.2灰度化并绘制直方图picture2
4.2.3边缘检测
边缘是一定存在在两个拥有不一样灰度值的相邻的区域之间的,是灰度值不连续的一种表现,也是分割图象、纹理和形状特征提取等图像分析的基础。
本文用Roberts算子来实现边缘检测,他是一种利用局部差分算子寻找边缘的算子,Robert算子图像处理后结果边缘不是很平滑,当然还需要后续的腐蚀,平滑图像以及去除二值图像的小对象操作来提高精度。
由于阈值越小检测的边缘越丰富,结合选取的灰度图选择阈值为0.16较为合适。
用roberts算子实行边缘检测:
I2=edge(I1,'roberts',0.16,'both');
imshow(I2);title('robertsoperatoredgedetectionimage');
结果如下:
图4.2.3边缘检测picture3
4.2.4图像的腐蚀操作:
腐蚀操作就是通过不断的删除图片上的像素,将图片缩小,以此来达到去除小点状图形的效果。
se=[1;1;1];
I3=imerode(I2,se);%图像腐蚀操作
imshow(I3);title('corrosionimage');
图4.2.4图像腐蚀操作picture4
4.2.5平滑图像
图像平滑是去掉图像中的高频信息,使图像变的模糊,噪声一般都是高频信息,平滑的过程也就意味着除去图片噪声的过程。
se=strel('rectangle',[16,16]);%建立正方形结构元素
I4=imclose(I3,se);%图像聚类和填充
imshow(I4);title('smothingimage');
图2.5平滑图像picture5
4.2.6除去二值图像的小对象
除去二值图像的小对象就为了去掉面积较小无关的白色区域,将车牌所在的大面积白色区域凸显出来。
I5=bwareaopen(I4,1900);%除去聚团灰度值在1900以下的部分
imshow(I5);title('removethesmallobjects');%滤波后图像
显示结果如下:
图4.2.6除去二值图像的小对象picture6
4.3车牌定位
自然环境下,汽车图像背景十分复杂,受光照不均匀、污渍等影响,所以在自然背景下准确的将车牌区域确定下来是整个识别过程的关键,所以先要对原图像进行大范围横向(X),纵向(Y)像素点相关搜索,找到符合汽车牌照的候选区,然后对候选区做进一步的分析,判断,最终确定一个最佳的区域作为牌照区域。
代码显示如下:
[y,x,z]=size(I5);%返回I5各维的尺寸,存储在x,y,z中
myI=double(I5);%将I5转换成双精度
tic%tic计时开始,toc计时结束
Blue_y=zeros(y,1);%产生一个y*1的零阵
fori=1:
y
forj=1:
x
if(myI(i,j,1)==1)
%若myI的图像中坐标(i,j)的点值为1,则表示蓝色背景
%则Blue_y(i,1)的值加1
Blue_y(i,1)=Blue_y(i,1)+1;%蓝色像素点统计
end
end
end
[tempMaxY]=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)&&(PY2PY2=PY2+1;
end
IY=I(PY1:
PY2,:
:
);
%行方向车牌区域确定
%%%%X方向%%%%
Blue_x=zeros(1,x);%x车牌区域方向的再判断
forj=1:
x
fori=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=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;
subplot(1,2,1),imshow(IY),title('Linedirectionareas');%车牌行方向区域的确定
subplot(1,2,2),imshow(dw),title('positioningcolorimages');%车牌已经定位后的区域显示如下:
图4.3.1车牌的定位picture7
4.4字符的分割与识别
4.4.1.车牌的再处理
划分彩色图像需经过灰度变换,二值化,均值滤波,腐蚀和膨胀到一个字符,并对分割字符进二值化、归一化等图像预处理使车牌图像的车牌号字符分割构成隔离,然后分析识别已经分割字符识的图像并用文本的车牌号的形式呈现出来。
代码显示如下:
imwrite(dw,'dw.jpg');%把彩色车牌写入dw文件里
a=imread('dw.jpg');%读取车牌文件数据
b=rgb2gray(a);%把车牌图像变换为灰度图
imwrite(b,'graylicenceplate.jpg');%把灰度图像写入文件里
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,'binarylicenceplate.jpg');
subplot(3,2,2),imshow(d),title('beforefilteringbinarylicenceplate')
%均值滤波之前
%滤波
h=fspecial('average',3);
%模板的尺寸:
3*3,average:
均值滤波,建立滤波算子
d=im2bw(round(filter2(h,d)));%用指定的滤波器h然后对其均值滤波即进行d
imwrite(d,'afteraveragelicenceplate.jpg');
subplot(3,2,3),imshow(d),title('afteraveragelicenceplate')
%操作某些图象
%膨胀或腐蚀
%se=strel('square',3);%图片膨胀处理
%'line'/'diamond'/'ball'...
se=eye
(2);%eye(n)returnsthen-by-nidentitymatrix单位矩阵
[m,n]=size(d);
ifbwarea(d)/m/n>=0.36
d=imerode(d,se);%假如大于0.36即图像进行腐蚀
elseif
bwarea(d)/m/n<=0.23
d=imdilate(d,se);%假如小于即实现膨胀操作
end
imwrite(d,'expansionorcorrosionthelicenceplate.jpg');
subplot(3,2,4),imshow(d),title('expansionorcorrosionthelicenceplate');
运行结果显示如下:
图4.4.1字符分割与识别picture8
4.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;
whilej~=n
whiles(j)==0
j=j+1;
end
k1=j;
whiles(j)~=0&&j<=n-1
j=j+1;
end
k2=j-1;
ifk2-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=[];
whileflag==0
[m,n]=size(d);
left=1;wide=0;
whilesum(d(:
wide+1))~=0
wide=wide+1;
end
ifwided(:
[1:
wide])=0;
d=qiege(d);
else
temp=qiege(imcrop(d,[11widem]));
[m,n]=size(temp);
all=sum(sum(temp));
two_thirds=sum(sum(temp([round(m/3):
2*round(m/3)],:
)));
iftwo_thirds/all>y2
flag=1;word1=temp;%WORD1
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);
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,[4020]);
word2=imresize(word2,[4020]);
word3=imresize(word3,[4020]);
word4=imresize(word4,[4020]);
word5=imresize(word5,[4020]);
word6=imresize(word6,[4020]);
word7=imresize(word7,[4020]);
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');
运行结果显示如下:
图4.4.2字符分割picture9
4.5车牌识别:
在此采用相减的模板匹配法来判断字符和模板中哪一个字符最接近,再找到相似度最高的字符作为输出结果。
通常车辆牌照的字符有7个,一般第一位是汉字,表示车辆所属的省份,而后的为字母和数字。
车牌字符的识别较一般文字识别要简单些,主要是它的字符数是有限的,汉字一共约50多个,大写英文字母26个,数字10个。
出于实验运算方便的考虑,本文仅建立了7个汉字26个字母与10个数字的模板。
其他的模板算法与之相同。
第一步取字符模板,第二步依次取待识别字符与模板进行匹配,第三步将选中的字符与模板字符相减,得到的零越多也即就越匹配。
第四步每一幅相减后的图的零值的个数都要保存,并作为识别出来的结果。
识别的流程图显示如下:
源代码显示如下:
liccode=char(['0':
'9''A':
'Z''皖豫苏鲁京沪津']);%建立自动识别字符代码表
SubBw2=zeros(40,20);
l=1;
forI=1:
7
ii=int2str(I);
t=imread([ii,'.jpg']);
SegBw2=imresize(t,[4020],'nearest');
SegBw2=double(SegBw2)>20;
ifl==1%第一位汉字的识别
kmin=37;
kmax=43;
elseifl==2%第二位A~Z字母的识别
kmin=11;
kmax=36;
elsel>=3%第三位后面识别字母或数字
kmin=1;
kmax=36;
end
fork2=kmin:
kmax
fname=strcat('字符模板\',liccode(k2),'.jpg');
SamBw2=imread(fname);
SamBw2=double(SamBw2)>1;
fori=1:
40
forj=1:
20
SubBw2(i,j)=SegBw2(i,j)-SamBw2(i,j);
end
end
%2张图相减得到第3张图
Dmax=0;
fork1=1:
40
forl1=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
picture(10),imshow(dw),title(['车牌号码:
',Code],'Color','b');
图4.5.1车牌识别picture10
5、总结:
实验对车牌识别系统的识别主要依靠的工具是matlab软件编程,分别从图像预处理、车牌定位、字符分割以及字符识别等方面进行了系统的分析。
从本设计用MATLAB编程运行结果可以得出,对于一张自然环境下牌照照片进过本设计采用的图像预处理、roberts算子进行边缘检测、删除二值图像的小对象、车牌识别等对车牌的定位都是非常有效的。
6、致谢
经过这段时间的不断努力我的毕业设计终于搞定了。
当你踏踏实实完成毕业设计时你会发现他不仅可以检验前面所学知识,而且也可以提高对自己的自学能力。
通过这次的毕业论文设计让我对matlab软件的认识和对数字图像处理的相关知识有了较深的理解,让我了解到知识的学习是一步一个脚印,学习不仅要靠之间的努力专研,还学要虚心求教,有什么不懂不会的不能钻牛角尖,多和同学和老师进行交流,在老师的悉心指导下我学起知识那是非常的迅速,有时问题理解不过来往往是某个知识点不会活着不理解,一担有人在旁稍微指导一下就会豁然开朗。
这次毕业设计让我自己的学习更加有自信,相信在以后的工作中,我也会有很大的信心将工作做好。
7、参考文献:
【1】王正林,刘明.精通MATLAB7北京电子工业出版社2006.
【2】郑阿奇.MATLAB实用教程北京电子工业出版社2004.
【3】阮秋琦.数字图像处理(第三版)北京电子工业出版社2013.
Licenseplaterecognitionbasedonthedesignofdigitalimageprocessing
StudentmajoringinElectronicandInformationEngineeringzhoujinxin
Tutorliuchunli
AbstractLicenseplaterecognitionsystemsplayinhumansocietyanimportantroleintransportation,awell-designedlicenseplaterecognitionsystemwillbringgreatconveniencetopeople'slives,thepaperthroughtheuseofsomeoftheknowledgeanddigitalimageprocessingmatlabsimplybyimagepreprocessing,licenseplatelocation,charactersegmentationusingtemplatematchingmethodtoachievethelicenseplatecharacterrecognition.
Keywordsimagepre-processingcharactersegmentationedgecharacterrecognition