车牌图像定位及识别.docx

上传人:b****1 文档编号:2061238 上传时间:2022-10-26 格式:DOCX 页数:12 大小:203.09KB
下载 相关 举报
车牌图像定位及识别.docx_第1页
第1页 / 共12页
车牌图像定位及识别.docx_第2页
第2页 / 共12页
车牌图像定位及识别.docx_第3页
第3页 / 共12页
车牌图像定位及识别.docx_第4页
第4页 / 共12页
车牌图像定位及识别.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

车牌图像定位及识别.docx

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

车牌图像定位及识别.docx

车牌图像定位及识别

 

专业综合实验报告

----数字图像处理

 

专业:

电子信息工程

班级:

学号:

指导教师:

 

2014年7月18日

 

车牌图像定位与识别

一、设计目的

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

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

二、设计容和要求

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

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

三、设计步骤

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

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

3.记录和整理设计报告

四、设计所需设备及软件

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

五、设计过程

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

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

1.载入车牌图像:

 

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

 

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

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

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

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

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

4.图像实施腐蚀操作:

5.平滑图像:

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

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

(二)车牌定位:

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

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

 

(三)字符分割与识别

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=i

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

当前位置:首页 > 自然科学 > 数学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1