車牌識別學習

目前來說,車牌識別的技術已經相當成熟。在近一個月的學習時間裏,將整個車牌識別的流程走了一遍,也有了一個比較清晰、全面的瞭解。

車牌識別主要分爲三大部分:1.車牌的定位;2.車牌字符的分割;3.車牌字符的識別。

關於車牌定位,目前也有很多處理方式,在我學習的方法中,主要是運用到了目前車牌顏色(主要是藍色和黃色車牌,而兩種顏色又互爲反色)的特徵來進行候選車牌區域的定位(參考鄭成勇師兄的論文)。其他的方法,1)基於數學形態學的定位方法,比如直接進行邊緣檢測,然後進行形態學處理,按照一定的規則去掉不符合車牌區域條件的無效干擾,以此得到車牌候選區域的定位;2)基於神經網絡的車牌定位方法,利用已知的車牌區域和非車牌區進行反覆訓練得出一個比較滿意的網絡,在分割階段,使用滑窗法遍歷圖像,滑動窗口內的圖像送入訓練網絡進行判斷。貌似還有基於紋理特徵的車牌分割方法、基於小波變換的車牌分割方法等等。在我們的方法中,數學形態學處理,以及如何對候選車牌區域進行進一步的篩選需要花費點腦力。

關於車牌字符的分割,如果車牌存在一定程度的傾斜,還需要進行水平或者垂直角度的矯正。車牌區域已經給定,如何將區域中的字符準確的分隔開,比較通行的處理方式是先去掉上下邊框,然後將車牌二值化圖像進行垂直投影,去掉干擾,得到最大的投影間隔區,然後在最大間隔處向前分割兩個字符,向後分割五個字符。在我的處理中,沒有進行車牌的角度矯正,沒有考慮第一個漢字(如川)需要字符合並的情形,當然,這些處理都非常簡單了。

關於車牌字符的識別,這裏的方法就有很多了,什麼神經網絡,SVM(支持向量機),還有我之前畢設做過的導出核(神經反應,深度學習)都可以用到這裏了,並且效果可以非常的魯邦。我這裏使用了一種最粗糙的處理方法,簡單的統計字符二值圖像與模板二值圖像之間不同像素點的個數,將差異最小的模板記號賦給待確定字符,效果也還比較好。當然不如前面的那幾種方法厲害了,比如“8”和“B”有時候就會出現錯分,複雜的漢字“粵”和“冀”也有時候會出現錯分,這些當然也都不是問題啦。

在這段時間裏,總算把整個過程都跑了一遍,也算是瞭解瞭如今應用如此廣泛的車牌識別技術。

       下面就是程序以及測試的結果了:

function FinalPlate = LicenseLocate(CarImage,SaveImage)
% *****************************************************************************
% ** 函  數:  LicenseLocate  車牌定位
% ** 輸  入:  CarImage       包含車牌的圖像  輸入格式 '01.jpg'
% **                 SaveImage      保存的圖像名稱  輸入格式 '01_Plate.jpg'(可缺省)
% ** 輸  出:  FinalPlate     定位的車牌圖像
% ** 功  能:  輸入一副包含車牌信息的圖像,經過車牌定位之後得到車牌區域,並保存
% *****************************************************************************

function codeReg = LicenseRecognition(FinalPlate)
% *****************************************************************************
% ** 函  數:  LicenseRecognition  車牌字符識別
% ** 輸  入:  FinalPlate          包含車牌的圖像  輸入格式 '01_Plate.jpg'
% ** 輸  出:  codeReg             識別出來的字符
% ** 功  能:  輸入一副已經定位好的車牌的圖像,經過字符識別之後得到車牌信息輸出
% *****************************************************************************

%主函數測試車牌識別程序
clc,clear,close all
lei = '*.jpg';
%車牌定位
InputPath = '.\CarImage\';
NewFolder = 'MyPlate';
if ~isdir(NewFolder)
    system(['mkdir ' NewFolder]);
end
ImageS=dir([InputPath lei]);
L = length(ImageS);
for i = 1:1:L
    name       = ImageS(i).name;
    CarImage   = [InputPath name]; ming = name(1:end - 4);  
    FinalPlate = LicenseLocate(CarImage);
    imwrite(FinalPlate,[NewFolder '\' ming '_Plate.jpg'])
end


%車牌識別
InputPath1 = ['.\' NewFolder '\'];
ImageS1=dir([InputPath1 lei]);
L = length(ImageS1);
for i = 1:1:L
    name       = ImageS1(i).name;
    FinalPlate = [InputPath1  name];
    ming       = name(1:end - 4);  
    codeReg    = LicenseRecognition(FinalPlate)
end




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