车牌识别的matlab程序程序讲解模板.docx
- 文档编号:1820787
- 上传时间:2022-10-24
- 格式:DOCX
- 页数:9
- 大小:267.42KB
车牌识别的matlab程序程序讲解模板.docx
《车牌识别的matlab程序程序讲解模板.docx》由会员分享,可在线阅读,更多相关《车牌识别的matlab程序程序讲解模板.docx(9页珍藏版)》请在冰豆网上搜索。
车牌识别的matlab程序程序讲解模板
clc
clear
closeall
I=imread('chepai.jpg');
subplot(3,2,1);imshow(I),title('原始图像');
I_gray=rgb2gray(I);
subplot(3,2,2),imshow(I_gray),title('灰度图像');
%======================形态学预处理======================
I_edge=edge(I_gray,'sobel');
subplot(3,2,3),imshow(I_edge),title('边缘检测后图像');
se=[1;1;1];
I_erode=imerode(I_edge,se);
subplot(3,2,4),imshow(I_erode),title('腐蚀后边缘图像');
se=strel('rectangle',[25,25]);
I_close=imclose(I_erode,se);%图像闭合、填充图像
subplot(3,2,5),imshow(I_close),title('填充后图像');
I_final=bwareaopen(I_close,2000);%去除聚团灰度值小于2000的部分
subplot(3,2,6),imshow(I_final),title('形态滤波后图像');
%==========================车牌分割=============================
I_new=zeros(size(I_final,1),size(I_final,2));
location_of_1=[];
fori=1:
size(I_final,1)%寻找二值图像中白的点的位置
forj=1:
size(I_final,2)
ifI_final(i,j)==1;
newlocation=[i,j];
location_of_1=[location_of_1;newlocation];
end
end
end
mini=inf;maxi=0;
fori=1:
size(location_of_1,1)
%寻找所有白点中,x坐标与y坐标的和最大,最小的两个点的位置
temp=location_of_1(i,1)+location_of_1(i,2);
iftemp mini=temp; a=i; end iftemp>maxi maxi=temp; b=i; end end first_point=location_of_1(a,: );%和最小的点为车牌的左上角 last_point=location_of_1(b,: );%和最大的点为车牌的右下角 x1=first_point (1)+4;%坐标值修正 x2=last_point (1)-4; y1=first_point (2)+4; y2=last_point (2)-4; I_plate=I(x1: x2,y1: y2); I_plate=OTSU(I_plate);%以OTSU算法对分割出的车牌进行自适应二值化处理 I_plate=bwareaopen(I_plate,50); figure,imshow(I_plate),title('车牌提取')%画出最终车牌 %=========================字符分割============================ X=[];%用来存放水平分割线的横坐标 flag=0; forj=1: size(I_plate,2) sum_y=sum(I_plate(: j)); iflogical(sum_y)~=flag%列和有变化时,记录下此列 X=[Xj]; flag=logical(sum_y); end end figure forn=1: 7 char=I_plate(: X(2*n-1): X(2*n)-1);%进行粗分割 fori=1: size(char,1)%这两个for循环对分割字符的上下进行裁剪 ifsum(char(i,: ))~=0 top=i; break end end fori=1: size(char,1) ifsum(char(size(char,1)-i,: ))~=0 bottom=size(char,1)-i; break end end char=char(top: bottom,: ); subplot(2,4,n);imshow(char); char=imresize(char,[32,16],'nearest');%归一化为32*16的大小,以便模板匹配 eval(strcat('Char_',num2str(n),'=char;'));%将分割的字符放入Char_i中 end %==========================字符识别============================= char=[]; store1=strcat('京','津','沪','渝','冀','晋','辽','吉','黑','苏','浙'...%汉字识别 '皖','闽','赣','鲁','豫','鄂','湘','粤','琼','川','贵','云','陕'... '甘','青','藏','桂','皖','新','宁','港','鲁','蒙'); forj=1: 34 Im=Char_1; Template=imread(strcat('chinese\',num2str(j),'.bmp'));%chinese文件附在最后 Template=im2bw(Template); Differ=Im-Template; Compare(j)=sum(sum(abs(Differ))); end index=find(Compare==(min(Compare))); char=[charstore1(index)]; store2=strcat('A','B','C','D','E','F','G','H','J','K','L','M','M','N','P','Q','R'... 'S','T','U','V','W','X','Y','Z','0','1','2','3','4','5','6','7','8','9'); fori=2: 7%字母数字识别 forj=1: 35 Im=eval(strcat('Char_',num2str(i))); Template=imread(strcat('cha&num\',num2str(j),'.bmp'));%cha&num文件附在最后 Template=im2bw(Template); Differ=Im-Template; Compare(j)=sum(sum(abs(Differ))); end index=find(Compare==(min(Compare))); char=[charstore2(index)]; end figure,imshow(I),title(strcat('车牌为: ',char)) 信研-11XX2011301XXXXXX 模式识别作业—车牌识别 1、作业要求: 要求: 任给一幅符合假定的图片,自动识别出车牌号。 如: 给定如下图片,自动输出(京JX9168) 2、设计步骤: 所设计的车牌识别的流程包括图像预处理,车牌分割,字符分割,及字符识别。 详见matalb程序。 3、程序讲解 1)第一部分为图像的预处理。 此部分借鉴了别人的程序,将灰度图像以sobel算子检测边缘;再对边缘图像进行腐蚀,去除掉细的,间断的边缘;对剩下的区域进行闭合以填充图像,此时可以看到车牌区域形成了一个大的连通域;调用bwareaopen函数去掉小的连通域,此时整个二值图像只b剩下了车牌区域为1。 如下图所示: 2)第二部分为车牌的提取 此部分的工作为将上一步的白色区域取出,其对应的就是车牌区域。 设计思路如下: 首先将二值图像f中所有为1的点的坐标放入数组location_of_1中,对这些坐标遍历计算,寻找x坐标与y坐标之和最大的点a与最小的点b,a即为车牌的左上角,b为车牌的右下角。 通过这两个坐标将车牌分割出来,并对灰度车牌图像以OTSU算法进行自适应二值化分割。 最终效果如下: 3)第三部分为字符分割 此部分的工作是将车牌里的7个字符分别提取出来。 方法如下: 对该二值图从左向右像按列z遍历,计算每一列之和,没有白点的列和为0,有白点的列和非零,转换为逻辑1,记录下所有列和在0与1转换的列,即为需要切割的列,共有14列,可切出7个字符。 切割出单个字符后,放入char_(i)中,并切割掉每个字符的上下的空白区域,完成精确切割,效果如下: 4)第四部分为字符的识别 识别的方法主要有模板匹配字符识别算法,统计特征匹配算法,神经网络字符识别算法和支持向量机模式识别算法。 由于分割的字符效果较好,为明显畸变,模k板维数低(32*16),且因为时间关系,这里采用了模板匹配识别算法。 该程序把切割出的字符与库里的汉字和字符的模板做减法运算,找到差别点最少的模板为对应模板,输出该模板对应的字符,最后识别出其为“京JX9168”。 如下: Chinese模板文件: Cha&num模板文件: (将图片放入文件夹中,放在程序目录下) OTSU.m文件: functionJ=OTSU(I) Hi=imhist(I);%直方图 sum1=sum(Hi); fori=1: 255 w1=sum(Hi(1: i))/sum1;%第一类概率 w2=sum(Hi((i+1): 256))/sum1;%第二类概率 m1=(0: (i-1))*Hi(1: i)/sum(Hi(1: i));%第一类平均灰度值 m2=(i: 255)*Hi((i+1): 256)/sum(Hi((i+1): 256));%第二类平均灰度值 Jw(i)=w1*w2*(m1-m2)^2; end [maxm,thresh]=max(Jw);%寻找阈值 %subplot(2,2,1);imshow(I);title('原图像'); %subplot(2,2,[3,4]);imhist(I);holdon;plot(thresh,3,'+r');title((strcat('阈值为',num2str(thresh)))); I(find(I<=thresh))=0; I(find(I>thresh))=256;%二值化 J=I; %subplot(2,2,2),imshow(I),title('二值化图像zk');
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 车牌 识别 matlab 程序 讲解 模板
![提示](https://static.bdocx.com/images/bang_tan.gif)