Matlab基于模板匹配的车牌识别,代码已做了详细注释。

A=imread('chepai(2).png');
figure,imshow(A);title('原始图像');%显示原车牌图像%%图像预处理
%对原车牌图像进行倾斜矫正,采用Hough变换
I=HoughTrans('chepai(2).png');
figure,imshow(I);title('倾斜矫正后图像');I1=rgb2gray(I);%进行彩色图像到灰度图像的转换
figure,imshow(I1);title('灰度图像');%选择阈值0.12,用roberts算子进行边缘检测,参数视情况而定
I2=edge(I1,'roberts',0.12,'both');
figure,imshow(I2);title('边缘图像');se=[1;1;1];%自定义结构元素
I3=imerode(I2,se);%对图像实施腐蚀操作
figure,imshow(I3);title('边缘腐蚀图像');se=strel('rectangle',[20,20]);%构造结构元素为正方形,参数视情况而定
I4=imclose(I3,se);%闭运算,图像聚类、填充图像
figure,imshow(I4);title('边缘填充图像');I5=bwareaopen(I4,5000);% 去除聚团灰度值小于2000的部分,参数视情况而定
figure,imshow(I5);title('去除多余聚团图像');se=strel('rectangle',[3,3]);
I5=imerode(I5,se);%再次腐蚀,得到车牌位置,参数视情况而定
figure,imshow(I5);title('车牌位置图像');%%车牌定位
I6=zeros(size(I5,1),size(I5,2));%新建与原图像大小一致的空白图像location=[];%新建空向量组,保存白点坐标for i=1:size(I5,1)%寻找二值图像中的白点位置for j=1:size(I5,2)if I5(i,j)==1  %值1白点newlocation=[i,j];%白点的坐标location=[location;newlocation];%依次添加endend
endmini=inf;maxi=0;%inf是无穷大for i=1:size(location,1)%寻找所有白点中坐标和最大的两个位置,此方法必须要倾斜矫正temp=location(i,1)+location(i,2);if temp<minimini=temp;a=i;%a是最小坐标和endif temp>maximaxi=temp;b=i;%b是最大坐标和end
endfirst_point=location(a,:);%车牌最左上点
last_point=location(b,:);%车牌最右下点
x1=first_point(1);
x2=last_point(1);
y1=first_point(2);
y2=last_point(2);I_plate=I(x1:x2,y1:y2);%车牌的在原图像中所在位置
figure,imshow(I_plate);title('截取的车牌图像');I_plate=OTSU(I_plate);%采用大津函数进行图像对比增强
figure,imshow(I_plate);title('车牌图像增强');I_plate=bwareaopen(I_plate,30);%去除聚团灰度值小于50的部分,参数视情况而定
figure,imshow(I_plate);title('车牌位置图像');%字符分割
X=[];%存放每个间隔字符的列坐标
flag=0;
for j=1:size(I_plate,2)sum_y=sum(I_plate(:,j));%每一列求和if logical(sum_y)~=flag;%列和有变化时,记录下这一列X=[X j];%添加间隔列坐标flag=logical(sum_y);%逻辑标志重新赋值end
endfigure;
m=0;
for n=1:length(X)/2 %每个字符都有最小间距,用来筛出非字符,参数视情况而定if (X(2*n)-X(2*n-1))>20char=I_plate(:,X(2*n-1):X(2*n));%进行粗分割for i=1:size(char,1)%自上往下if sum(char(i,:))~=0%行和非0时,则为字符顶部top=i;%记录行坐标break;endendfor i=1:size(char,1)%自下往上if sum(char(size(char,1)-i,:))~=0%行和非0时,则为字符顶部bottom=size(char,1)-i;%记录行坐标breakendendchar=char(top:bottom,:);%保存截取的位置坐标值subplot(1,7,m+1),imshow(char);%将每次分割的字符图像大小改为40*20大小,采用最近邻插值算法‘nearest’char=imresize(char,[40,20],'nearest');%将分割的字符放入Char_i中m=m+1;%计数eval(strcat('Char_',num2str(m),'=char'));  end
end
%保存图像到文件夹
imwrite(Char_1,'1.jpg');
imwrite(Char_2,'2.jpg');
imwrite(Char_3,'3.jpg');
imwrite(Char_4,'4.jpg');
imwrite(Char_5,'5.jpg');
imwrite(Char_6,'6.jpg');
imwrite(Char_7,'7.jpg');%%字符识别
%新建65个车牌字符序列,依次排序
liccode=strcat(['0':'9' 'A':'H' 'J':'N' 'P':'Z' '藏川鄂甘赣桂贵黑沪吉冀津晋京辽鲁蒙闽宁青琼陕苏皖湘新渝豫粤云浙']);%建立自动识别字符代码表 ?
SubBw2=zeros(40,20);%新建空白二值图像for I=1:7 %对每个字符进行匹配i=int2str(I);t=imread([i,'.jpg']);%依次选择分割的字符SegBw2=imresize(t,[40,20],'nearest');%进行二值化,方便比较%g_max=double(max(max(SegBw2)));%一个max求每一列最大值,两个max求所有的最大值%g_min=double(min(min(SegBw2)));%T=round(g_max-(g_max-g_min)/2);%T为二值化的阈值%SegBw2=(double(SegBw2)>=T);%该方法与上面代码效果相似SegBw2=double(SegBw2);thresh=graythresh(SegBw2);%利用函数获得分割阈值SegBw2=im2bw(SegBw2,thresh);%得到效果增强的图像if I==1  %第一位字符为汉字kmin=35;kmax=65;%汉字的序列elseif I==2 %第二位字符为字母kmin=11;kmax=34;%字母的序列elseif I>=3 %第三位以后为字母或者数字kmin=1;kmax=34;%字母和数字的序列end %每位序列区间取出字符模板,进行比较for k=kmin:kmaxfname=strcat(liccode(k),'.BMP');%65位标准车牌字符图像需提前放入文件夹SamBw2=imread(fname);%依序列读出模版字符%算法同上%g_max=double(max(max(SamBw2)));%一个max求每一列最大值,两个max求所有的最大值%g_min=double(min(min(SamBw2)));%T=round(g_max-(g_max-g_min)/2);%T为二值化的阈值%SamBw2=(double(SamBw2)>=T); SamBw2=double(SamBw2);thresh=graythresh(SamBw2);SamBw2=im2bw(SamBw2,thresh);%利用相关系数函数进行比较a(k)=corr2(SegBw2,SamBw2);%两张图像越相关,返回值越大,0~1endA=a(kmin:kmax);%将比较结果放入AMaxA=max(A);%找到最大值findc=find(A==MaxA);%获取最大值的位置Code(I*2-1)=liccode(findc(1)+kmin-1);%将字符存放在Code中Code(I*2)=' ';%中间空格
end
figure;
imshow('chepai(2).png');title(['车牌识别结果为:',Code],'color','b');


图像:






Matlab车牌识别相关推荐

  1. matlab车牌识别课程设计,matlab车牌识别课程设计报告模板(附源代码).doc

    您所在位置:网站首页 > 海量文档 &nbsp>&nbsp计算机&nbsp>&nbspmatlab matlab车牌识别课程设计报告模板(附源代码). ...

  2. matlab中liccode函数,基于matlab车牌识别系统设计与实现(最终版)

    <基于matlab车牌识别系统设计与实现.doc>由会员分享,可在线阅读全文,更多相关<基于matlab车牌识别系统设计与实现(最终版)>请在www.woc88.com上搜索. ...

  3. 基于matlab车牌识别程序,基于MATLAB车牌识别系统设计

    基于MATLAB车牌识别系统设计(任务书,开题报告,毕业论文11200字) 摘要 社会的不断发展带动着经济也不断的增长,从而也提高了人们的生活水平.汽车的需求量也日渐增加,现代化交通管理的出现,解决了 ...

  4. Matlab车牌识别停车场车辆进出管理系统

    Matlab车牌识别&停车场车辆进出管理系统 数字图像处理期末报告 1.源码文件 2.GUI主界面 3.车牌识别结果 4.GUI停车场管理系统 5.源码下载 后续视频讲解 数字图像处理期末报告 ...

  5. matlab车牌识别代码项目

    由于车牌识别涉及到计算机视觉和图像处理等领域,因此需要涉及到一些专业知识和技能.以下是一些基本步骤和参考代码: 步骤: 读取图像文件并进行预处理(如调整图像大小.灰度化.二值化等). 提取车牌区域,即 ...

  6. 【Matlab车牌识别】停车计费系统【含GUI源码 735期】

    一.代码运行视频(哔哩哔哩) [Matlab车牌识别]停车计费系统[含GUI源码 735期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1] 蔡利梅.MATLA ...

  7. Java matlab车牌识别,车牌识别matlab实现(蓝色车牌和新能源车牌)

    首先放上结果: 新能源车牌识别结果: 蓝色车牌识别结果: 正文开始: 1.在进行图像处理任务之前,首先要明确处理对象和处理流程 处理对象: 新能源车牌和蓝色车牌 处理流程: 2.由于要对蓝色和新能源车 ...

  8. 毕设题目:Matlab车牌识别

    1 车牌识别系统设计与实现 车牌识别系统主要分为三部分:车牌图像预处理.特征提取以及基于BP神经网络对特征进行训练和分类,流程图如图1所示. 图1 车牌识别系统组成示意图 2 车牌图像预处理 车牌图像 ...

  9. 车牌识别matlab,车牌识别matlab实现(蓝色车牌和新能源车牌)

    首先放上结果: 新能源车牌识别结果: 蓝色车牌识别结果: 正文开始: 1.在进行图像处理任务之前,首先要明确处理对象和处理流程 处理对象: 新能源车牌和蓝色车牌 处理流程: 2.由于要对蓝色和新能源车 ...

  10. MATLAB 车牌识别程序介绍 SVM、神经网络[毕业设计]

    程序付费分享: 微信:1075933062 这个文章介绍使用matlab 识别车牌内的信息: 识别的步骤如下: 1.导入图片 2.定位到车牌矩形框的位置 3.进行畸形矫正 4.字符分割 5.生成字符库 ...

最新文章

  1. springboot redis
  2. java File类 常用相关函数
  3. Win64 驱动内核编程-2.基本框架(安装.通讯.HelloWorld)
  4. java学习笔记十一——对象转型
  5. Volatile可见性底层实现原理
  6. 在HTML中嵌入PHP代码,有以下几种方法,其中错误的是( )
  7. pipedreader_Java PipedReader ready()方法与示例
  8. python中0o10_Python基础10—I/O编程
  9. 使用Visual Studio 2017创建React项目
  10. setuptools include_package_data
  11. select下拉框带模糊查询_如何实现参数级联查询
  12. Lc101对称二叉树
  13. 【leetcode-652】寻找重复的子树
  14. 修改系统时区 /etc/localtime
  15. 苹果拼图软件测试,视频照片拼图APP
  16. 架构师小跟班:教你从零开始申请和配置七牛云免费OSS对象存储(不能再详细了)...
  17. java compiler类_利用 JavaCompiler 编译 Java 类文件
  18. 戴森设计大奖,以可持续化设计改变世界
  19. openEuler上一键部署opengauss数据库
  20. VMware esxcli定时开启虚拟机

热门文章

  1. 一对一培训机构如何通过系统来完成课时记录?
  2. c#基础编程题第三题:求1-1/3+1/5-1/7+......共n项之和
  3. 【二】数据结构之List
  4. 【软件工程大作业】快递代拿小程序项目 (第十组)
  5. 如何解决焊盘不匹配导致生产时产生锡珠的问题
  6. Java刷算法:收藏大法
  7. 大学生职业生涯规划书性格特征_大学生职业生涯规划书【十篇】
  8. Google I/O大会:Android 13
  9. 详解 C++ STL 六大组件,看完不懂打我...
  10. linux下简单配置zlib软件