车牌图像定位与识别.docx

上传人:b****7 文档编号:15928620 上传时间:2023-07-09 格式:DOCX 页数:13 大小:122.46KB
下载 相关 举报
车牌图像定位与识别.docx_第1页
第1页 / 共13页
车牌图像定位与识别.docx_第2页
第2页 / 共13页
车牌图像定位与识别.docx_第3页
第3页 / 共13页
车牌图像定位与识别.docx_第4页
第4页 / 共13页
车牌图像定位与识别.docx_第5页
第5页 / 共13页
车牌图像定位与识别.docx_第6页
第6页 / 共13页
车牌图像定位与识别.docx_第7页
第7页 / 共13页
车牌图像定位与识别.docx_第8页
第8页 / 共13页
车牌图像定位与识别.docx_第9页
第9页 / 共13页
车牌图像定位与识别.docx_第10页
第10页 / 共13页
车牌图像定位与识别.docx_第11页
第11页 / 共13页
车牌图像定位与识别.docx_第12页
第12页 / 共13页
车牌图像定位与识别.docx_第13页
第13页 / 共13页
亲,该文档总共13页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

车牌图像定位与识别.docx

《车牌图像定位与识别.docx》由会员分享,可在线阅读,更多相关《车牌图像定位与识别.docx(13页珍藏版)》请在冰点文库上搜索。

车牌图像定位与识别.docx

车牌图像定位与识别

 

专业综合实验报告

----数字图像处理

 

专业:

电子信息工程

班级:

学号:

指导教师:

 

2014年7月18日

车牌图像定位与识别

一、设计目的

利用matlab实现车牌识别系统,熟悉matlab应用软件的基础知识,利用其解决数字信号处理的实际应用问题,从而加深对理论知识的掌握,巩固理论课上知识的同时,加强实践能力的提高,理论联系实践,提高自身的动手能力。

同时不断的调试程序也提高了自己独立编程水平,并在实践中不断完善理论基础,有助于自身综合能力的提高。

二、设计容和要求

车牌识别系统应包含图像获取、图像处理、图像分割、字符识别、数据库管理等几个部分,能够完成复杂背景下汽车牌照的定位分割以及牌照字符的自动识别。

这里,只要求对给定的彩色车牌图像变换成灰度图像,用阈值化技术进行字符与背景的分离,再提取牌照图像。

三、设计步骤

1.打开计算机,启动MATLAB程序;

2.调入给定的车牌图像,并按要求进行图像处理;

3.记录和整理设计报告

四、设计所需设备及软件

计算机一台;移动式存储器;MATLAB软件。

五、设计过程

车辆牌照识别整个系统主要是由车牌定位和字符分割识别两部分组成,其中车牌定位又可以分为图像预处理及边缘提取模块和牌照的定位及分割模块;字符识别可以分为字符分割和单个字符识别两个模块。

(一)对图像进行图像转换、图像增强和边缘检测等

1.载入车牌图像:

 

2.将彩图转换为灰度图并绘制直方图:

 

3.用roberts算子进行边缘检测:

图像中车辆牌照是具有比较显著特征的一块图象区域,这此特征表现在:

近似水平的矩形区域;其中字符串都是按水平方向排列的;在整体图象中的位置较为固定。

正是由于牌照图象的这些特点,再经过适当的图象变换,它在整幅中可以明显地呈现出其边缘。

边缘提取是较经典的算法,此处边缘的提取采用的是Roberts算子。

4.图像实施腐蚀操作:

5.平滑图像:

对于受噪声干扰严重的图象,由于噪声点多在频域中映射为高频分量,因此可以在通过低通滤波器来滤除噪声,但实际中为了简化算法也可以直接在空域中用求邻域平均值的方法来削弱噪声的影响,这种方法称为图象平滑处理。

 

6.删除二值图像的小对象

(2)车牌定位:

从预处理后的汽车图像中分割出车牌图像。

即在一幅车辆图像中找到车牌所在的位置。

 

(3)字符分割与识别

1.车牌的进一步处理

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

 

2.字符分割

在汽车牌照自动识别过程中,字符分割有承前启后的作用。

它在前期牌照定位的基础上进行字符的分割,然后再利用分割的结果进行字符识别。

字符识别的算法很多,因为车牌字符间间隔较大,不会出现字符粘连情况,所以此处采用的方法为寻找连续有文字的块,若长度大于某阈值,则认为该块有两个字符组成,需要分割。

在此只进行了归一化处理,然后进行后期处理。

六.总结

根据车牌特点,一般采用的车牌定位算法有:

1.边缘检测定位算法;2.利用哈夫变换进行车牌定位;3.色彩分割提取车牌等。

这里我采用的是边缘检测的方法实现定位的。

字符分割的方法也有多种:

1.基于聚类分析的字符分割;2.投影分割的方法;3.基于模板匹配的字符分割等。

最常用的是投影分割,主要是针对在车牌定位,图像预处理后比较规则的车牌图像。

优点是程序逻辑设计简单,循环执行功能单一,便于设计和操作,程序执行时间短。

对现实事物的设计不仅是对前面所学知识的一种检验,而且也是对自己能力的一种提高。

通过这次设计使我明白了自己原来知识还比较欠缺。

这个设计让我学到了很多东西,涉及到方方面面的知识,在这整个过程中我们查阅了大量的资料,得到了老师和同学的帮助,我在此对他们表示意。

 

七.源代码:

(1)主程序:

I=imread('car.jpg');

figure

(1),imshow(I);title('原图');

I1=rgb2gray(I);

figure

(2),subplot(1,2,1),imshow(I1);title('灰度图');

figure

(2),subplot(1,2,2),imhist(I1);title('灰度直方图');

I2=edge(I1,'roberts',0.18,'both');

figure(3),imshow(I2);title('roberts边缘检测图');

se=[1;1;1];

I3=imerode(I2,se);

figure(4),imshow(I3);title('腐蚀后图');

se=strel('rectangle',[25,25]);

I4=imclose(I3,se);

figure(5),imshow(I4);title('平滑图像');

I5=bwareaopen(I4,2000);

figure(6),imshow(I5);title('去除小对象');

[y,x,z]=size(I5);

myI=double(I5);

tic

Blue_y=zeros(y,1);

fori=1:

y

forj=1:

x

if(myI(i,j,1)==1)

Blue_y(i,1)=Blue_y(i,1)+1;

end

end

end

[tempMaxY]=max(Blue_y);

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,:

:

);

Blue_x=zeros(1,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)&&(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;

figure(7),subplot(1,2,1),imshow(IY),title('行方向车牌区域');

figure(7),subplot(1,2,2),imshow(dw),title('定位后车牌区域');

imwrite(dw,'dw.jpg');

a=imread('dw.jpg');

b=rgb2gray(a);

imwrite(b,'graylicenceplate.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);

[m,n]=size(b);

d=(double(b)>=T);

imwrite(d,'binarylicenceplate.jpg');

subplot(3,2,2),imshow(d),title('beforefilteringbinarylicenceplate');

h=fspecial('average',3);

d=im2bw(round(filter2(h,d)));

imwrite(d,'afteraveragelicenceplate.jpg');

subplot(3,2,3),imshow(d),title('afteraveragelicenceplate');

se=eye

(2);

[m,n]=size(d);

ifbwarea(d)/m/n>=0.365

d=imerode(d,se);

elseifbwarea(d)/m/n<=0.235

d=imdilate(d,se);

end

imwrite(d,'expansionorcorrosionthelicenceplate.jpg');

subplot(3,2,4),imshow(d),title('expansionorcorrosionthelicenceplate');

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

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

ifwide

d(:

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

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

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');

(2)子程序:

(getword子程序)

function[word,result]=getword(d)

word=[];flag=0;y1=8;y2=0.5;

whileflag==0

[m,n]=size(d);

wide=0;

whilesum(d(:

wide+1))~=0&&wide<=n-2

wide=wide+1;

end

temp=qiege(imcrop(d,[11widem]));

[m1,n1]=size(temp);

ifwidey2

d(:

[1:

wide])=0;

ifsum(sum(d))~=0

d=qiege(d);%切割出最小围

elseword=[];flag=1;

end

else

word=qiege(imcrop(d,[11widem]));

d(:

[1:

wide])=0;

ifsum(sum(d))~=0;

d=qiege(d);flag=1;

elsed=[];

end

end

end

result=d;

子程序:

(qiege子程序)

functione=qiege(d)

[m,n]=size(d);

top=1;bottom=m;left=1;right=n;

whilesum(d(top,:

))==0&&top<=m

top=top+1;

end

whilesum(d(bottom,:

))==0&&bottom>1

bottom=bottom-1;

end

whilesum(d(:

left))==0&&left

left=left+1;

end

whilesum(d(:

right))==0&&right>=1

right=right-1;

end

dd=right-left;

hh=bottom-top;

e=imcrop(d,[lefttopddhh]);

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 经管营销 > 经济市场

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2