车牌识别附源代码Word文档下载推荐.docx

上传人:b****7 文档编号:22276227 上传时间:2023-02-03 格式:DOCX 页数:25 大小:349.20KB
下载 相关 举报
车牌识别附源代码Word文档下载推荐.docx_第1页
第1页 / 共25页
车牌识别附源代码Word文档下载推荐.docx_第2页
第2页 / 共25页
车牌识别附源代码Word文档下载推荐.docx_第3页
第3页 / 共25页
车牌识别附源代码Word文档下载推荐.docx_第4页
第4页 / 共25页
车牌识别附源代码Word文档下载推荐.docx_第5页
第5页 / 共25页
点击查看更多>>
下载资源
资源描述

车牌识别附源代码Word文档下载推荐.docx

《车牌识别附源代码Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《车牌识别附源代码Word文档下载推荐.docx(25页珍藏版)》请在冰豆网上搜索。

车牌识别附源代码Word文档下载推荐.docx

%用imshow函数显示滤波后图像

结果如下所示:

7.车牌定位

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

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

%蓝色像素点统计

end

end

[tempMaxY]=max(Blue_y);

%Y方向车牌区域确定

PY1=MaxY;

while((Blue_y(PY1,1)>

=5)&

&

(PY1>

1))

PY1=PY1-1;

PY2=MaxY;

while((Blue_y(PY2,1)>

(PY2<

y))

PY2=PY2+1;

IY=I(PY1:

PY2,:

:

Blue_x=zeros(1,x);

%进一步确定x方向的车牌区域

fori=PY1:

PY2

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

Blue_x(1,j)=Blue_x(1,j)+1;

PX1=1;

while((Blue_x(1,PX1)<

3)&

(PX1<

x))

PX1=PX1+1;

PX2=x;

while((Blue_x(1,PX2)<

(PX2>

PX1))

PX2=PX2-1;

PX1=PX1-1;

%对车牌区域的校正

PX2=PX2+1;

dw=I(PY1:

PY2-8,PX1:

PX2,:

t=toc;

figure(7),subplot(1,2,1),imshow(IY),title('

Linedirectionareas'

figure(7),subplot(1,2,2),imshow(dw),title('

positioningcolorimages'

8.字符分割与识别

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

代码如下:

imwrite(dw,'

dw.jpg'

%将彩色车牌写入dw文件中

a=imread('

%读取车牌文件中的数据

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

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

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

%使用指定的滤波器h对h进行d即均值滤波

afteraveragelicenceplate.jpg'

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

afteraveragelicenceplate'

se=eye

(2);

%eye(n)returnsthen-by-nidentitymatrix单位矩阵

[m,n]=size(d);

%返回矩阵b的尺寸信息,并存储在m,n中

ifbwarea(d)/m/n>

=0.365%计算二值图像中对象的总面积与整个面积的比是否大于0.365

d=imerode(d,se);

%如果大于0.365则图像进行腐蚀

elseifbwarea(d)/m/n<

=0.235%计算二值图像中对象的总面积与整个面积的比是否小于0.235

d=imdilate(d,se);

%如果小于则实现膨胀操作

end

expansionorcorrosionthelicenceplate.jpg'

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

expansionorcorrosionthelicenceplate'

);

运行结果如下所示:

9.字符分割

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

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

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

一般分割出来的字符要进行进一步的处理,以满足下一步字符识别的需要。

但是对于车牌的识别,并不需要太多的处理就已经可以达到正确识别的目的。

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

%寻找连续有文字的块,若长度大于某阈值,则认为该块有两个字符组成,需要分割

%首先创建子函数qiege与getword,而后调用子程序,将车牌的字符分割开并且进行归一化处理

d=qiege(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;

k1=j;

whiles(j)~=0&

j<

=n-1

k2=j-1;

ifk2-k1>

=round(n/6.5)

[val,num]=min(sum(d(:

[k1+5:

k2-5])));

d(:

k1+num+5)=0;

%分割

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;

ifwide<

y1

[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

[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('

subplot(2,7,9),imshow(word2),title('

subplot(2,7,10),imshow(word3),title('

subplot(2,7,11),imshow(word4),title('

subplot(2,7,12),imshow(word5),title('

subplot(2,7,13),imshow(word6),title('

subplot(2,7,14),imshow(word7),title('

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'

运行结果如下:

10.车牌识别:

模板匹配是图象识别方法中最具代表性的基本方法之一,它是将从待识别的图象或图象区域f(i,j)中提取的若干特征量与模板T(i,j)相应的特征量逐个进行比较,计算它们之间规格化的互相关量,其中互相关量最大的一个就表示期间相似程度最高,可将图象归于相应的类。

也可以计算图象与模板特征量之间的距离,用最小距离法判定所属类。

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

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

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

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

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

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

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

源代码如下:

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;

fork2=kmin:

kmax

fname=strcat('

字符模板\'

liccode(k2),'

SamBw2=imread(fname);

SamBw2=double(SamBw2)>

1;

40

20

SubBw2(i,j)=SegBw2(i,j)-SamBw2(i,j);

%以上相当于两幅图相减得到第三幅图

Dmax=0;

fork1=1:

forl1=1:

if(SubBw2(k1,l1)>

0|SubBw2(k1,l1)<

0)

Dmax=Dmax+1;

Error(k2)=Dmax;

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;

figure(10),imshow(dw),title(['

车牌号码:

Code],'

Color'

'

b'

五、设计体会

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

以前老是觉得自己什么东西都不会,什么东西都不懂,而且又急于求成,结果造成什么都没学好,还是什么都不会。

通过这次课程设计,我才明白学习是一个长期积累的过程,在以后的工作、生活中都应该不断的学习,努力提高自己知识和综合素质,特别是对于我,基础比较差,一定不能太过于心急,要静下心来慢慢的研究。

虽然这个设计做的也不太好,但是在设计过程中所学到的东西是这次课程设计的最大收获和财富,使我终身受益

六、参考文献:

[1]杨万山等,基于BP神经网络的工程图纸图形符号的识别,微型电脑应用,Vol.16,No.2,2000

[2]王年、李婕、任彬、汪炳权.多层次汽车车牌照定位分割方法.安徽大学学报,1999(6)Vol.23.No.2

[3]崔 江、王友仁.车牌自动识别方法中的关键技术研究.计算机测量与控制,2003.11(4)

[4]许志影、李晋平.MATLAB极其在图像处理中的应用.计算机与现代化,2004(4)

 

I=imread('

C:

\Users\yunshuni\Desktop\新建文件夹\0.jpg'

figure

(1),imshow(I);

原始车牌'

%将车牌的原图显示出来

I1=rgb2gray(I);

%将彩图转换为灰度图

figure

(2),subplot(1,2,1),imshow(I1);

figure

(2),subplot(1,2,2),imhist(I1);

灰度图直方图'

I2=edge(I1,'

roberts'

0.18,'

both'

%选择阈值0.18,用roberts算子进行边缘检测

figure(3),imshow(I2);

边缘检测图像'

se=[1;

1];

I3=imerode(I2,se);

%对图像实施腐蚀操作,即膨胀的反操作

figure(4),imshow(I3);

腐蚀后图像'

%图像聚类、填充图像

闭运算后图像'

I5=bwareaopen(I4,2000);

去除后图像'

%如果myI(i,j,1)即myI的图像中坐标为(i,j)的点值为1,即该点为车牌背景颜色蓝色

%则Blue_y(i,1)的值加1

%temp为向量yellow_y的元素中的最大值,MaxY为该值的索引

PY1=MaxY;

%行方向车牌区域确定

Blue_x=zeros(1,x);

PX1=PX1-1;

车牌行方向'

%行方向车牌区域确定

figure(7),subplot(1,2,2),imshow(dw),title('

车牌区域'

%定位后的车牌区域如下所示:

二值化图像'

%均值滤波前

%滤波

%建立预定义的滤波算子,average为均值滤波,模板的尺寸为3*3

滤波后图像'

膨胀或腐蚀图像'

k1

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

当前位置:首页 > 医药卫生 > 药学

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

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