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)));%使?指定的滤波器h对h进?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.字符分割
在汽车牌照?动识别过程中,字符分割有承前启后的作?。它在前期牌照定位的基础上进?字符的分割,然后再利?分割的结
果进?字符识别。字符识别的算法很多,因为车牌字符间间隔较?,不会出现字符粘连情况,所以此处采?的?法为寻找连续
有?字的块,若长度?于某阈值,则认为该块有两个字符组成,需要分割。?般分割出来的字符要进?进?步的处理,以满?
下?步字符识别的需要。但是对于车牌的识别,并不需要太多的处理就已经可以达到正确识别的?的。在此只进?了归?化处
理,然后进?后期处理。
% 寻找连续有?字的块,若长度?于某阈值,则认为该块有两个字符组成,需要分割
%?先创建?函数qiege与getword,?后调??程序,将车牌的字符分割开并且进?归?化处理
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)));%使?指定的滤波器h对h进?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
更多推荐
车牌识别
发布评论