車牌中的字符識別方法

提到字符識別,大家最爲熟悉的無疑是車牌自動識別和手寫輸入,這是字符識別的兩種典型方式,車牌是對攝像頭獲取的字符圖片進行識別,手寫輸入則是多了輸入回顯的功能,而且需要識別的字符也會更爲不規範。

字符識別屬於模式識別的一類,有許多不同的方法,要想做好都不容易,這裏我講一種非常簡單的識別方法,供大家對字符識別技術的學習做個參考。該方法是以前領導告訴我的,具體來歷不明,如果涉及知識產權請所有人與我聯繫。

開始介紹方法前先要提兩個名詞:相似性和歸一化。兄弟兩個人的外貌,看上去比較象,就是相似性,大致一看是比較象,但細看就會發現有一些細微的不同,人對外貌進行識別也是利用相似性來進行判斷,當大腦認爲現在看到的人和記憶中的模樣相似性達到一定尺度後就會認爲是同一個人,這樣就在生活中容易形成認錯人的尷尬。歸一化是計算機利用相似性進行比較的一種預處理方法,比如現在畫了一個人的素描像,計算機得到的圖像信息就是一些線條,假如現在將素描複印兩份,一份保持原尺寸,一份放大一倍,計算機對比原尺寸複印的線條會得出完全一樣的結果,也就是相似性100%,但放大一倍的得到的結果剛好相反,相似性會非常低,如果預先作歸一化處理,就會得到完全不同的結果,將放大一倍的素描圖縮小一倍,此時計算機得到相似性100%的結果。

 

 

 

圖一 歸一化處理示意圖

 

我們來看計算機如何進行相似性比較,這裏用最簡單的方法,就是兩個圖片左上角第一個點對齊,然後看整個圖片有多少點一致。如果我們不考慮圖像的旋轉這些因素,顯然原始尺寸複印出的圖像和原始圖像的點完全一致,相似性100%,放大一倍複印的結果則不一樣,大部分點都不同,這種處理方法得到的相似性非常低。但我們人眼一看就知道後面一種情況是放大複印的結果,兩者實際上是同一幅圖,看來這樣處理有問題。

對於放大後圖像相似性低的結果不用着急,歸一化就是應付這種情況的,現在我們再加入一個處理,除了找出圖像左上角的第一個基準點,我們還要找出圖像最左和最右的X軸座標值,兩者相減就是圖像的寬度,我們把圖像的寬度處理成一致後看看是什麼結果。原尺寸複印的圖像寬度自然是和原始圖像一致,不用再做處理,放大的圖像寬度爲原始圖像的兩倍,需要我們做歸一化處理,其實很簡單,就是將放大後的圖像反向壓縮到與原始圖像一樣的寬度,這次相似性比較兩種複印的圖像相似性都是100%,達到我們的預期。

實際中的相似性比較和歸一化處理遠比我說的複雜,不過一點可以確認,基本原理一致。前面我們是用圖像點是否一致來做相似性比較,這種處理方法並不適合實際應用,如果圖像複印的時候稍微有一點旋轉或變形,就可能得出截然不同的比較結果。實際中用得最多的是依據特徵值進行比較,先統計分析需要識別的對象的各種規律,依照規律提取特徵,再由特徵進行判別。

 

 

 

圖二 字符特徵值提取示意圖

 

這是我要推介的字符簡單特徵值識別法,爲進一步簡化說明以便理解,我用幾個打印的英文字母來進行示例。我們順着圖二中線來看字符,如果點爲白色記爲0,黑色記爲1,連續相鄰的多個01合併爲一個。對於字母A我們豎向得到0010010100100這樣的特徵值,橫向爲001001010010010100

B00100101001001010010000100101010010101010010100

C0010010100100101001000010010100

D00100101001000010010100100

O00100101001000010010100100

我們利用這些特徵值就有識別出這幾個字母的可能,只是要留意DO的特徵值相同,單純的利用特徵值還不能區分這兩個字母。這就需要用戶自己人爲選擇是D還是O,或者還需要提取一些輔助參考的特徵值,接着來看DO的不同,D的最左邊明顯是一條長豎線,從0個點位黑色一下就變爲多個點爲黑色,但O不同,黑色的點是逐漸增多的,利用這一點就能區分DO

實際情況遠比我說的複雜,首先字符的個數要多得多,其次是鏡頭獲取的圖像不可能有圖二中字母那麼理想,會有漏點、扭曲、旋轉等現象,如果是嚴格按照前面的特徵值進行判斷,顯然絕大多數情況都識別不到。這就要求我們適度將特徵值模糊,用相似性的高低作爲判定依據,在相似性不是足夠高或者有多個字符相似性接近的時候引入輔助特徵值。

看一下字符有哪些輔助特徵值可以用到,前面說到的點與線的區別是一種。我們還可以利用字符中的黑線交叉位置的夾角大小,比如A3個銳角和2個鈍角,B4個近似直角和1個近似銳角,D有兩個近似直角,CO沒有夾角。利用夾角存在的特徵值可以讓字符的識別率大爲提高,尤其是對字符的旋轉有着不錯的效果。另外線的交叉關係也是不錯的特徵值,比如兩線交叉、三線交叉也能有效提高識別率。

但這只限於印刷的字符,如果是手寫的很有可能完全不適用。圖三爲手寫的字母,可以看出和印刷體相比不規範的地方要多許多,再去直接套印刷體的特徵值絕對不會有好的結果。這種情況需要我們對圖像做更多的預處理,圖三中所示不連續的地方需要補填上有效點,象AO頂端的小缺口也需要過濾掉,如果是污漬等形成的小面積黑點也應過濾掉。預處理後的圖像再去套用前面印刷體的特徵值,還是能得到不錯的效果。

 

 

 

圖三 不規範手寫字符示意圖

 

這裏的字符識別沒有強調歸一化處理,因爲特徵值的提取和歸一化聯繫並不緊密,但如果能在圖像預處理中引入歸一化處理,對識別率的提高還是有着積極意義。象圖像旋轉後得到的特徵值會與標準特徵值有明顯不同,以B爲例,標準的是左邊豎向爲一直線,但如果B傾斜,最左邊豎線就變成了點。如果先對圖像進行旋轉歸一化處理,還是先找到左上角的點,然後適當旋轉圖像,直到左邊的直線變回豎立狀態,注意原始圖像也要進行同樣的旋轉歸一化處理。

識別技術常會提到學習功能,學習實際上就是先拿許多樣板進行處理,將樣板得到的特徵值存爲數據庫,實際識別時用被識別對象得到的特徵值和數據庫中的數據進行匹配,相似性最高的樣板就是識別出的結果。通常需要比較多的樣板才能建立一個比較完善的數據庫,就最規範的印刷體爲例,鏡頭得到的圖像有可能左傾、也有可能右傾,如果建立數據庫就考慮了這三種情況,自然就更爲理想。

這種簡單的字符識別方法就介紹到這裏,我的目的只是想讓對圖像識別有興趣的朋友基本入門,通過這種簡單方法初步瞭解圖像識別,權當拋磚引玉。漢字的識別並不是我們所想的要比英文字符複雜許多,因爲英文字符筆畫少,相互之間的特徵值差異不大,尤其是手寫,所以不好區分,筆畫多的漢字相互之間的特徵值差異會比較明顯,區分起來反而容易。現在漢字的手寫識別多采用筆畫匹配的方式,就是用點、橫、豎、撇、捺的組合來匹配,當然真正寫出這樣的識別程序還是有一定難度,有興趣的朋友可以在本文的基礎上自己做更深入的探索。

發佈了19 篇原創文章 · 獲贊 1 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章