目录

一、理论基础

二、核心程序

三、仿真结论


一、理论基础

车牌识别是计算机视觉领域中的一个重要问题,其目的是从图像中自动识别出车辆的车牌信息。基于模板匹配的车牌识别算法是一种常见的方法,其基本思想是将车牌字符和预先设计好的模板进行匹配,从而识别出车牌号码和字母。

该算法的核心是模板匹配,其数学公式为:

$$
S(x,y)=\sum_{i,j}(T(i,j)-I(x+i,y+j))^2
$$

其中,T(i,j)表示模板中的像素值,I(x+i,y+j)表示待匹配图像中的像素值,S(x,y)表示模板匹配的得分。

模板匹配的过程可以通过滑动模板的方式完成,具体过程如下:

对于输入的车牌图像,将其转换为灰度图像,并进行二值化处理,得到一个二值图像。

对于每个字符模板,计算其在二值图像中的匹配得分,得到一个得分图像。

对于每个字符模板,找到匹配得分最高的位置,即为该字符出现的位置。

对于所有字符模板,按照从左到右的顺序,组合成车牌号码。

下面是基于模板匹配的车牌识别算法的具体实现过程:

预处理
       首先,对于输入的车牌图像,需要进行一些预处理操作,包括灰度化、二值化和去噪等。这些操作可以通过常见的图像处理算法实现,例如灰度化可以使用下面的公式:

$$
I_{gray}=0.299\times R+0.587\times G+0.114\times B
$$

其中,R、G和B分别表示红、绿、蓝三个通道的像素值。

二值化可以使用阈值法实现,去噪可以使用中值滤波等方法实现。

模板设计
       接下来,需要设计字符模板,以便进行模板匹配。对于车牌号码中的每个字符,可以手动设计一个模板,或者使用机器学习等技术进行自动学习和生成。

模板设计的关键是要保证模板与实际字符的形状和大小尽可能地相似,同时还要考虑到字符的变形和噪声等因素。在实际应用中,通常需要设计多个模板,以覆盖不同的字符样式和光照条件。

模板匹配
      接下来,对于每个字符模板,需要在二值图像中进行模板匹配,以得到一个得分图像。具体过程如下:

(1)将字符模板进行灰度化和二值化处理,得到一个二值模板。

(2)对于二值图像中的每个像素,以该像素为中心,将二值模板覆盖在二值图像上,计算二者的差异,得到一个得分。得分越小,表示匹配度越高。

(3)将得分存储在得分图像中,得分图像的大小与二值图像相同。

字符定位
       对于每个字符模板,可以在得分图像中找到得分最小的位置,即为该字符在车牌图像中的位置。由于车牌号码中的字符是按照从左到右的顺序排列的,因此可以根据字符模板的顺序,依次找到每个字符的位置,从而得到整个车牌号码。

具体过程如下:

(1)对于每个字符模板,找到得分图像中得分最小的位置,即为该字符在车牌图像中的位置。

(2)根据字符模板的顺序,依次找到每个字符的位置,将其存储在一个列表中。

(3)根据字符位置列表,可以得到整个车牌号码。如果某个字符的位置无法找到,可以使用默认值进行填充,例如使用“X”表示该位置未识别到字符。

输出结果
      最后,根据得到的车牌号码,可以输出识别结果。在实际应用中,可能还需要进行后续处理,例如校验车牌号码是否合法等。基于模板匹配的车牌识别算法是一种常见的车牌识别方法,其核心是模板匹配。通过设计字符模板,可以实现对车牌号码中字符的识别。该算法的优点是实现简单、速度快,但其缺点是对字符变形和噪声等因素较为敏感,识别精度可能受到影响。在实际应用中,基于模板匹配的车牌识别算法可以和其他车牌识别算法结合使用,以提高识别精度和鲁棒性。同时,还可以通过机器学习等技术对字符模板进行自动学习和优化,从而进一步提高识别精度。

二、核心程序

%=====================读入图片================================
[fn,pn,fi]=uigetfile('*.jpg','选择图片');
I=imread([pn fn]);figure,imshow(I);title('原始图像');%显示原始图像
chepailujing=[pn fn]
I_bai=I;
[PY2,PY1,PX2,PX1]=caitu_fenge(I);% I=rgb2hsv(I);
% [PY2,PY1,PX2,PX1]=caitu_tiqu(I,I_bai);%用HSI模型识别蓝色,用rgb模型识别白色
%================分割车牌区域=================================%===============车牌区域根据面积二次修正======================
[PY2,PY1,PX2,PX1,threshold]=SEC_xiuzheng(PY2,PY1,PX2,PX1);
%==============更新图片=============================
Plate=I_bai(PY1:PY2,PX1:PX2,:);%使用caitu_tiqu
%==============考虑用腐蚀解决蓝色车问题=============
bw=Plate;figure,imshow(bw);title('车牌图像');%hsv彩图提取图像
%==============这里要根据图像的倾斜度进行选择这里选择的图片20090425686.jpg
bw=rgb2gray(bw);figure,imshow(bw);title('灰度图像');
%================倾斜校正======================
qingxiejiao=rando_bianhuan(bw)
bw=imrotate(bw,qingxiejiao,'bilinear','crop');figure,imshow(bw);title('倾斜校正');%取值为负值向右旋转
%==============================================
bw=im2bw(bw,graythresh(bw));%figure,imshow(bw);
bw=bwmorph(bw,'hbreak',inf);%figure,imshow(bw);
bw=bwmorph(bw,'spur',inf);%figure,imshow(bw);title('擦除之前');
bw=bwmorph(bw,'open',5);%figure,imshow(bw);title('闭合运算');
bw = bwareaopen(bw, threshold);figure,imshow(bw);title('擦除');
%==================加入进度条================================
% h=waitbar(0,'程序运行中,请稍等......')
% for i=1:10000
%     waitbar(i/5000,h)
% end
% close(h);
%wavplay(wavread('程序运行中.wav'),22000);
%==========================================================
bw=~bw;figure,imshow(bw);title('擦除反色');
%=============对图像进一步裁剪,保证边框贴近字体===========
bw=touying(bw);figure;imshow(bw);title('Y方向处理');
bw=~bw;
bw = bwareaopen(bw, threshold);
bw=~bw;%figure,imshow(bw);title('二次擦除');
[y,x]=size(bw);%对长宽重新赋值
%=================文字分割=================================
fenge=shuzifenge(bw,qingxiejiao)
[m,k]=size(fenge);
%=================显示分割图像结果=========================
figure;
for s=1:2:k-1subplot(1,k/2,(s+1)/2);imshow(bw( 1:y,fenge(s):fenge(s+1)));
end
%================ 给七张图片定位===============桂AV6388
han_zi  =bw( 1:y,fenge(1):fenge(2));
zi_mu   =bw( 1:y,fenge(3):fenge(4));
zm_sz_1 =bw( 1:y,fenge(5):fenge(6));
zm_sz_2 =bw( 1:y,fenge(7):fenge(8));
shuzi_1 =bw( 1:y,fenge(9):fenge(10));
shuzi_2 =bw( 1:y,fenge(11):fenge(12));
shuzi_3 =bw( 1:y,fenge(13):fenge(14));
%==========================识别====================================
%======================把修正数据读入==============================
xiuzhenghanzi =   imresize(han_zi, [110 55],'bilinear');
xiuzhengzimu  =   imresize(zi_mu,  [110 55],'bilinear');
xiuzhengzm_sz_1=  imresize(zm_sz_1,[110 55],'bilinear');
xiuzhengzm_sz_2 = imresize(zm_sz_2,[110 55],'bilinear');
xiuzhengshuzi_1 = imresize(shuzi_1,[110 55],'bilinear');
xiuzhengshuzi_2 = imresize(shuzi_2,[110 55],'bilinear');
xiuzhengshuzi_3 = imresize(shuzi_3,[110 55],'bilinear');
%============ 把0-9 , A-Z以及省份简称的数据存储方便访问====================
hanzishengfen=duquhanzi(imread('cpgui.bmp'),imread('cpguizhou.bmp'),imread('cpjing.bmp'),imread('cpsu.bmp'),imread('cpyue.bmp'));
%因数字和字母比例不同。这里要修改
shuzizimu=duquszzm(imread('0.bmp'),imread('1.bmp'),imread('2.bmp'),imread('3.bmp'),imread('4.bmp'),...imread('5.bmp'),imread('6.bmp'),imread('7.bmp'),imread('8.bmp'),imread('9.bmp'),...imread('10.bmp'),imread('11.bmp'),imread('12.bmp'),imread('13.bmp'),imread('14.bmp'),...imread('15.bmp'),imread('16.bmp'),imread('17.bmp'),imread('18.bmp'),imread('19.bmp'),...imread('20.bmp'),imread('21.bmp'),imread('22.bmp'),imread('23.bmp'),imread('24.bmp'),...imread('25.bmp'),imread('26.bmp'),imread('27.bmp'),imread('28.bmp'),imread('29.bmp'),...imread('30.bmp'),imread('31.bmp'),imread('32.bmp'),imread('33.bmp'));
zimu  = duquzimu(imread('10.bmp'),imread('11.bmp'),imread('12.bmp'),imread('13.bmp'),imread('14.bmp'),...imread('15.bmp'),imread('16.bmp'),imread('17.bmp'),imread('18.bmp'),imread('19.bmp'),...imread('20.bmp'),imread('21.bmp'),imread('22.bmp'),imread('23.bmp'),imread('24.bmp'),...imread('25.bmp'),imread('26.bmp'),imread('27.bmp'),imread('28.bmp'),imread('29.bmp'),...imread('30.bmp'),imread('31.bmp'),imread('32.bmp'),imread('33.bmp'));
shuzi = duqushuzi(imread('0.bmp'),imread('1.bmp'),imread('2.bmp'),imread('3.bmp'),imread('4.bmp'),...imread('5.bmp'),imread('6.bmp'),imread('7.bmp'),imread('8.bmp'),imread('9.bmp'));
%============================识别结果================================
i=1;%shibiezm_sz该函数识别数字有问题
jieguohanzi  = shibiehanzi(hanzishengfen,xiuzhenghanzi);shibiejieguo(1,i) =jieguohanzi;  i=i+1;
jieguozimu   = shibiezimu(zimu,xiuzhengzimu);           shibiejieguo(1,i) =jieguozimu;   i=i+1;
jieguozm_sz_1= shibiezm_sz(shuzizimu,xiuzhengzm_sz_1);  shibiejieguo(1,i) =jieguozm_sz_1;i=i+1;
jieguozm_sz_2= shibiezm_sz(shuzizimu,xiuzhengzm_sz_2);  shibiejieguo(1,i) =jieguozm_sz_2;i=i+1;
jieguoshuzi_1= shibieshuzi(shuzi,xiuzhengshuzi_1);      shibiejieguo(1,i) =jieguoshuzi_1;i=i+1;
jieguoshuzi_2= shibieshuzi(shuzi,xiuzhengshuzi_2);      shibiejieguo(1,i) =jieguoshuzi_2;i=i+1;
jieguoshuzi_3= shibieshuzi(shuzi,xiuzhengshuzi_3);      shibiejieguo(1,i) =jieguoshuzi_3;i=i+1;
%==========================对话框显示显示=============================================
shibiejieguo
msgbox(shibiejieguo,'识别结果');
%=====================导出文本==================
fid=fopen('Data.xls','a+');
fprintf(fid,'%s\r\n',shibiejieguo,datestr(now));
fclose(fid);
% %===================读出声音===================
% duchushengyin(shibiejieguo);
%================读取计时==========================
t=toc
%=======================================
up2139 

三、仿真结论

基于模板匹配的车牌识别算法,输出数字和英文字母相关推荐

  1. 【车牌识别】基于模板匹配实现车牌识别含Matlab源码

    1 简介 车牌识别系统是计算机视觉与模式识别技术在智能交通里的重要研究课题之一.其功能是将运动中的汽车牌照从复杂背景中提取出来,并识别出车牌号码.车牌识别技术广泛应用于高速公路上的电子收费,日常的停车 ...

  2. 基于模板匹配的车牌识别系统实例

    这几天其实是准备做课题的,无奈车牌识别系统(界面是VS2017+Qt5.9.2做的)一直没有做完,所以一直在修正这个系统,前三天其实已经完成了,最后一天是改进识别方案,虽然个别字符识别不准确(尤其是汉 ...

  3. matlab 图像模板匹配,基于MATLAB模板匹配的车牌识别系统

    一.课题名称[Q1321814823] 基于MATLAB模板匹配的车牌识别系统 二.课题背景 随着汽车数量的增加,城市交通状况日益受到人们的重视,如何进行有效的交通管理更是成为了人们关注的焦点.针对此 ...

  4. 【图像识别】基于模板匹配算法求解车牌识别问题matlab代码含GUI界面

    1 简介 随着经济社会的迅速发展,人民对生活水平的要求也不断提高,从而引起汽车的数量的增加.给出行带来便捷的同时,车辆的管理问题也日益显著.车牌识别系统是指能将监控中运动的车辆的汽车牌照信息从复杂背景 ...

  5. 【车牌识别】基于模板匹配算法的车牌识别门禁系统附matlab代码

    1 简介 随着社会的进步,汽车数量日益增加,城市交通状况越来越受到人们的重视,如何进行有效的交通管理成为目前亟待解决的问题.针对此问题,人们相继研制出了各种交通道路监管系统,各种各样的车牌识别系统也应 ...

  6. m基于sift特征提取和模板匹配的车标识别算法matlab仿真

    目录 1.算法描述 2.仿真效果预览 3.MATLAB核心程序 4.完整MATLAB 1.算法描述 车标识别技术研究是近几年出现的,尚未成熟.智能交通系统主要应用于高速公路收费管理系统.高速公路超速自 ...

  7. 【图像识别】基于模板匹配算法求解车牌识别问题matlab代码

    1 简介 随着经济社会的迅速发展,人民对生活水平的要求也不断提高,从而引起汽车的数量的增加.给出行带来便捷的同时,车辆的管理问题也日益显著.车牌识别系统是指能将监控中运动的车辆的汽车牌照信息从复杂背景 ...

  8. 【车牌识别】模板匹配新能源车牌识别【含Matlab源码 865期】

    ⛄一.简介 1 在进行图像处理任务之前,首先要明确处理对象和处理流程 处理对象: 新能源车牌和蓝色车牌 处理流程: 2 由于要对蓝色和新能源车牌进行识别,而且新能源车牌是渐变色,所以直接通过设定阈值的 ...

  9. 【指纹识别】基于模板匹配实现指纹识别门禁系统含Matlab源码

    1 简介 近年来,随着识别技术和网络技术的飞速发展,门禁系统也得到了飞跃式的发展,出现了基于指纹识别的门禁系统.这种系统具有安全性,方便性和易管理性等特点,是确保各重要部门出入口安全的有效措施,现已广 ...

最新文章

  1. C#按关闭按钮实现最小化,按ESC才关闭的实现【含系统消息大全】
  2. 基于python的螺纹钢28分钟策略
  3. 滑动门和翻转门实现的横竖双tab标签测试页面(附源码)
  4. python按钮点击按一次触发一次_家里有个“按钮开关”能救命,必须每个月按一次,学会受用一生!...
  5. JetBrains又出神器啦,Fleet,体验飞一般的感觉
  6. css flexbox模型_CSS Flexbox在全国范围内的公路旅行中得到了解释
  7. java pdf文件压缩_PDF文件压缩转换教程
  8. 基于JavaScript实现配对游戏
  9. 苹果市值超过微软成第一大科技公司
  10. Version Control
  11. mysql导入超大sql文件方法
  12. Python从头开始的演变策略
  13. Python实现批量网站URL存活检测
  14. java中 this详解
  15. [VS]网页连接数据库
  16. 初学cesium时的一些笔记,过于潦草看看就好
  17. java.lang.IllegalStateException: Failed to introspect Class
  18. vcruntime140.dll不可用或缺少
  19. java推荐书单 什么值得读 (2021年1月8日更新)
  20. 【ai·ps·word字体问题】

热门文章

  1. APUS点亮印度排灯节 本地化运营造就“网红祝福语”
  2. 拼团小程序源码_带你了解拼团小程序
  3. 神经网络——反向传播BP算法应用案例
  4. selenium 后续来啦 ! ! !
  5. 信息论与编码技术之离散信道及其容量总结
  6. HPCC实践教程(初步)
  7. 哔哩哔哩小助手(GUI)
  8. 机器学习笔记[七]:聚类
  9. 新版新概念英语1-4册(英音+美音)MP3打包下载
  10. 工业控制系统安全评估流程系统评定与分类