2023年11月28日发(作者:奥迪q7车报价2022款官方指导价)

车牌识别(附源代码)

车牌识别

电?1301 洪江 13

?、?的与要求

车牌定位系统的?的在于正确获取整个图像中车牌的区域,并识别出车牌号。通过设计实现车牌识别系统,能够提?学?分析

问题和解决问题的能?,还能培养?定的科研能?

?、设计原理:

牌照?动识别是?项利?车辆的动态视频或静态图像进?牌照、牌照颜??动识别的模式识别技术。其硬件基础?般包括触发

设备、摄像设备、照明设备、图像采集设备、识别车牌的处理机等,其软件核?包括车牌定位算法、车牌字符分割算法和光学

字符识别算法等。某些牌照识别系统还具有通过视频图像判断车辆驶?视野的功能称之为视频车辆检测。?个完整的牌照识别

系统应包括车辆检测、图像采集、牌照识别等?部分。当车辆检测部分检测到车辆到达时触发图像采集单元,采集当前的视频

图像。牌照识别单元对图像进?处理,定位出牌照位置,再将牌照中的字符分割出来进?识别,然后组成牌照输出。

三、详细设计步骤:

为了进?牌照识别,需要以下?个基本的步骤:

a.牌照定位,定位图?中的牌照位置;

b.牌照字符分割,把牌照中的字符分割出来;

c.牌照字符识别,把分割好的字符进?识别,最终组成牌照。

牌照识别过程中,牌照颜?的识别依据算法不同,可能在上述不同步骤实现,通常与牌照识别互相配合、互相验证。

(1)牌照定位:

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

I1=rgb2gray(I);%将彩图转换为灰度图

figure(2),subplot(1,2,1),imshow(I1);title(\'gray image\');

figure(2),subplot(1,2,2),imhist(I1);title(\'灰度图直?图\');%绘制灰度图的直?图结果如下所?:

3. ?roberts算?进?边缘检测:

I2=edge(I1,\'roberts\',0.18,\'both\');%选择阈值0.18,?roberts算?进?边缘检测

figure(3),imshow(I2);title(\'roberts operator edge detection image\')

结果如下:

4.图像实施腐蚀操作:

se=[1;1;1];

I3=imerode(I2,se);%对图像实施腐蚀操作,即膨胀的反操作

figure(4),imshow(I3);title(\'corrosion image\');

5.平滑图像

se=strel(\'rectangle\',[25,25]);%构造结构元素以正?形构造?个se

I4=imclose(I3,se);

figure(5),imshow(I4);title(\'smothing image\');

结果如下所?:

6. 删除?值图像的?对象

I5=bwareaopen(I4,2000);%去除聚团灰度值?于2000的部分

figure(6),imshow(I5);title(\'remove the small objects\'); %?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的零阵

for i=1:y

for j=1:x

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

Blue_y(i,1)= Blue_y(i,1)+1;%蓝?像素点统计 end

end

end

[temp MaxY]=max(Blue_y);%Y?向车牌区域确定

PY1=MaxY;

while ((Blue_y(PY1,1)>=5)&&(PY1>1))

PY1=PY1-1;

end

对分割出的彩?车牌图像进?灰度转换、?值化、均值滤波、腐蚀膨胀以及字符分割以从车牌图像中分离出组成车牌的单个字

符图像,对分割出来的字符进?预处理(?值化、归?化),然后分析提取,对分割出的字符图像进?识别给出?本形式的车

牌。代码如下:

imwrite(dw,\'\');%将彩?车牌写?dw?件中

a=imread(\'\');%读取车牌?件中的数据

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

imwrite(b,\'gray licence \');%将灰度图像写??件中

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,\'binary licence \');

subplot(3,2,2),imshow(d),title(\'before filtering binary licence plate\')

h=fspecial(\'average\',3);

d=im2bw(round(filter2(h,d)));%使?指定的滤波器hh进?d即均值滤波

imwrite(d,\'after average licence \');

subplot(3,2,3),imshow(d),title(\'after average licence plate\')

se=eye(2); % eye(n) returns the n-by-n identity matrix 单位矩阵

[m,n]=size(d);%返回矩阵b的尺?信息,并存储在m,n

if bwarea(d)/m/n>=0.365 %计算?值图像中对象的总?积与整个?积的?是否?于0.365 d=imerode(d,se);%如果?于0.365

图像进?腐蚀

elseif bwarea(d)/m/n<=0.235 %计算?值图像中对象的总?积与整个?积的?是否?于0.235

d=imdilate(d,se);%如果?于则实现膨胀操作

end

imwrite(d,\'expansion or corrosion the licence \');

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

运?结果如下所?:

9.字符分割

在汽车牌照?动识别过程中,字符分割有承前启后的作?。它在前期牌照定位的基础上进?字符的分割,然后再利?分割的结

果进?字符识别。字符识别的算法很多,因为车牌字符间间隔较?,不会出现字符粘连情况,所以此处采?的?法为寻找连续

有?字的块,若长度?于某阈值,则认为该块有两个字符组成,需要分割。?般分割出来的字符要进?进?步的处理,以满?

下?步字符识别的需要。但是对于车牌的识别,并不需要太多的处理就已经可以达到正确识别的?的。在此只进?了归?化处

理,然后进?后期处理。

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

%?先创建?函数qiegegetword,?后调??程序,将车牌的字符分割开并且进?归?化处理

d=qiege(d);

[m,n]=size(d);

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

imwrite(word4,\'\');

imwrite(word5,\'\');

imwrite(word6,\'\');

imwrite(word7,\'\');

运?结果如下:

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;

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;

SamBw2=double(SamBw2)>1;

for i=1:40

for j=1:20

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

end

end

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

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

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

源代码如下:

I=imread(\'C:UsersyunshuniDesktop新建?件夹\');

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\');%选择阈值0.18,?roberts算?进?边缘检测

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

se=[1;1;1];

I3=imerode(I2,se);%对图像实施腐蚀操作,即膨胀的反操作

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

se=strel(\'rectangle\',[25,25]);%构造结构元素以正?形构造?个se

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

figure(5),imshow(I4);title(\'闭运算后图像\');

I5=bwareaopen(I4,2000);% 去除聚团灰度值?于2000的部分

figure(6),imshow(I5);title(\'去除后图像\');

[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)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?向车牌区域确定

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

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);%进?步确定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;

d=(double(b)>=T); % d:?值图像

subplot(3,2,2),imshow(d),title(\'?值化图像\')

%均值滤波前

% 滤波

h=fspecial(\'average\',3);

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

d=im2bw(round(filter2(h,d)));%使?指定的滤波器hh进?d即均值滤波

subplot(3,2,3),imshow(d),title(\'滤波后图像\')

se=eye(2); % eye(n) returns the n-by-n identity matrix 单位矩阵

[m,n]=size(d);%返回矩阵b的尺?信息,并存储在m,n

if bwarea(d)/m/n>=0.365 %计算?值图像中对象的总?积与整个?积的?是否?于0.365 d=imerode(d,se);%如果?于0.365

图像进?腐蚀

elseif bwarea(d)/m/n<=0.235 %计算?值图像中对象的总?积与整个?积的?是否?于0.235

d=imdilate(d,se);%如果?于则实现膨胀操作

end

subplot(3,2,4),imshow(d),title(\'膨胀或腐蚀图像\');

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(n/6.5)

% 切割出 7 个字符

y1=10;y2=0.25;flag=0;word1=[];

while flag==0

[m,n]=size(d);

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

if l==1 %第?位汉字识别

kmin=37;

kmax=42;

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

kmin=11;

kmax=36;

else l>=3 %第三位以后是字母或数字识别

kmin=1;

kmax=36;

end

for k2=kmin:kmax

Code(l*2)=\' \';

l=l+1;

end


更多推荐

车牌识别