基于模板匹配的字符识别(Matlab)

http://blog.csdn.net/sanwandoujiang/article/details/34103981

1  字符识别简介

字符识别是车牌识别中很重要的一部分,在模式识别中也扮演的很重要的角色。当然,我们可以用很多方法拉进行字符识别,比如:基于向量机(SVM),神经网络,小波等方法。当然基于模板匹配也是一种方法。模板匹配既简单有具有实效性。其中关键在于模板的选取。好的模板对字符识别的结果是决定性的。模板匹配的算法也是重要的。

2 模板匹配算法

       首先本文识别的前提是模板字符是二值图像,背景黑色,字符为白色;同样待识别的字符同样如此。
我们将预处理后的待识别字符图像imageU与字符模板库中的字符图像imageT进行”与“运算得到共同部分图像imageV;将得到的共同部分图像与待识别字符进行逻辑”异或“运算,得到待识别字符图像多余部分imageX;将得到的共同部分与模板字符进行逻辑”异或“运算,得到模板图像多余部分imageW。
      计算每个模板字符图像imageM中白像素个数T,待识别字符图像imageU的白像素个数U,imageU与imageT共同的部分imageV的白像素个数V,imageW的白像素个数W;imageX中白像素个数X;
构造判别函数表达式为:

其中TUV=(T+U+V)/3;
这样,相似系数最大max(Y)对应的模板M为待识别字符;


3  代码实现

由于需要模板库的支持,包含模板库和代码的所有内容可以下载:


[plain]  view plain copy print ? 在CODE上查看代码片 派生到我的代码片
  1. %%%%%%%%%%%%%%%%%%%基于模板匹配的字符识别  
  2. templatePath='G:\licenseTemple\'; %路径因人而异  
  3. fileFormat='.bmp';  
  4. templateImage=zeros(40,20,36);  
  5. Timage=zeros(36,800);  
  6. for i=1:36 %读取模板  
  7.     stri=num2str(i-1);  
  8.     imagePath=[templatePath,stri,fileFormat];  
  9.     tempImage=imread(imagePath);  
  10.     templateImage(:,:,i)=tempImage;  
  11.     clear imagePath stri tempImage;  
  12. end  
  13. characterImage=zeros(40,20,6);  
  14. Uimage=zeros(6,800);  
  15. characterPath='G:\matlab--wavlet\'; %路径因人而异  
  16. charFileFormat='.jpg';  
  17. for i=1:6%读取待识别字符  
  18.     stri=num2str(i+1);  
  19.     imagePath=[characterPath,stri,charFileFormat];  
  20.     tempImage=imread(imagePath);    
  21.     characterImage(:,:,i)=tempImage;  
  22.     clear imagePath stri tempImage;  
  23. end  
  24. %V=zeros(1,36);  
  25. %5X=zeros(1,36);  
  26. %5W=zeros(1,36);  
  27. %U=zeros(1,6);  
  28. %T=zeros(1,36);  
  29. Y=zeros(1,36);  
  30. for i=1:6  
  31.     U=length(find( characterImage(:,:,i))~=0);  
  32.     for j=1:36  
  33.         T=length(find( templateImage(:,:,j))~=0);  
  34.         tempV=characterImage(:,:,i)& templateImage(:,:,j);  
  35.         V=length(find(tempV)~=0);  
  36.         tempW=xor(tempV,templateImage(:,:,j));  
  37.         W=length(find(tempW)~=0);  
  38.         tempX=xor(tempV,characterImage(:,:,i));  
  39.         X=length(find(tempX)~=0);  
  40.         TUV=(T+U+V)/3;  
  41.         tempSum=sqrt(((T-TUV)*(T-TUV)+(U-TUV)*(U-TUV)+(V-TUV)*(V-TUV))/2);  
  42.         Y(j)=V/(W/T*X/U*tempSum);  
  43.     end  
  44.     [MAX,indexMax]=max(Y);  
  45.     stri=num2str(indexMax-1);  
  46.     imagePath=[templatePath,stri,fileFormat];  
  47.     image=imread(imagePath);  
  48.     figure(i);  
  49.     imshow(image);  
  50.     clear imagePath indexMax;  
  51. end  
  52.   
  53.           
  54.         
  55.             
  56.           
  57.       
  • 1
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值