【最新版】基于数字图像处理的车牌识别本科毕业设计

本科生毕业论文(设计)

题目: 基于数字图像处理的车牌识别设计

姓名: 周金鑫

学院: 数理与信息工程学院

专业: 电子信息工程

班级: 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.4图像的腐蚀操作: (6)

4.2.5平滑图像 (6)

4.2.6除去二值图像的小对象 (8)

4.3车牌定位 (8)

4.4字符的分割与识别 (11)

4.4.1.车牌的再处理 (11)

4.4.2字符分割 (13)

4.5车牌识别: (15)

5、总结: (17)

6、致谢 (20)

7、参考文献: (18)

基于数字图像处理的车牌识别设计

电子信息工程专业学生周金鑫

指导教师刘纯利

摘要:车牌识别在人类社会交通系统中担当重要角色,一个设计优良的车牌识别系统会给人们生活带来极大的方便,本文通过运用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('gray image');

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('roberts operator edge detection image');

结果如下:

图4.2.3边缘检测picture3

4.2.4图像的腐蚀操作:

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

se=[1;1;1];

I3=imerode(I2,se);%图像腐蚀操作

imshow(I3);title('corrosion image');

图4.2.4图像腐蚀操作picture4

4.2.5平滑图像

图像平滑是去掉图像中的高频信息,使图像变的模糊,噪声一般都是高频信息,平滑的过程也就意味着除去图片噪声的过程。

se=strel('rectangle',[16,16]);%建立正方形结构元素

I4=imclose(I3,se);% 图像聚类和填充

imshow(I4);title('smothing image');

图2.5平滑图像picture5

4.2.6除去二值图像的小对象

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

I5=bwareaopen(I4,1900);% 除去聚团灰度值在1900以下的部分

imshow(I5);title('remove the small objects'); %滤波后图像

显示结果如下:

图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的零阵

for i=1:y

for j=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

[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

PY2=PY2+1;

end

IY=I(PY1:PY2,:,:);

%行方向车牌区域确定

%%%% X方向 %%%%

Blue_x=zeros(1,x);%x车牌区域方向的再判断

for j=1:x

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)&&(PX1

PX1=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('Line direction areas');%车牌行方向区域的确定

subplot(1,2,2),imshow(dw),title('positioning color images');%车牌已经定位后的区域显示如下:

图4.3.1车牌的定位picture7

4.4字符的分割与识别

4.4.1.车牌的再处理

划分彩色图像需经过灰度变换,二值化,均值滤波,腐蚀和膨胀到一个字符,并对分割字符进二值化、归一化等图像预处理使车牌图像的车牌号字符分割构成隔离,然后分析识别已经分割字符识的图像并用文本的车牌号的形式呈现出来。代码显示如下:imwrite(dw,'dw.jpg');%把彩色车牌写入dw文件里

a=imread('dw.jpg');%读取车牌文件数据

b=rgb2gray(a);%把车牌图像变换为灰度图

imwrite(b,'gray licence plate.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,'binary licence plate.jpg');

subplot(3,2,2),imshow(d),title('before filtering binary licence plate') %均值滤波之前

% 滤波

) returns the n-by-n identity matrix 单位矩阵

[m,n]=size(d);

if bwarea(d)mn>=0.36

d=imerode(d,se);%假如大于0.36即图像进行腐蚀

elseif

bwarea(d)mn<=0.23

d=imdilate(d,se);%假如小于即实现膨胀操作

end

imwrite(d,'expansion or corrosion the licence plate.jpg');

subplot(3,2,4),imshow(d),title('expansion or corrosion the licence plate');

运行结果显示如下:

图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;

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(n6.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 wide

d(:,[1:wide])=0;

d=qiege(d);

else

temp=qiege(imcrop(d,[1 1 wide m]));

[m,n]=size(temp);

all=sum(sum(temp));

two_thirds=sum(sum(temp([round(m3):2*round(m3)],:))); if two_thirdsall>y2

flag=1;word1=temp; % WORD 1

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,[40 20]);

word2=imresize(word2,[40 20]);

word3=imresize(word3,[40 20]);

word4=imresize(word4,[40 20]);

word5=imresize(word5,[40 20]);

word6=imresize(word6,[40 20]);

word7=imresize(word7,[40 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');

运行结果显示如下:

图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;

for I=1:7

ii=int2str(I);

t=imread([ii,'.jpg']);

SegBw2=imresize(t,[40 20],'nearest');

SegBw2=double(SegBw2)>20;

if l==1 %第一位汉字的识别

kmin=37;

kmax=43;

elseif l==2 %第二位 A~Z 字母的识别

kmin=11;

kmax=36;

else l>=3 %第三位后面识别字母或数字 kmin=1;

kmax=36;

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

% 2张图相减得到第3张图

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

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.

License plate recognition based on the design of digital

image processing

Student majoring in Electronic and Information Engineering

zhoujinxin

Tutor liuchunli Abstract License plate recognition systems play in society an important role in transportation, a well-designed license plate recognition system will bring great convenience to people's lives, the paper through the use of some of the knowledge and digital image processing matlab simply by image preprocessing, license plate location, character segmentation using template matching method to achieve the license plate character recognition.

Keywords image pre-processing character segmentation edge character recognition

相关文档
最新文档