課程設(shè)計(jì)--matlab車牌識別系統(tǒng)_第1頁
已閱讀1頁,還剩21頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、<p><b>  課程設(shè)計(jì)報(bào)告</b></p><p><b>  目錄</b></p><p>  一.課程設(shè)計(jì)任務(wù)3</p><p>  二.課程設(shè)計(jì)原理及設(shè)計(jì)方案3</p><p><b>  1.系統(tǒng)簡述3</b></p><p&g

2、t;  2.圖像預(yù)處理:4</p><p><b>  3.車牌定位4</b></p><p><b>  4.字符分割5</b></p><p><b>  5.字符識別6</b></p><p>  三.課程設(shè)計(jì)的步驟和結(jié)果6</p><p&g

3、t;<b>  1.車牌定位6</b></p><p><b>  2.字符分割10</b></p><p><b>  3.字符識別12</b></p><p>  四.設(shè)計(jì)GUI界面16</p><p>  五.課程設(shè)計(jì)總結(jié)和體會17</p><

4、;p><b>  六.參考文獻(xiàn)17</b></p><p>  七.設(shè)計(jì)總代碼18</p><p>  1.chepai_main.m18</p><p>  2.chepaidingwei.m18</p><p>  3.fenge.m19</p><p>  4.rando_b

5、ianhuan.m21</p><p>  5.zifushibie2.m21</p><p><b>  一.課程設(shè)計(jì)任務(wù)</b></p><p>  在交通管理過程中,通常采用視頻監(jiān)控方式對闖紅燈和超速等違章車輛進(jìn)行監(jiān)督。對違章車輛,需要自動(dòng)檢測車牌信息,提取車牌號碼,以便查找車主信息和監(jiān)督管理。國內(nèi)常用的一般車牌通常是是藍(lán)底白字,長寬

6、比3:1。</p><p>  1、對車牌圖像進(jìn)行預(yù)處理,然后進(jìn)行車牌定位;</p><p><b>  2、進(jìn)行字符分割;</b></p><p>  2、對車牌中的數(shù)字、字母和漢字進(jìn)行提取和識別;</p><p>  3、要求自行設(shè)計(jì)方案、編寫代碼實(shí)現(xiàn)上述功能,并設(shè)計(jì)車牌識別的軟件界面。</p><

7、;p>  二.課程設(shè)計(jì)原理及設(shè)計(jì)方案</p><p><b>  1.系統(tǒng)簡述</b></p><p>  一個(gè)完整的車牌識別系統(tǒng)閉應(yīng)包括車輛檢測、圖像采集、圖像預(yù)處理、車牌定位、字符分割、字符識別等單元。當(dāng)車輛到達(dá)觸發(fā)圖像采集單元時(shí),系統(tǒng)采集當(dāng)前的視頻圖像。車輛識別單元對圖像進(jìn)行處理,定位出牌照位置,再將車牌中的字符分割出來進(jìn)行識別,然后組成車牌號碼輸出。車牌

8、識別系統(tǒng)原理如圖l所示。</p><p>  1)圖像預(yù)處理:對汽車圖像進(jìn)行圖像轉(zhuǎn)換、圖像增強(qiáng)等。</p><p>  2)車牌定位:從預(yù)處理后的汽車圖像中分割出車牌圖像。即在一幅車輛圖像中找到車牌所在的位置。</p><p>  3)字符分割:對車牌圖像進(jìn)行幾何校正、去噪、二值化以及字符分割以從車牌圖像中分離出組成車牌號碼的單個(gè)字符圖像</p>&l

9、t;p>  4)字符識別:對分割出來的字符進(jìn)行預(yù)處理(二值化、歸一化),然后分析提取,對分割出的字符圖像進(jìn)行識別給出文本形式的車牌號碼。</p><p>  為了用于牌照的分割和牌照字符的識別,原始圖象應(yīng)具有適當(dāng)?shù)牧炼?,較大的對比度和清晰可辯的牌照圖象。但由于該系統(tǒng)的攝像部分工作于開放的戶外環(huán)境,加之車輛牌照的整潔度、自然光照條件、拍攝時(shí)攝像機(jī)與牌照的矩離和角度以及車輛行駛速度等因素的影響,牌照圖象可能出現(xiàn)

10、模糊、歪斜和缺損等嚴(yán)重缺陷,因此需要對原始圖象進(jìn)行識別前的預(yù)處理。</p><p>  牌照的定位和分割是牌照識別系統(tǒng)的關(guān)鍵技術(shù)之一,其主要目的是在經(jīng)圖象預(yù)處理后的原始灰度圖象中確定牌照的具體位置,并將包含牌照字符的一塊子圖象從整個(gè)圖象中分割出來,供字符識別子系統(tǒng)識別之用,分割的準(zhǔn)確與否直接關(guān)系到整個(gè)牌照字符識別系統(tǒng)的識別率。</p><p>  由于拍攝時(shí)的光照條件、牌照的整潔程度的影響

11、,和攝像機(jī)的焦距調(diào)整、鏡頭的光學(xué)畸變所產(chǎn)生的噪聲都會不同程度地造成牌照字符的邊界模糊、細(xì)節(jié)不清、筆劃斷開或粗細(xì)不均,加上牌照上的污斑等缺陷,致使字符提取困難,進(jìn)而影響字符識別的準(zhǔn)確性。因此,需要對字符在識別之前再進(jìn)行一次針對性的處理。</p><p>  車牌識別的最終目的就是對車牌上的文字進(jìn)行識別。識別方法目前主要有基于模板匹配算法和基于人工神經(jīng)網(wǎng)絡(luò)算法。</p><p><b&g

12、t;  2.圖像預(yù)處理: </b></p><p>  1)RGB轉(zhuǎn)為灰度圖像</p><p>  輸入的彩色圖像包含大量顏色信息,會占用較多的存儲空間,且處理時(shí)也會降低系統(tǒng)的執(zhí)行速度,因此對圖像進(jìn)行識別等處理時(shí).常將彩色圖像轉(zhuǎn)換為灰度圖像,以加快處理速度??蓪D像進(jìn)行灰度化處理、提取背景圖像、增強(qiáng)處理、圖像二值化,邊緣檢測、濾波等處理。然后采用robert算子進(jìn)行邊緣檢測,再

13、用imopen和imclose對所得二值圖像作開、閉操作進(jìn)行濾波。</p><p>  彩色圖像分為R、G、B三個(gè)分量,分別顯示出紅、綠、藍(lán)等各種顏色,灰度化就是使彩色的R、G、B 分量相等的過程?;叶戎荡蟮南袼攸c(diǎn)比較亮(像素值最大為255,為白色) ,反之比較暗(像素值最小為 0,是黑色) 。 </p><p>  圖像灰度化的算法在matlab調(diào)用的格式為:I=rgb2gray(I0)

14、;</p><p>  2) RGB轉(zhuǎn)換到HSV空間</p><p>  表達(dá)顏色的彩色空間有許多種, 最常見的是 RGB 彩色空間, 但是在 RGB彩色模型中各像素值是由 R、 G、 B三種分量的亮度值疊加而成, 這三種亮度值隨光照強(qiáng)度的不同而改變, 而一般汽車圖像的光照強(qiáng)度是不定的, 所以用 RGB顏色模型進(jìn)行車牌識別是很困難的。HSV顏色模型對應(yīng)于畫家的配色模型, 它由色度 H、 飽

15、和度 S、 亮度 V三個(gè)分量組成。由于這種模型具有線性伸縮性, 可感知的色差與顏色分量的相應(yīng)樣值上的歐幾里德距離成比例, 因此 HSV顏色模型比 RGB顏色模型更直觀、 更容易接受。圖像RGB轉(zhuǎn)換到HSV 空間的算法在matlab調(diào)用的格式為:I=rgb2hsv(I0);但我們?nèi)∷牡诙ǖ繧=(:,:2)時(shí)可以去掉許多不必要的信息,非常有利于后續(xù)處理工作。</p><p><b>  3.車牌定位&

16、lt;/b></p><p>  在車牌定位中首先用顏色定位法,因?yàn)樵诓噬珗D像中,它分別由R,G,B三個(gè)分量合成的,在這種情況下,每個(gè)‘像素’由三個(gè)值來表征,并且可以表示為一個(gè)三維向量z=(z1,z2,z3)T,其分量是一個(gè)點(diǎn)的RGB彩色。當(dāng)我們想要從一副彩色圖像中提取具有指定顏色的所有區(qū)域,比如說,藍(lán)色。令a表示我們感興趣的平均藍(lán)色。基于這一參數(shù)來分割彩色圖像的一種方法是計(jì)算任意彩色點(diǎn)的z值和平均彩色a間

17、的距離測度D(z,a)。然后,我們按如下方式分割圖像:</p><p>  1,D(z,a)《T</p><p><b>  g=</b></p><p><b>  0, 其它</b></p><p><b>  這里T為一個(gè)閾值。</b></p><

18、p>  用這樣的一種方法可以較好的,查找出車牌的大概區(qū)域,然后我們再用形態(tài)學(xué)操作進(jìn)行處理切割出車牌的水平區(qū)域,之后我們可以再用水平區(qū)域的圖像來確定車牌的垂直區(qū)域圖像,到此可以得到車牌的區(qū)域。但是可能這樣一個(gè)區(qū)域不太精細(xì),可以在后續(xù)工作中把它更精細(xì)的定位到字符區(qū)域。</p><p><b>  4.字符分割</b></p><p>  完成牌照區(qū)域的定位后,再將牌

19、照區(qū)域分割為單個(gè)字符,可采用垂直投影法。在此設(shè)計(jì)中,對車牌字符的所有噪聲都能很好的去除,字符與字符之間的間隙沒有雜點(diǎn)和粘連,因此垂直投影時(shí),七個(gè)峰值不會相連,所以查找切割字符時(shí)的步驟主要為如下: </p><p>  從第一列開始查找,當(dāng)?shù)谝粋€(gè)投影值不為0時(shí),記錄下第幾列,然后繼續(xù)查找投影值為0的點(diǎn),記錄下第幾列,之后就可以切割出第一個(gè)字符來。其余字符的切割也一樣。</p><p><

20、;b>  5.字符識別</b></p><p>  在這個(gè)設(shè)計(jì)中,運(yùn)用神經(jīng)網(wǎng)絡(luò)的方法進(jìn)行識別,準(zhǔn)確度較高。在神經(jīng)網(wǎng)絡(luò)的訓(xùn)練中,需要足量的模板,建立好輸入,輸出量,其中輸入量就是每一字符樣本,輸出量就是一個(gè)樣本或一類樣本所要對應(yīng)的數(shù)據(jù)輸出。然后,建立訓(xùn)練網(wǎng)絡(luò),設(shè)置好相應(yīng)的一些參數(shù)等,當(dāng)精確度到達(dá)一定程度時(shí),就可以停止訓(xùn)練,至此網(wǎng)絡(luò)訓(xùn)練成功。當(dāng)進(jìn)行字符識別時(shí),就可以調(diào)用已經(jīng)訓(xùn)練好的網(wǎng)絡(luò),把每一個(gè)輸入

21、字符,與網(wǎng)絡(luò)中的函數(shù)進(jìn)行匹配,找到最匹配的進(jìn)行相對應(yīng)的數(shù)據(jù)輸出,就可以判斷究竟為那個(gè)字符。</p><p>  神經(jīng)網(wǎng)絡(luò)的matlab代碼:</p><p>  建立網(wǎng)絡(luò):net=newff(pr,[850 1],{'logsig' 'purelin'},'traingdx','learngdm'); </p>

22、<p>  訓(xùn)練網(wǎng)絡(luò):net=train(net,p,t);P為輸入量,t輸出量</p><p>  3)調(diào)用網(wǎng)絡(luò):t=sim(net,p)</p><p>  三.課程設(shè)計(jì)的步驟和結(jié)果</p><p>  設(shè)計(jì)中主要分為三大塊:車牌定位,字符分割,字符識別,因此就以上三塊分別一一做一個(gè)方法講解。</p><p>  此處以車牌1作

23、為示例圖像</p><p><b>  1.車牌定位</b></p><p>  主要分為:藍(lán)色區(qū)域查找,形態(tài)學(xué)操作,水平區(qū)域定位,垂直區(qū)域定位等部分。</p><p><b>  1.1藍(lán)色區(qū)域查找</b></p><p>  Y=imread(’1.jpg’)</p><p&

24、gt;  R=Y(:,:,1);</p><p>  G=Y(:,:,2);</p><p>  B=Y(:,:,3);</p><p>  [m,n]=size(R);</p><p><b>  for i=1:m</b></p><p><b>  for j=1:n</b&

25、gt;</p><p>  if (R(i,j)>20&&R(i,j)<82)&&(G(i,j)>10&&G(i,j)<255)&&(B(i,j)>108&&B(i,j)<255)</p><p>  A8(i,j)=1;</p><p><b&

26、gt;  else</b></p><p>  A8(i,j)=0;</p><p><b>  end</b></p><p><b>  end</b></p><p><b>  end</b></p><p>  figure,ims

27、how(A8)</p><p>  從上圖可以看出進(jìn)過這樣的一種顏色查找法,可以很好的找出車牌區(qū)域。在這個(gè)算法中,最難的一點(diǎn),就是如何確定R,G,B的范圍參數(shù),說實(shí)在話,我的這個(gè)參數(shù)是進(jìn)過不斷嘗試才得到的,在網(wǎng)上和相關(guān)書籍中,都沒有人提出過一致的看法,參數(shù)各有不同,可見對于不同的圖片,參數(shù)范圍是不同的,并沒有一致的參數(shù)。</p><p><b>  1.2形態(tài)學(xué)操作</b&

28、gt;</p><p>  從以上的圖中,我們很明顯的知道,車牌區(qū)域以凸顯出來了,之后的操作一定就要想辦法如何去除雜點(diǎn)和‘豐富‘車牌區(qū)域了。</p><p>  se=strel('disk',8,8); </p><p>  bg1=imdilate(A8,se);figure ,imshow(bg1);</p><p> 

29、 I2 = imfill(bg1,'holes');figure,imshow(I2); </p><p>  bw1=bwareaopen(I2,29000); figure,imshow(bw1) ; %去除面積小于29000的區(qū)域bw2=imclearborder(bw1);figure,imshow(bw2) ; %去除與邊界相連的區(qū)域</p><p>  1.3

30、水平車牌區(qū)域切割</p><p>  雖然我們看到上圖中,所有雜點(diǎn)都去除了,但是這只是一個(gè)特例,在其它大多數(shù)圖像中,到了以上那不,其實(shí)還有一些大于29000塊的區(qū)域還在的,但他們都有一個(gè)共同的特點(diǎn),就是都在車牌的上方并且不與車牌相連,在車牌下方的區(qū)域,則是相當(dāng)‘干凈‘的。因此,我的想法是先從水平放向切割出車牌的水平區(qū)域,在進(jìn)行下一步打算。</p><p><b>  for x=

31、1:m</b></p><p>  X(x)=sum(bw2(x,:));</p><p><b>  end</b></p><p>  x=1:m;figure,plot(x,X(x));</p><p>  for i=m:-1:1</p><p>  if X(i)~=0<

32、;/p><p><b>  PX2=i;</b></p><p><b>  break;</b></p><p><b>  end</b></p><p><b>  end</b></p><p>  for j=PX2-1:-1

33、:1</p><p>  if X(j)~=0</p><p><b>  continue;</b></p><p>  else PX1=j;</p><p><b>  break;</b></p><p><b>  end</b></p&

34、gt;<p><b>  end</b></p><p>  DW1=Y(PX1:PX2,:,:);</p><p>  figure,imshow(DW1)</p><p>  1.4垂直車牌區(qū)域切割</p><p>  這段代碼的原理與以上1.1到1.3步的原理一樣,代碼類似。</p>&

35、lt;p>  R1=DW1(:,:,1);</p><p>  G1=DW1(:,:,2);</p><p>  B1=DW1(:,:,3);</p><p>  [a,b]=size(R1);</p><p><b>  for i=1:a</b></p><p><b>  f

36、or j=1:b</b></p><p>  if (R1(i,j)>20&&R1(i,j)<82)&&(G1(i,j)>10&&G1(i,j)<255)&&(B1(i,j)>108&&B1(i,j)<255)</p><p>  A9(i,j)=1;</p

37、><p><b>  else</b></p><p>  A9(i,j)=0;</p><p><b>  end</b></p><p><b>  end</b></p><p><b>  end</b></p>

38、<p>  figure,imshow(A9);</p><p>  se=strel('disk',8,8); </p><p>  bg2=imdilate(A9,se);figure ,imshow(bg2)</p><p>  I3 = imfill(bg2,'holes');figure,imshow(I3)<

39、;/p><p>  bw3=bwareaopen(I3,29000) ; </p><p>  figure,imshow(bw3)</p><p><b>  for y=1:b</b></p><p>  Y(y)=sum(bw3(1:a,y));</p><p><b>  end&

40、lt;/b></p><p>  y=1:b;figure,plot(y,Y(y));title('´¹Ö±Í¶Ó°');</p><p><b>  for y=1:b</b></p><p>  if Y(y)~=0</p>

41、<p><b>  PY1=y;</b></p><p><b>  break;</b></p><p><b>  end</b></p><p><b>  end</b></p><p>  for y=b:-1:1</p>

42、<p>  if Y(y)~=0</p><p><b>  PY2=y;</b></p><p><b>  break;</b></p><p><b>  end</b></p><p><b>  end</b></p>

43、<p>  DW2=DW1(:,PY1:PY2,:);</p><p>  figure,imshow(DW2);</p><p><b>  1.5傾斜校正</b></p><p>  使用雷登變換radon來進(jìn)行校正,主要步驟為:對圖像進(jìn)行1到180度的雷登變換,然后查找圖上每條直線的最大的角度進(jìn)行旋轉(zhuǎn)就是。具體代碼在文章尾給出的

44、全部代碼中可以找到。</p><p><b>  2.字符分割</b></p><p>  字符分割的設(shè)計(jì)主要有三大塊:去除鉚釘?shù)恼尺B和不必要的雜點(diǎn),車牌的再次精細(xì)定位,字符分割。因此分別對以上的算法做一一的介紹。</p><p>  2.1去除鉚釘?shù)恼尺B和不必要的雜點(diǎn)</p><p>  此步的意義在于,使得我們的車牌

45、字符切割時(shí)變得較為‘干凈‘,并且運(yùn)用垂直投影法切割時(shí)可以,很好的判斷切割出來。</p><p>  I1=rgb2gray(I);</p><p>  J=rgb2hsv(I);J=J(:,:,2);figure,imshow(J); I20=im2bw(J,graythresh(J));figure ,imshow(I20); bg10=bwareaopen(I20,2000);figu

46、re,imshow(bg10);</p><p>  [m,n]=find(bg10==1); </p><p>  rowmin=min(m);</p><p>  rowmax=max(m); </p><p>  colummin=min(n);</p><p>  colummax

47、=max(n);</p><p>  bg20=I1(rowmin:rowmax,colummin:colummax);figure,imshow(bg20);</p><p>  se=strel('disk',20);</p><p>  bg0=imopen(bg20,se);</p><p>  bg1=imsubtr

48、act(bg20,bg0);figure,imshow(bg1); bg1=imadjust(bg1);figure ,imshow(bg1);</p><p>  I2=im2bw(bg1,0.7);figure ,imshow(I2);</p><p>  II2=im2bw(bg1,graythresh(bg1));figure,imshow(II2); I2=imresize(I2

49、,[120,420]); II2=imresize(II2,[120,420]); </p><p>  se=[1,1,1];bg00=imerode(I2,se); bw3=imclearborder(bg00); bg2=bwareaopen(bw3,200); se2=strel('disk',1);</p><p>  II=im

50、dilate(bg2,se2);</p><p>  [m,n]=find(II==1); </p><p>  rowmin=min(m);</p><p>  rowmax=max(m);</p><p>  colummin=min(n); </p><p>  colummax=max(n);<

51、/p><p>  bg200=II(rowmin:rowmax,colummin:colummax);figure,imshow(bg200); </p><p>  從以上可以看出,進(jìn)過這樣的處理后,右邊的車牌字符的鉚釘和雜點(diǎn)都去除的十分干凈,雖然有些字符斷裂了或丟失一部分,但切割字符時(shí)是以右邊的進(jìn)行垂直投影,而對左邊的車牌進(jìn)行切割的,所以不會使得字符丟失應(yīng)有的信息。</p>

52、<p>  2.2車牌的再次精細(xì)定位和垂直投影</p><p>  這步的操作主要在于把車牌高度的大小定位為與字符高度一樣,切割出的字符就可以大小相同</p><p>  bg2000=II2(rowmin:rowmax,colummin:colummax);figure,imshow(bg2000);</p><p>  [a,b]=size(bg200

53、);</p><p><b>  for y=1:b</b></p><p>  Y(y)=sum(bg200(1:a,y));</p><p><b>  end</b></p><p>  y=1:b;figure,plot(y,Y(y)); </p><p>  這樣可

54、以從投影圖看出,到達(dá)此步時(shí)可以很容易的分割出每個(gè)字符了。</p><p><b>  2.3字符分割</b></p><p>  把分割出來的字符寫入當(dāng)前的目錄下,有利于下一步字符識別的調(diào)用。</p><p><b>  k=1;</b></p><p><b>  figure;<

55、/b></p><p><b>  for i=1:7</b></p><p><b>  for y=k:b</b></p><p>  if Y(y)~=0;</p><p><b>  PY1=y;</b></p><p><b>

56、  break;</b></p><p><b>  end</b></p><p><b>  end</b></p><p>  for x=PY1:b</p><p>  if Y(x)==0;</p><p><b>  PY2=x;</b

57、></p><p><b>  break;</b></p><p><b>  end</b></p><p>  end </p><p><b>  if i==7</b></p><p>  bg4=bg2

58、000(:,PY1:b,:);</p><p>  imwrite(bg4,strcat(num2str(7),'.jpg')) bg5=imresize(bg4,[90,40]); subplot(1,7,7),imshow(bg4);</p><p><b>  break;</b></p><p><

59、b>  end</b></p><p>  bg4=bg2000(:,PY1:PY2,:); imwrite(bg4,strcat(num2str(i),'.jpg'));</p><p>  bg5=imresize(bg4,[90,40]);</p><p>  subplot(1,7,i),imshow(bg5);</p

60、><p><b>  k=PY2+1;</b></p><p><b>  end</b></p><p><b>  3.字符識別</b></p><p>  此部分采用的是BP神經(jīng)網(wǎng)絡(luò),主要有以下幾步:建立字符訓(xùn)練樣本,建立BP網(wǎng)絡(luò)訓(xùn)練,字符檢測。</p><

61、;p>  3.1建立字符訓(xùn)練樣本</p><p>  字符庫在num文件夾內(nèi),把字符讀入,進(jìn)行相關(guān)處理后,存在p矩陣中,然后對應(yīng)的輸出為t字符。在這里共有334個(gè)字符,包括漢字,字母和數(shù)字。</p><p><b>  clear all</b></p><p><b>  clc</b></p>&l

62、t;p>  for kk= 0:333</p><p>  p1=ones(10,10);</p><p>  m=strcat('num\',int2str(kk),'.jpg');</p><p>  x=imread(m);</p><p>  rate=10/max(size(x)); </

63、p><p>  I3=imresize(x,rate); </p><p>  [i,j]=size(I3);</p><p>  i1=round((10-i)/2);</p><p>  j1=round((10-j)/2);</p><p>  p1(i1+1:i1+i,j1+1:j1+j)=I3;</p&g

64、t;<p>  for hh=1:10</p><p>  p((hh-1)*10+1:(hh-1)*10+10,kk+1)=p1(hh,1:10);</p><p><b>  end</b></p><p>  switch kk</p><p>  case {0,1,2,3,4,5,6,7,8,9

65、,10,11,12,13,14,15}</p><p>  t(kk+1)=1;</p><p>  case{16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34}</p><p>  t(kk+1)=2;</p><p>  case{35,36,37,38,39,40,41,4

66、2,43,44,45,46,47,48,49,50}</p><p>  t(kk+1)=3;</p><p>  case{51,52,53,54,55,56,57,58,59,60,61,62,63,64,65}</p><p>  t(kk+1)=4;</p><p>  case{66,67,68,69}</p><

67、;p>  t(kk+1)=5;</p><p>  case{70,71,72,73,74,75,76,77,78,79,80,81,82}</p><p>  t(kk+1)=6;</p><p>  case{83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104}<

68、;/p><p>  t(kk+1)=7;</p><p>  case{105,106,107,108,109,110,111,112,113,114,115,116,117,118,119}</p><p>  t(kk+1)=8;</p><p>  case{120,121,122,123,124,125,126,127,128,129,1

69、30,131,132,133}</p><p>  t(kk+1)=9;</p><p>  case{134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152}</p><p>  t(kk+1)=10;</p><p>  case{153,15

70、4,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187}</p><p>  t(kk+1)=11;</p><p>  case{188,189,190,191,192,193,

71、194}</p><p>  t(kk+1)=12;</p><p>  case{195,196,197,198,199,200,201}</p><p>  t(kk+1)=13;</p><p>  case{202,203,204,205,206}</p><p>  t(kk+1)=14;</p>

72、<p>  case{207,208,209,210}</p><p>  t(kk+1)=15;</p><p>  case{211,212,213,214,215,216,217}</p><p>  t(kk+1)=16;</p><p>  case{218,219,220,221,222,223,224,225,22

73、6,227}</p><p>  t(kk+1)=17;</p><p>  case{228,229,230,231,232,233,234}</p><p>  t(kk+1)=18;</p><p>  case{235,236}</p><p>  t(kk+1)=20;</p><p>

74、;  case{237,238,239,240}</p><p>  t(kk+1)=21;</p><p>  case{241,242,243,244,245}</p><p>  t(kk+1)=22;</p><p>  case{246,247,248}</p><p>  t(kk+1)=23;</p

75、><p>  case{249,250,251}</p><p>  t(kk+1)=24;</p><p>  case{252,253,254}</p><p>  t(kk+1)=26;</p><p>  case{255,256,257,258,259}</p><p>  t(kk+1)

76、=27;</p><p>  case{260,261}</p><p>  t(kk+1)=28;</p><p>  case{262,263,264,265,266}</p><p>  t(kk+1)=29;</p><p>  case{267,268,269,270,271,272}</p>

77、<p>  t(kk+1)=30;</p><p>  case{273,274}</p><p>  t(kk+1)=31;</p><p>  case{275,276,277}</p><p>  t(kk+1)=32;</p><p>  case{278,279,280,281,282}</p

78、><p>  t(kk+1)=33;</p><p>  case{283,284}</p><p>  t(kk+1)=34;</p><p>  case{285,286,287,288}</p><p>  t(kk+1)=35;</p><p>  case{289,290,291,292,

79、293,294}</p><p>  t(kk+1)=36;</p><p>  case{295,296,297,298,299,300,301,302}</p><p>  t(kk+1)=37;</p><p><b>  case{303}</b></p><p>  t(kk+1)=42

80、;</p><p>  case{304,305}</p><p>  t(kk+1)=39;</p><p><b>  case{306}</b></p><p>  t(kk+1)=41;</p><p><b>  case{307}</b></p>&

81、lt;p>  t(kk+1)=43;</p><p><b>  case{308}</b></p><p>  t(kk+1)=40;</p><p>  case{309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,33

82、0,331,332,333}</p><p>  t(kk+1)=38;</p><p><b>  end</b></p><p><b>  end</b></p><p>  save 51ET p t;</p><p>  3.2建立BP網(wǎng)絡(luò)訓(xùn)練</p>

83、<p>  在這里我們新建了一個(gè)BP神經(jīng)網(wǎng)絡(luò),訓(xùn)練步數(shù)為10000,目標(biāo)精確度為0.001,學(xué)習(xí)率為0.00001等,然后train(net,p,t)進(jìn)行訓(xùn)練。當(dāng)達(dá)到目標(biāo)后自會停止。在當(dāng)前路徑下會出現(xiàn)的文件,表示訓(xùn)練成功。</p><p>  load 51ET p t; </p><p>  pr(1:100,1)=0;</p><p&

84、gt;  pr(1:100,2)=1;</p><p>  net=newff(pr,[850 1],{'logsig' 'purelin'},'traingdx','learngdm'); net.trainParam.epochs=10000; </p><p>  net.trainParam.goal=0.001

85、; </p><p>  net.trainParam.show=10; </p><p>  net.trainParam.lr=0.00001 </p><p>  net=train(net,p,t); </p><p>  save ET51net net;</p><p

86、><b>  3.3字符檢測</b></p><p>  輸入字符,然后調(diào)用ET51net就可以進(jìn)行測試。測試的結(jié)果是否正確,要看你3.1步,每一個(gè)輸入的p是否對應(yīng)了t。比如;輸入為12,查到3.1中12這個(gè)數(shù)對應(yīng)輸出t應(yīng)該為1,所以輸出正確應(yīng)該為1才對。不然的話,要從新訓(xùn)練網(wǎng)絡(luò),更改相關(guān)的參數(shù),進(jìn)行訓(xùn)練,以達(dá)到最佳的效果。</p><p>  liccode=

87、char(['0':'9' 'A':'Z' '桂粵冀瓊京吉津晉警蘭遼領(lǐng)魯蒙閩寧青黑陜使蘇皖湘新學(xué)渝豫云浙']); </p><p>  load ET51net net; </p><p>  for l=1:7 </p><p>  I=imread(strcat(num2str

88、(l),'.jpg'));</p><p>  p=zeros(100,1);</p><p>  p1=ones(10,10); </p><p>  rate=10/max(size(I)); </p><p>  I3=imresize(I,rate); </p><p>  [i,j]=s

89、ize(I3);</p><p>  i1=round((10-i)/2);</p><p>  j1=round((10-j)/2);</p><p>  p1(i1+1:i1+i,j1+1:j1+j)=I3;</p><p>  for hh=1:10</p><p>  p((hh-1)*10+1:(hh-1)*

90、10+10,1)=p1(hh,1:10);</p><p><b>  end </b></p><p>  k=sim(net,p); y=round(k); </p><p>  res=liccode(y);</p><p>  shibiejieguo(1,l)=res;</p><

91、p><b>  l=l+1;</b></p><p><b>  end</b></p><p>  msgbox(shibiejieguo,'識別結(jié)果 ');</p><p><b>  四.設(shè)計(jì)GUI界面</b></p><p>  五.課程設(shè)計(jì)總結(jié)和

92、體會</p><p>  本次設(shè)計(jì)最得意的地方在車牌顏色定位方面,找到那些參數(shù)很容易把車牌初步找出來,并且開始這一步把許多不需要的信息都去除掉了,很利于后面的操作。但是此種方法也有缺點(diǎn),對于藍(lán)色的車輛是找不到的。在整個(gè)算法中投影法分割思想都占據(jù)的極大的比重。對于識別的階段,一開始我使用的是,字符模板相減法,但是效果很不好,最終用了不太熟悉的神經(jīng)網(wǎng)絡(luò)法,對于神經(jīng)網(wǎng)絡(luò)還是許多不懂的,但是看了相當(dāng)?shù)某绦蚶雍妥约郝龑?shí)

93、踐摸索,雖然還是朦朦濃濃,但還是嘗試的做了出來,并且效果不錯(cuò),真可謂功夫不負(fù)有心人!因?yàn)闀r(shí)間倉促,這個(gè)設(shè)計(jì)的代碼沒有進(jìn)行仔細(xì)的優(yōu)化,運(yùn)算起來相當(dāng)緩慢。</p><p>  總之,理論只有應(yīng)用到實(shí)際中才能學(xué)著更有意義。學(xué)習(xí)是一個(gè)長期積累的過程,在后的工作、生活中都應(yīng)該不斷的學(xué)習(xí),努力提高自己知識和綜合素質(zhì)。此次設(shè)計(jì)也大大提高了我的動(dòng)手能力,使我充分體會到了在創(chuàng)造過程中探索的艱難和成功時(shí)的喜悅。雖然這個(gè)設(shè)計(jì)目前實(shí)現(xiàn)了

94、少數(shù)的車輛牌照識別,但是在設(shè)計(jì)過程中所學(xué)到的學(xué)習(xí)方法是我最大收獲和財(cái)富,相信定會使我受益終身。</p><p><b>  六.參考文獻(xiàn)</b></p><p>  1.岡薩雷斯.?dāng)?shù)字圖像處理(第三版).電子工業(yè)出版社</p><p>  2.matlab神經(jīng)網(wǎng)絡(luò)編程  張德豐</p><p>  3. ma

95、tlab數(shù)字圖像處理 張德豐</p><p>  4. 周科偉. Matlab環(huán)境下基于神經(jīng)網(wǎng)絡(luò)的車牌識別 西安電子科技大學(xué)碩士學(xué)位論文</p><p><b>  七.設(shè)計(jì)總代碼</b></p><p>  1.chepai_main.m</p><p>  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%

96、%%%%%%%</p><p>  clear all;</p><p><b>  clc;</b></p><p>  % ==============測定算法執(zhí)行的時(shí)間,開始計(jì)時(shí)=================</p><p><b>  tic</b></p><p&g

97、t;  %=====================讀入圖片================================</p><p>  [fn,pn,fi]=uigetfile('*.jpg','選擇圖片');</p><p>  Y=imread([pn fn]);figure,imshow(Y);title('原始圖像');%顯

98、示原始圖像</p><p>  A=chepaidingwei(Y);</p><p>  B=rando_bianhuan(A);</p><p>  fenge(B);%字符分割</p><p><b>  %然后每個(gè)字符識別</b></p><p>  shibiejieguo=zifush

99、ibie2( );</p><p>  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%</p><p>  2.chepaidingwei.m</p><p>  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%</p><p

100、>  unction A=chepaidingwei(I)</p><p><b>  Y=I;</b></p><p>  R=Y(:,:,1);</p><p>  G=Y(:,:,2);</p><p>  B=Y(:,:,3);</p><p>  [m,n]=size(R);<

101、;/p><p><b>  for i=1:m</b></p><p><b>  for j=1:n</b></p><p>  if (R(i,j)>20&&R(i,j)<82)&&(G(i,j)>10&&G(i,j)<255)&&(B

102、(i,j)>108&&B(i,j)<255)</p><p>  A8(i,j)=1;</p><p><b>  else</b></p><p>  A8(i,j)=0;</p><p><b>  end</b></p><p><b&

103、gt;  end</b></p><p><b>  end</b></p><p>  %figure,imshow(A8)</p><p>  se=strel('disk',8,8); </p><p>  bg1=imdilate(A8,se);%figure ,imshow(bg1)

104、;title('膨脹');</p><p>  I2 = imfill(bg1,'holes');%figure,imshow(I2);title('孔洞填充');%空洞填充</p><p>  bw1=bwareaopen(I2,29000); %小于29000的面積去掉</p><p>  %figure,im

105、show(bw1);title('小于29000的面積去掉');</p><p>  bw2=imclearborder(bw1);%figure,imshow(bw2) ;title('去除邊界相通的區(qū)域'); %去除邊界相通的區(qū)域</p><p><b>  for x=1:m</b></p><p>  

106、X(x)=sum(bw2(x,:));</p><p><b>  end</b></p><p>  x=1:m;%figure,plot(x,X(x));title('水平投影');</p><p>  for i=m:-1:1</p><p>  if X(i)~=0</p><

107、p><b>  PX2=i;</b></p><p><b>  break;</b></p><p><b>  end</b></p><p><b>  end</b></p><p>  for j=PX2-1:-1:1</p>

108、<p>  if X(j)~=0</p><p><b>  continue;</b></p><p>  else PX1=j;</p><p><b>  break;</b></p><p>  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%&l

109、t;/p><p><b>  3.fenge.m</b></p><p>  ########################################################3</p><p>  function []= fenge(I)</p><p>  %此分割主要在于不斷的進(jìn)行形態(tài)學(xué)變換,把所有與

110、子符無關(guān)的區(qū)域去除</p><p>  I1=rgb2gray(I);%figure,imshow(I1)</p><p>  J=rgb2hsv(I);J=J(:,:,2);figure,imshow(J);title('HSV空間');%%%rgb轉(zhuǎn)換到HSV空間來進(jìn)行處理</p><p>  I20=im2bw(J,graythresh(J))

111、;figure ,imshow(I20);title('二值化');</p><p>  bg10=bwareaopen(I20,2000);figure,imshow(bg10);title('去除面積20000的區(qū)域');%%%%%去除面積為2000的區(qū)域</p><p>  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%<

112、/p><p>  [m,n]=find(bg10==1); </p><p>  rowmin=min(m);</p><p>  rowmax=max(m); %%%這段代碼相當(dāng)于切割圖像,把原先粗定位好的車牌,再進(jìn)行精細(xì)定位</p><p>  colummin=min(n);</p><p&

113、gt;  colummax=max(n);</p><p>  bg20=I1(rowmin:rowmax,colummin:colummax);figure,imshow(bg20);title('再次確定車牌區(qū)域');</p><p>  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%</p><p>  se=

114、strel('disk',20);</p><p>  bg0=imopen(bg20,se);%figure,imshow(bg0)</p><p>  bg1=imsubtract(bg20,bg0);figure,imshow(bg1);title('頂帽變換后的圖');%%%%這三步主要在于把車牌進(jìn)行頂帽變換,以突出字符區(qū)(在書上433頁有原理)&l

115、t;/p><p>  bg1=imadjust(bg1);figure ,imshow(bg1);title('字符區(qū)更加突出');</p><p>  I2=im2bw(bg1,0.7);figure ,imshow(I2);title('閾值為0.7時(shí)的二值圖');</p><p>  II2=im2bw(bg1,graythresh

116、(bg1));figure,imshow(II2);title('自動(dòng)閾值的圖,保留更多的信息');</p><p>  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%</p><p>  I2=imresize(I2,[120,420]);%figure,imshow(I2) %%%對大小不一的車牌進(jìn)行歸一化,以便于在后續(xù)的形態(tài)學(xué)操作中&

117、lt;/p><p>  II2=imresize(II2,[120,420]); %%%%較好的處理</p><p>  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%</p><p>  se=[1,1,1];bg00=imerode(I2,se);%figure,imshow(bg00);title('腐

118、蝕后的圖');%%%%選擇se=[1,1,1]的結(jié)構(gòu)元主要是為了把與鉚釘相連的字符腐蝕開來,以利于垂直投影分割</p><p>  bw3=imclearborder(bg00);%figure,imshow(bw3);</p><p>  bg2=bwareaopen(bw3,200);%figure,imshow(bg2);</p><p>  se2=

119、strel('disk',1);</p><p>  II=imdilate(bg2,se2);%figure,imshow(II)%%%%%因?yàn)橐陨系母g操作后,造成車牌字符斷離,所以用膨脹操作以進(jìn)行恢復(fù)</p><p>  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%</p><p> 

120、 [m,n]=find(II==1); </p><p>  rowmin=min(m);</p><p>  rowmax=max(m);</p><p>  colummin=min(n);%%%%%%%%%%%%%%%%%%%%%%%這段代碼主要是對車牌再次進(jìn)行精細(xì)分割,因?yàn)槲覀円呀?jīng)對鉚釘?shù)纫恍╇s點(diǎn)處理掉了</p><p> 

121、 colummax=max(n);%%%%%%%%%%%%%%%%%%%%%%%就可以把車牌完全定位在字符大小的區(qū)域,而沒有其余噪聲了</p><p>  bg200=II(rowmin:rowmax,colummin:colummax);figure,imshow(bg200);title('沒有噪聲點(diǎn)的車牌區(qū)域');</p><p>  bg2000=II2(rowmi

122、n:rowmax,colummin:colummax);figure,imshow(bg2000);title('有噪聲點(diǎn)的車牌區(qū)域');</p><p>  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%</p><p>  %%%%%%%%%%%%%%%%%下面的代碼就是對字符進(jìn)行垂直投影分割,然后把每個(gè)

123、分割出來的字符,存放在當(dāng)前目錄下</p><p>  %%%%%%%%%%%5%%%%%以利于下一步,字符的識別處理</p><p>  [a,b]=size(bg200);</p><p><b>  for y=1:b</b></p><p>  Y(y)=sum(bg200(1:a,y));</p>

124、<p><b>  end</b></p><p>  y=1:b;figure,plot(y,Y(y));title('垂直投影');</p><p><b>  k=1;</b></p><p><b>  figure;</b></p><p>

125、<b>  for i=1:7</b></p><p><b>  for y=k:b</b></p><p>  if Y(y)~=0;</p><p><b>  PY1=y;</b></p><p><b>  break;</b></p>

126、;<p><b>  end</b></p><p><b>  end</b></p><p>  for x=PY1:b</p><p>  if Y(x)==0;</p><p><b>  PY2=x;</b></p><p>&l

127、t;b>  break;</b></p><p><b>  end</b></p><p>  end </p><p><b>  if i==7</b></p><p>  bg4=bg2000(:,PY1:b,:);%figure,imsh

128、ow(bg4)</p><p>  imwrite(bg4,strcat(num2str(7),'.jpg'));%在當(dāng)下文件夾存儲字符 </p><p>  bg5=imresize(bg4,[90,40]);%字符大小規(guī)定化,以利于全部顯示時(shí)大小一致</p><p>  subplot(1,7,7),imshow(bg4);</p>

129、<p><b>  break;</b></p><p><b>  end</b></p><p>  bg4=bg2000(:,PY1:PY2,:);%figure,imshow(bg4)</p><p>  imwrite(bg4,strcat(num2str(i),'.jpg'));&l

130、t;/p><p>  bg5=imresize(bg4,[90,40]);</p><p>  subplot(1,7,i),imshow(bg5);</p><p><b>  k=PY2+1;</b></p><p><b>  end</b></p><p>  %%%%%

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論