廖作斌
(泉州師范學(xué)院)
作為圖像模式識別的一個典型案例,車牌識別算法和相對應(yīng)的系統(tǒng)雖然發(fā)展有一定時間了,國外會比國內(nèi)早些,但是截止目前為止,真正達(dá)到適用程度的系統(tǒng)仍很少,識別率和識別速度都有待進(jìn)一步提高,而且最為關(guān)鍵的是,業(yè)內(nèi)好的車牌識別算法往往都包含著利益關(guān)系,雖然在這一方面,優(yōu)秀的車牌識別算法比比皆是,但是基于這些算法實現(xiàn)車牌識別的卻少之又少,換句話說,就是理論上可以實現(xiàn),但是實際開發(fā)又需另外考慮.目前,車牌識別已經(jīng)有了一些自動化系統(tǒng).但是,這并不能完美解決國內(nèi)的車牌識別,主要由于我國標(biāo)準(zhǔn)車牌是由漢字、英文字母和數(shù)字組成,漢字的識別與字母和數(shù)字的識別有很大的不同,在漢字的識別上要別字符復(fù)雜得多.而且在算法上各家公司都有自己獨自的算法,從側(cè)面可以看出在這一方面相當(dāng)?shù)牟唤y(tǒng)一,所以研究這一方面的算法對于實現(xiàn)各類智能化系統(tǒng)是相當(dāng)必要的.
選擇好的開發(fā)工具或技術(shù)對于開發(fā)一個實用的系統(tǒng)至關(guān)重要.一旦運用一些關(guān)鍵性技術(shù),可以使系統(tǒng)開發(fā)者更有余力去關(guān)注算法本身,而不必過多關(guān)心如何去具體實現(xiàn),而且可以使設(shè)計出的算法更加方便以及實用.
下面給出了車牌識別系統(tǒng)的關(guān)鍵技術(shù)組成,如圖1所示.
圖1 車牌識別系統(tǒng)關(guān)鍵技術(shù)組成
實現(xiàn)數(shù)字圖像處理系統(tǒng),OpenCV無疑就是巨人的肩膀.OpenCV的全稱是:Open Source Computer Vision Library,是1999年由 intel公司開發(fā)的圖像處理和計算機(jī)視覺開放源碼庫,現(xiàn)在由Willow Garage實驗室提供支持.它支持多平臺,包括 windows,linux,max,并且他完全開源.OpenCV提供了C++,C,Python接口(即將支持 java 接口),目前最新版本為2.4.3.
由Codejock公司設(shè)計開發(fā),該公司成立于1998年,致力于開發(fā)“用戶界面”的控件產(chǎn)品和開發(fā)工具,能有效節(jié)約用戶的開發(fā)時間和開發(fā)成本,讓軟件界面更加精彩.Codejock是目前VC/VB和.NET開發(fā)環(huán)境下最好的界面開發(fā)組件之一.
被稱為如羽毛般輕的數(shù)據(jù)庫.Sqlite是一種輕量級開源數(shù)據(jù)庫,具有很多不錯的特點.如:支持事件,不需要配置,不需要管理員,也不需要安裝.本身編譯成一個動態(tài)鏈接庫,沒有界面化管理,故可配合Navicat Premium進(jìn)行數(shù)據(jù)庫可視化管理.
目前已經(jīng)在很多嵌入式產(chǎn)品中使用了它,它占用資源非常的低,在嵌入式設(shè)備中,可能只需要幾百K的內(nèi)存就夠了.它能夠支持Windows/Linux/Unix等等主流的操作系統(tǒng),同時能夠跟很多程序語言相結(jié)合,比如C#、PHP、Java等,還有ODBC接口,同樣比起Mysql、PostgreSQL這兩款世界著名的開源數(shù)據(jù)庫管理系統(tǒng)來講,它的處理速度比他們都快.
Xerces是由Apache組織所推動的一項XML文檔解析開源項目,她是一個開放源代碼的XML語法分析器.利用XERCES,配合SQLite使用,便于封裝數(shù)據(jù)庫.
車牌識別本質(zhì)上是建立在一系列數(shù)字圖像處理上,這部分也是一個車牌識別系統(tǒng)的核心.
2.1.1 圖像構(gòu)成
彩色圖像其實是由三通道組成,在數(shù)據(jù)部分由倒向的RGB組成,即BGRBGRBGR……假如直接使用彩色圖像進(jìn)行操作,將使數(shù)據(jù)操作量十分的龐大,故需要對圖像進(jìn)行二值化.
2.1.2 圖像處理
二值化前需先將圖片轉(zhuǎn)化為灰度圖像,即單通道圖像,灰度圖像和二值化圖像有非常大的區(qū)別,灰度圖像圖像數(shù)據(jù)有明亮之分,而二值化圖像像素數(shù)據(jù)僅有0或255兩種.opencv中提供了將圖像轉(zhuǎn)為灰度圖像的函數(shù)cvCvtColor();
在二值化圖像前首先需先理解一個關(guān)鍵詞:閾值.閾值又可稱為臨界值,這個值需自己設(shè)定.
二值化如字面意思其實就是將一副灰度圖像轉(zhuǎn)化為僅有黑白兩種顏色的圖像,即圖像數(shù)據(jù)僅有0或255兩種.可用如下數(shù)學(xué)表達(dá)式表示,R即為閾值.
所以閾值的選擇至關(guān)重要,opencv中有提供canny算子的函數(shù)(邊緣檢測),但是閾值需自己提供.
2.1.3 自適應(yīng)閾值方法
AdaptiveThreshold(T,m_gray_image)小閾值用于邊緣控制連接,采用自適應(yīng)閾值方法,原理如下:
(1)傳入原圖像灰度值最大值和最小值的平均值t.
(2)將圖像分為兩部分,大于t的累加進(jìn)Allt1,小于等于t的累加進(jìn)Allt2中.并計算分別占有的像素點accountt1和accountt2.
(3)取 Allt1/accountt1,放入t1,即求平均值.
(4)取Allt2/accountt2,放入t2,即求平均值.(5)取t1和t2的平均值tnew.
(6)若tnew的值等于t,tnew即為所要的小閾值,返回;否則將tnew賦值給t進(jìn)行遞歸,執(zhí)行第二步.
為了確定出車牌的上下邊界,有種簡易的方法,就是求圖中的矩形框,但是往往圖片中存在各種各樣的噪聲.所以不能單純的求矩形框,可以求出上下邊界,再求左右邊界.
2.2.1 水平細(xì)化
(1)首先需要將圖像進(jìn)行水平細(xì)化.將圖像細(xì)化,即將圖像中的右邊點減去他的左邊點,找出隔壁的點和前一點的差值,即如果兩點之間相差的對比度高,即該點的圖像較清晰.
2.2.2 繪制水平方向直方圖
繪制水平方向直方圖以便于觀察,直方圖繪制思想是new一副高度跟源圖像相同的單通道黑色圖像,然后一行一行的掃描,如果每行將前num_h[j]的值賦為白色,這樣就形成了一副簡單的直方圖.
2.2.3 確定車牌長寬
搜索車牌區(qū)域,從上向下掃描,每次掃描20個像素點,找出像素點最大值的起始處.這樣子就可以獲得車牌的高度,而寬度為plate_w =imgTest- >width*WITH_X–1.
2.2.4 確定具體起始點
拿一個車牌大小的矩形區(qū)域從左往右滑動,什么時候圈住的數(shù)據(jù)量最大的時候,就代表找到的車牌的左邊界;此時,車牌左邊界的橫坐標(biāo)是k.
2.2.5 車牌歸一化
車牌識別后大小是不相同的,需用OpenCV提供的函數(shù)進(jìn)行歸一化.
2.2.6 字符分割
定位后的圖像應(yīng)該是由一個漢字和6個字符組成,字符包括漢字和數(shù)字.識別時必須根據(jù)每個字符的特征進(jìn)行匹配,故要完成識別,需先完成字符分割.
算法如下:
(1)從上到下對圖像逐行掃描,當(dāng)碰到第一個255的值(即黑色像素點)時,記錄它.然后從下到上對圖像逐行掃描,當(dāng)碰到第一個255的值時,再次記錄.這樣就得到大致的高度.
(2)在這個高度范圍之內(nèi)自左向右逐列掃描,當(dāng)碰到第一個255的值時,就認(rèn)為是字符分割的起始位置,然后繼續(xù)掃描,直到某一列沒有黑色像素點,則掃描結(jié)束.
車牌識別系統(tǒng)的最后一步就是字符識別,關(guān)于識別,有兩種做法,一種是神經(jīng)網(wǎng)絡(luò)識別,一種是模板匹配算法,前者雖然識別率高,但是耗時長,后者效率高,識別率也不錯.推薦采用后者,模板匹配流程如圖2所示.
圖2 模板匹配過程
3.2.1 車牌特征值提取
車牌識別系統(tǒng)中的特征值可采用33個特征點存儲,其中前25個為將圖像分割成25塊,然后將圖像每塊中黑點數(shù)作為他的特征值存取,后8個特征值是橫縱向8條直接所穿過的黑點數(shù).
由于車牌的字符沒有標(biāo)準(zhǔn)化的圖像可以比較,故需用大量的圖片來選取出最合適的字符圖像.
3.2.2 車牌特征值存儲
得到字符特征后需要字符特征值進(jìn)行存取,可采用SQLite+XML進(jìn)行存儲,例如:
圖3 XML特征值串
字符識別是建立在字符分割并細(xì)化后,先提取細(xì)化后的字符存在結(jié)構(gòu)體中備用.
然后通過數(shù)據(jù)庫接口查詢數(shù)據(jù)庫中所有的字符,并將字符屬性存入XML作為返回值返回到主函數(shù)中進(jìn)行對比.對比的方法有很多,可采用如下3種方法.
(1)豪斯多夫最小距離判定,小小的改進(jìn)了下,算法如下:①設(shè)定LEN(X)=0,表示X字符模塊初始化;②從上到下,逐行掃描待檢測字符圖像像素,如果是255,記錄為p(x,y);否則繼續(xù)掃描.③在模板圖像上,以p(x,y)為中心的5×5領(lǐng)域內(nèi),搜索255,尋找與p(x,y)最近的點,并且計算p(x,y)和該點的距離,此距離是待識別圖像和模板圖像在該點的最小距離.如果在5×5領(lǐng)域內(nèi)未搜索到,則認(rèn)為是20.
④將距離進(jìn)行累加進(jìn)LEN(X).
⑤判斷圖像是否掃描結(jié)束,如沒結(jié)束,轉(zhuǎn)2.
⑥取LEN(X)在所有字符中的最小值,對應(yīng)的模板就是要識別的結(jié)果.
(2)方差判定,公式如下:
取方差最小值所對應(yīng)得模板即是要識別的結(jié)果.
(3)取差值.
但是由于前兩種方法的時間效率太低,所以最后采用的是第三種方法.
該文針對目前我國車牌識別系統(tǒng)存在的問題,研究并提出了一系列在車牌識別處理中的關(guān)鍵技術(shù)以及核心算法,利用這些關(guān)鍵技術(shù)和核心算法開發(fā)的車牌自動識別系統(tǒng)較普通的車牌識別系統(tǒng)具有更好的識別率,能夠為將來的智能化交通體系的建立提供一定的借鑒和參考.
[1]沈晶,等.VC++數(shù)字圖像處理典型案例詳解[M].北京:機(jī)械工業(yè)出版社,2012.
[2]Bradski G.Kaehler A.于仕琪,劉瑞禎 譯.學(xué)習(xí) OpenCV[M].北京:清華大學(xué)出版社,2009.47.
[3]于仕琪,劉瑞禎.OpenCV教程[M].北京:北京航空航天大學(xué)出版社,2007.89.
[4]馮偉興,等.Visual C++數(shù)字圖像模式識別技術(shù)詳解[M].北京:機(jī)械工業(yè)出版社,2010.136.
[5]謝鳳英,趙丹培.Visual C++數(shù)字圖像處理[M].北京:電子工業(yè)出版社,2011.145.
[6]劉海波,沈晶,郭聳.Visual C++數(shù)字圖像處理技術(shù)詳解[M].北京:機(jī)械工業(yè)出版社,2010.12.