久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 11406|回復: 8
打印 上一主題 下一主題
收起左側

車牌識別matlab 源碼+字符模板

  [復制鏈接]
跳轉到指定樓層
樓主
這是我們去年設計自己做的,主要是matlab源碼和自制的字符模板!目前還有很多缺陷 求指正

資料下載:
chepaishibie.zip (229.89 KB, 下載次數: 351)

程序源碼

  1. function [d]=main(jpg)
  2. close all
  3. clc
  4. I=imread('car1.jpg');
  5. figure(1),imshow(I);title('原圖')
  6. I1=rgb2gray(I);
  7. figure(2),subplot(1,2,1),imshow(I1);title('灰度圖');
  8. figure(2),subplot(1,2,2),imhist(I1);title('灰度圖直方圖');
  9. I2=edge(I1,'roberts',0.15,'both');
  10. figure(3),imshow(I2);title('robert算子邊緣檢測')
  11. se=[1;1;1];
  12. I3=imerode(I2,se);
  13. figure(4),imshow(I3);title('腐蝕后圖像');
  14. se=strel('rectangle',[25,25]);
  15. I4=imclose(I3,se);
  16. figure(5),imshow(I4);title('平滑圖像的輪廓');
  17. I5=bwareaopen(I4,2000);
  18. figure(6),imshow(I5);title('從對象中移除小對象');
  19. [y,x,z]=size(I5);
  20. myI=double(I5);
  21. tic
  22. Blue_y=zeros(y,1);
  23. for i=1:y
  24.     for j=1:x
  25.              if(myI(i,j,1)==1)
  26.   
  27.                 Blue_y(i,1)= Blue_y(i,1)+1;%藍色像素點統計
  28.             end  
  29.      end      
  30. end
  31. [temp MaxY]=max(Blue_y);%Y方向車牌區域確定
  32. PY1=MaxY;
  33. while ((Blue_y(PY1,1)>=5)&&(PY1>1))
  34.         PY1=PY1-1;
  35. end   
  36. PY2=MaxY;
  37. while ((Blue_y(PY2,1)>=5)&&(PY2<y))
  38.         PY2=PY2+1;
  39. end
  40. IY=I(PY1:PY2,:,:);
  41. %%%%%% X方向 %%%%%%%%%
  42. Blue_x=zeros(1,x);%進一步確定x方向的車牌區域
  43. for j=1:x
  44.      for i=PY1:PY2
  45.             if(myI(i,j,1)==1)
  46.                 Blue_x(1,j)= Blue_x(1,j)+1;               
  47.             end  
  48.      end      
  49. end
  50.   
  51. PX1=1;
  52. while ((Blue_x(1,PX1)<3)&&(PX1<x))
  53.        PX1=PX1+1;
  54. end   
  55. PX2=x;
  56. while ((Blue_x(1,PX2)<3)&&(PX2>PX1))
  57.         PX2=PX2-1;
  58. end
  59. PX1=PX1-1;%對車牌區域的校正
  60. PX2=PX2+1;
  61.   dw=I(PY1:PY2-8,PX1:PX2,:);
  62. t=toc;
  63. figure(7),subplot(1,2,1),imshow(IY),title('行方向合理區域');
  64. figure(7),subplot(1,2,2),imshow(dw),title('定位剪切后的彩色車牌圖像')
  65. imwrite(dw,'dw.jpg');
  66. [filename,filepath]=uigetfile('dw.jpg','輸入一個定位裁剪后的車牌圖像');
  67. jpg=strcat(filepath,filename);
  68. a=imread('dw.jpg');
  69. b=rgb2gray(a);
  70. imwrite(b,'1.車牌灰度圖像.jpg');
  71. figure(8);subplot(3,2,1),imshow(b),title('1.車牌灰度圖像')
  72. g_max=double(max(max(b)));
  73. g_min=double(min(min(b)));
  74. T=round(g_max-(g_max-g_min)/3); % T 為二值化的閾值
  75. [m,n]=size(b);
  76. d=(double(b)>=T);  % d:二值圖像
  77. imwrite(d,'2.車牌二值圖像.jpg');
  78. figure(8);subplot(3,2,2),imshow(d),title('2.車牌二值圖像')
  79. figure(8),subplot(3,2,3),imshow(d),title('3.均值濾波前')

  80. % 濾波
  81. h=fspecial('average',3);
  82. d=im2bw(round(filter2(h,d)));
  83. imwrite(d,'4.均值濾波后.jpg');
  84. figure(8),subplot(3,2,4),imshow(d),title('4.均值濾波后')

  85. % 某些圖像進行操作
  86. % 膨脹或腐蝕
  87. % se=strel('square',3);  % 使用一個3X3的正方形結果元素對象對創建的圖像進行膨脹
  88. % 'line'/'diamond'/'ball'...
  89. se=eye(2); % eye(n) returns the n-by-n identity matrix 單位矩陣
  90. [m,n]=size(d);
  91. if bwarea(d)/m/n>=0.365
  92.     d=imerode(d,se);
  93. elseif bwarea(d)/m/n<=0.235
  94.     d=imdilate(d,se);
  95. end
  96. imwrite(d,'5.膨脹或腐蝕處理后.jpg');
  97. figure(8),subplot(3,2,5),imshow(d),title('5.膨脹或腐蝕處理后')

  98. % 尋找連續有文字的塊,若長度大于某閾值,則認為該塊有兩個字符組成,需要分割
  99. d=qiege(d);
  100. [m,n]=size(d);
  101. figure,subplot(2,1,1),imshow(d),title(n)
  102. k1=1;k2=1;s=sum(d);j=1;
  103. while j~=n
  104.     while s(j)==0
  105.         j=j+1;
  106.     end
  107.     k1=j;
  108.     while s(j)~=0 && j<=n-1
  109.         j=j+1;
  110.     end
  111.     k2=j-1;
  112.     if k2-k1>=round(n/6.5)
  113.         [val,num]=min(sum(d(:,[k1+5:k2-5])));
  114.         d(:,k1+num+5)=0;  % 分割
  115.     end
  116. end
  117. % 再切割
  118. d=qiege(d);
  119. % 切割出 7 個字符
  120. y1=10;y2=0.25;flag=0;word1=[];
  121. while flag==0
  122.     [m,n]=size(d);
  123.     left=1;wide=0;
  124.     while sum(d(:,wide+1))~=0
  125.         wide=wide+1;
  126.     end
  127.     if wide<y1   % 認為是左側干擾
  128.         d(:,[1:wide])=0;
  129.         d=qiege(d);
  130.     else
  131.         temp=qiege(imcrop(d,[1 1 wide m]));
  132.         [m,n]=size(temp);
  133.         all=sum(sum(temp));
  134.         two_thirds=sum(sum(temp([round(m/3):2*round(m/3)],:)));
  135.         if two_thirds/all>y2
  136.             flag=1;word1=temp;   % WORD 1
  137.         end
  138.         d(:,[1:wide])=0;d=qiege(d);
  139.     end
  140. end
  141. % 分割出第二個字符
  142. [word2,d]=getword(d);
  143. % 分割出第三個字符
  144. [word3,d]=getword(d);
  145. % 分割出第四個字符
  146. [word4,d]=getword(d);
  147. % 分割出第五個字符
  148. [word5,d]=getword(d);
  149. % 分割出第六個字符
  150. [word6,d]=getword(d);
  151. % 分割出第七個字符
  152. [word7,d]=getword(d);
  153. subplot(5,7,1),imshow(word1),title('1');
  154. subplot(5,7,2),imshow(word2),title('2');
  155. subplot(5,7,3),imshow(word3),title('3');
  156. subplot(5,7,4),imshow(word4),title('4');
  157. subplot(5,7,5),imshow(word5),title('5');
  158. subplot(5,7,6),imshow(word6),title('6');
  159. subplot(5,7,7),imshow(word7),title('7');
  160. [m,n]=size(word1);

  161. % 商用系統程序中歸一化大小為 40*20,此處演示
  162. word1=imresize(word1,[40 20]);
  163. word2=imresize(word2,[40 20]);
  164. word3=imresize(word3,[40 20]);
  165. word4=imresize(word4,[40 20]);
  166. word5=imresize(word5,[40 20]);
  167. word6=imresize(word6,[40 20]);
  168. word7=imresize(word7,[40 20]);

  169. subplot(5,7,15),imshow(word1),title('1');
  170. subplot(5,7,16),imshow(word2),title('2');
  171. subplot(5,7,17),imshow(word3),title('3');
  172. subplot(5,7,18),imshow(word4),title('4');
  173. subplot(5,7,19),imshow(word5),title('5');
  174. subplot(5,7,20),imshow(word6),title('6');
  175. subplot(5,7,21),imshow(word7),title('7');
  176. imwrite(word1,'1.jpg');
  177. imwrite(word2,'2.jpg');
  178. imwrite(word3,'3.jpg');
  179. imwrite(word4,'4.jpg');
  180. imwrite(word5,'5.jpg');
  181. imwrite(word6,'6.jpg');
  182. imwrite(word7,'7.jpg');
  183. liccode=char(['0':'9' 'A':'Z' '蘇豫陜魯京遼浙']);  %建立自動識別字符代碼表  
  184. SubBw2=zeros(40,20);
  185. l=1;
  186. for I=1:7
  187.       ii=int2str(I);
  188.      t=imread([ii,'.jpg']);
  189.       SegBw2=imresize(t,[40 20],'nearest');
  190.         if l==1                 %第一位漢字識別
  191.             kmin=37;
  192.             kmax=43;
  193.         elseif l==2             %第二位 A~Z 字母識別
  194.             kmin=11;
  195.             kmax=36;
  196.         else l>=3               %第三位以后是字母或數字識別
  197.             kmin=1;
  198.             kmax=36;
  199.         
  200.         end
  201.         
  202.         for k2=kmin:kmax
  203.             fname=strcat('F:\edge 下載\車牌識別3 第二版\車牌識別\程序與圖像\字符模板\',liccode(k2),'.jpg');
  204.             SamBw2 = imread(fname);
  205.             for  i=1:40
  206.                 for j=1:20
  207.                     SubBw2(i,j)=SegBw2(i,j)-SamBw2(i,j);
  208.                 end
  209.             end
  210.            % 以上相當于兩幅圖相減得到第三幅圖
  211.             Dmax=0;
  212.             for k1=1:40
  213.                 for l1=1:20
  214.                     if  ( SubBw2(k1,l1) > 0 | SubBw2(k1,l1) <0 )
  215.                         Dmax=Dmax+1;
  216.                     end
  217.                 end
  218.             end
  219.             Error(k2)=Dmax;
  220.         end
  221.         Error1=Error(kmin:kmax);
  222.         MinError=min(Error1);
  223.         findc=find(Error1==MinError);
  224.         Code(l*2-1)=liccode(findc(1)+kmin-1);
  225.         Code(l*2)=' ';
  226.         l=l+1;
  227. end
  228. figure(10),imshow(dw),title (['車牌號碼:', Code],'Color','b');

  229. function [word,result]=getword(d)
  230. word=[];flag=0;y1=8;y2=0.5;
  231.     while flag==0
  232.         [m,n]=size(d);
  233.         wide=0;
  234.         while sum(d(:,wide+1))~=0 && wide<=n-2
  235.             wide=wide+1;
  236.         end
  237.         temp=qiege(imcrop(d,[1 1 wide m]));
  238.         [m1,n1]=size(temp);
  239.         if wide<y1 && n1/m1>y2
  240.             d(:,[1:wide])=0;
  241.             if sum(sum(d))~=0
  242.                 d=qiege(d);  % 切割出最小范圍
  243.             else word=[];flag=1;
  244.             end
  245.         else
  246.             word=qiege(imcrop(d,[1 1 wide m]));
  247.             d(:,[1:wide])=0;
  248.             if sum(sum(d))~=0;
  249.                 d=qiege(d);flag=1;
  250.             else d=[];
  251.             end
  252.         end
  253.     end
  254. %end
  255.           result=d;
  256.          
  257.          
  258.           function e=qiege(d)
  259. [m,n]=size(d);
  260. top=1;bottom=m;left=1;right=n;   % init
  261. while sum(d(top,:))==0 && top<=m
  262.     top=top+1;
  263. end
  264. while sum(d(bottom,:))==0 && bottom>=1
  265.     bottom=bottom-1;
  266. end
  267. while sum(d(:,left))==0 && left<=n
  268.     left=left+1;
  269. end
  270. while sum(d(:,right))==0 && right>=1
  271.     right=right-1;
  272. end
  273. dd=right-left;
  274. hh=bottom-top;
  275. e=imcrop(d,[left top dd hh]);
復制代碼


評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏6 分享淘帖 頂2 踩
回復

使用道具 舉報

沙發
ID:57657 發表于 2016-10-17 15:32 | 只看該作者
車牌后面帶字的能否被識別?比如教練車以及大型貨車之類的。
回復

使用道具 舉報

板凳
ID:430187 發表于 2018-11-23 15:34 | 只看該作者
你好,我參考了您車牌識別的程序,但是我換了圖片,識別之后還是和您的識別結果一樣,沒有根據圖片的實際內容識別出來,是怎么回事?
回復

使用道具 舉報

地板
ID:470595 發表于 2019-4-15 14:28 | 只看該作者
Nora紅豆抹茶 發表于 2018-11-23 15:34
你好,我參考了您車牌識別的程序,但是我換了圖片,識別之后還是和您的識別結果一樣,沒有根據圖片的實際內 ...

您好,我也遇到和您一樣的問題    請問您的問題決解了嗎   能否解答一下這個問題
回復

使用道具 舉報

5#
ID:461935 發表于 2019-6-22 16:30 | 只看該作者
有車牌圖嗎
回復

使用道具 舉報

6#
ID:436824 發表于 2020-1-3 21:34 | 只看該作者
數字無法識別,現實的都是M,該怎么解決
回復

使用道具 舉報

7#
ID:917230 發表于 2021-6-22 19:05 來自手機 | 只看該作者
車牌第一個字為左右結構識別分開了怎么辦,就像渝它分成了氵和俞有時候就只有俞
回復

使用道具 舉報

8#
ID:1012605 發表于 2022-3-23 22:15 | 只看該作者
跟網上的很多人做的一模一樣,,,
回復

使用道具 舉報

9#
ID:1025848 發表于 2022-5-11 23:00 | 只看該作者
字符模板不存在怎么弄啊
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产精品一区在线 | www日本高清视频 | 午夜欧美一区二区三区在线播放 | 久久一二 | 日韩h| 国产一区二区免费 | 国产欧美精品在线观看 | 国产欧美精品一区 | 国产黄色av网站 | 99re热精品视频 | 91人人视频在线观看 | 九色国产 | 久久久精 | 91在线视频免费观看 | 特级生活片 | 一区二区三区免费 | 国产精品久久久久久一级毛片 | 欧美日韩在线视频观看 | 精品一区二区三区在线观看国产 | 亚洲欧美bt| 国产99久久精品一区二区永久免费 | 国产人成在线观看 | 欧美久久天堂 | 亚洲一区精品在线 | 色综合一区二区 | 韩日一区二区三区 | 久久不卡| 日韩伦理一区二区 | 青青艹在线视频 | 在线欧美亚洲 | 国产黄色一级片 | 欧美日韩精品一区二区 | 国产一级免费视频 | 天堂网中文字幕在线观看 | 超碰97免费 | 亚洲一区二区在线播放 | 欧美日韩精品久久久免费观看 | 日韩不卡在线观看 | 欧美一级α片 | 激情一区二区三区 | 亚洲激情一级片 |