基於OpenCV的車牌識別系統之二 ——字符分割與識別

基於OpenCV的車牌識別系統之二——字符分割與識別

 

車牌定位完之後就是車牌的字符識別,字符識別又分爲字符分割和字符識別。字符分割的步驟採用OpenCV中尋找外輪廓函數,並根據字符輪廓在車牌圖像上分割出字符圖像。字符識別採用三層神經網絡。本程序中採用OCR最常見的特徵提取方法:首先將每個字符歸一化爲20*20的字符,然後在每個字符中提取出一個1*440的特徵向量,這440個特徵中400爲統計每行和每列的像素值個數並保存到新的數據組中,採用minMaxLoc得出數據組中最大的像素值,然後這個數據組中每個像素除此這個值。40爲20行和20列統計的非零像素值得個數。這就是特徵向量的結構解析。知道這個特徵向量是怎麼來的,這樣就可以寫自己ANN離線訓練的數據集了。

 

本程序最初的方法也是採用的書上--《深入理解Opencv實用計算機視覺項目解析》的字符分割方法,首先得到一張車牌圖片,然後根據最大類間法(Otsu)得到一張較好的車牌二值化圖像,之後採用findCounters尋找最外圍輪廓並計算其最小外接矩形的大小--這些輪廓所包圍的區域全部最爲粗選的字符備選區域。然後將這些備選區域依次送入字符驗證函數(下面單獨介紹字符函數),當統計的通過字符驗證函數有且只有7個字符時,則進行下一步—在原圖上裁剪出字符區域。得到字符區域之後採用直方圖均質化等等預處理。然後依次對7個字符排序,最後在將每個字符歸一爲20*20的圖像。字符識別使用ANN算法採用三層神經網絡,輸入層經元數是離線訓練數據集的行數,隱含層的神經元個數是20,輸出層的神經元是類別的種類數。然後依次對每個字符運用ANN.predict函數得出1*類別數的數據組(數據組中是記錄這個字符跟每個類別的“相似度”),使用minMaxLoc函數才找出最大概率的類別。返回其位置。根據返回數據打印出字符。但是這個程序前提的是要能精準的找到車牌位置,但是實例中很難精準的找到車牌位置。其系統結構圖如圖下所示:

                                                     

該系統在實際的實現的過程中存在有幾個問題:

1.      車牌的二值化圖像邊框和柳釘沒有清除乾淨會直接影響到後續的尋找輪廓。

2.      車牌的第一個字符,各種省份漢字(例如:粵,鄂字符)根本在20*20分辨率下的字符無法精確區分。

3.      車牌的第一個字符,例如川、滬等字時,字體容易分開,導致往往通不過驗證函數。

 

那麼怎麼解決這些問題呢?

首先第一個問題比較容易解決,但解決的效果有待進一步加強。其想法是對車牌二值化圖像行和列掃描。當行掃描時跳變小於某個閾值時,則認爲這行數據中不包含字符信息,這行的像素直接置0。這樣去除掉上、下邊框和鉚釘的影響。當掃描完行之後,直接在前端和末端抹掉兩列(經驗值)信息。這是爲了去掉左右邊框的影響。左圖爲含有邊框噪聲之圖像,右圖爲消除邊框噪聲之後的圖像,但是還有少量的噪點信息。

                                                                                                                     

 

其次第二問題,這些車牌的首個漢字怎麼解決,本程序是採用雙ANN,將漢字分爲一類,字母和數字爲一類。分別使用神經網絡模型,這樣有效的提高了對漢字的識別率。作者在後期過程中對漢字字符處理的時,將其歸一爲40*40的分辨率,其效果也不是很理想。其原因是在原始圖像中,字符的信息只有20*20像素,將其放大到40*40也是線性插值。如果想進一步提高漢字識別率,則需要更高的質量圖像。

 

最後一個問題,由於作者C++語言水平能力有限所以這個問題也沒有得到解決,但作者翻過幾篇碩士論文篩選出兩種方法:第一種辦法是通過確定“特殊字符”來確定省份漢字的位置並直接進行截取。特殊字符是通過第二字符在車牌中大概位置(經驗值),尋找其輪廓並畫出凸包的外接矩形,根據“特殊字符”的外接矩陣進行窗口滑動。向前滑動一個間隙尋找到省份漢字。第二種方法是通過間隙閾值來確定兩者爲一個整體。這個兩個辦法,第一個方法過程雖然複雜且尋找得到的字符都會有點殘缺,但此方法對二值化的圖像質量要求不高且殘缺的部分對字符識別影響較小。第二種方法對二值化後的圖像質量要求較高,如果邊緣沒有處理好直接導致將第一個字符夾雜着大量的噪點信息,這樣會在很大層度上影響到字符識別。針對以上問題我對原先的程序進行修改。這三張圖片是我的實驗結果截圖:

    

 

PS:字符驗證函數幾乎是根據先驗條件得到的,但是這裏爲什麼不能用到先驗條件呢?在我國的車牌上字符是比例是45/90,但這個比例是在圖片正常的前提下。前面的文章將得到的車牌歸一化爲33*144,這樣至多至少的已經將圖片進行壓縮或放大,且是不等比例的壓縮或放大。這樣字符比例已經不能作爲的篩選條件。作者根據圖像比例(實際的調試過程中的經驗),設置字符的高度應在15-25個像素之間。本來想設置其字符寬度與高度之比,但是字符的寬度相差很大,例—字符爲“1”時其寬度爲3個像素值。故此這個驗證函數的篩選條件還有待進一步的商榷。這個是值的改進的地方。調整期車牌的大小,具體根據攝像頭定點拍攝時,車牌在圖像中所佔的像素個數來決定的。

代碼:http://download.csdn.net/detail/chengchaopeng520/9808253

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章