楊金鑫, 顏湘炎, 王子寧
(江蘇大學 汽車與交通工程學院, 江蘇 鎮江 212013)
研究可知,現代智能交通系統對于解決城市交通管理問題至關重要。 其中,車牌識別作為該領域研究的基本組成部分,通常包括車牌圖像預處理、車牌定位、字符分割和字符識別四個部分[1]。
近些年,國內外學者對車牌識別技術進行了大量的研究。 TomLink 等學者為了降低光照對車牌識別的影響,先將工業設備獲取的原始RGB 圖像轉化成HSV 的3 個分量值,再利用邏輯乘運算和紋理特征獲得車牌區域并去除偽車牌區域,定位成功率達到97.58%[2]。 Li 等學者[3]提出利用前饋神經網絡(Back Propagation,BP)結合CNN 的識別方法,對車牌中相似的字符使用CNN 識別,其余字符則采用BP 識別,準確率達到97.49%。 曾泉等學者[4]提出的車牌識別系統以支持向量機(Support Vector Machine,SVM)和BP 為基礎,選取了不同環境下的車牌圖片進行識別,該系統的識別算法精度高、速度快,對復雜環境適用性強。 雖然這些方法在自然場景下取得了不錯的效果,但是在包含各種噪聲干擾的復雜環境下,識別精度和魯棒性仍不理想。
為提高算法在復雜場景下車牌扭曲變形、字符模糊不清的字符識別率,本文在如下方面開展研究。首先,對原始車牌圖像完成一系列的預處理操作;緊接著,使用基于Python 語言的HOG+SVM 對目標車牌進行檢測與定位,利用二分類算法排除干擾區域;然后,利用Radon 變換算法對車牌進行傾斜矯正,并基于水平和垂直投影完成車牌字符分割;最后,以深度學習為基礎,設計基于卷積神經網絡的車牌字符識別模塊,經過大量數據訓練后,得到更有效的字符特征信息,完成識別并輸出結果。 系統框圖如圖1所示。

圖1 車牌識別系統框圖Fig. 1 Block diagram of license plate recognition system
受自然環境、拍攝角度和噪聲干擾等客觀因素的影響,獲取的車牌圖像常常無法達到識別要求,需要進行預處理,以提高圖像品質,保證信息獲取準確度。
1.1.1 圖像灰度化
通常,工業相機拍攝后獲得的車牌圖像類型是RGB 圖像,其顏色特征豐富,存儲信息占用內存大,運算速度慢。 為降低數據處理量,本文采用加權平均值算法做灰度化處理[5]。 計算公式可寫為:
其中,坐標(x,y) 表示像素點位置;Gray(x,y)表示灰度處理值;R(x,y),G(x,y),B(x,y) 為灰度分量值。
1.1.2 濾波去噪
真實環境下捕獲的車牌圖像一般為攜帶噪聲的彩色圖像,干擾噪聲的存在使圖像的質量下降,使得車牌識別算法對車牌信息產生誤識別。 為了能夠去除噪聲并提取圖像的有效信息,選擇采用均值濾波、即鄰域平均法。 可用如下公式進行描述:
其中,f(i,j) 表示攜帶噪聲的車牌圖像;g(i,j) 表示均值濾波處理后的圖像;M是鄰域內各鄰近像素的坐標集;N是鄰域內包含的鄰近像素的個數[6]。
1.1.3 邊緣檢測
本文選用主流圖像邊緣檢測Sobel 算子提取圖像重要特征,即利用邊界點對車牌圖像的水平和垂直兩個方向進行掃描檢測,得到特征圖并確定車牌的上下邊界。 且Sobel 算法中還有平均運算,對車牌圖像進一步做平滑去噪。 Sobel 算子水平Gx和垂直Gy矩陣模板可表示為:
1.1.4 顏色空間變換
將車牌圖像的RGB 顏色空間變換為更接近人類感知顏色方式的HSV 顏色空間[7],與步驟1.1.3中Sobel 算子處理后的圖像相乘,突出車牌區域。
1.1.5 圖像二值化
本文選用最大類間方差法(OTSU)對車牌灰度化圖像進行二值化處理。 通過統計灰度值獲取最佳閾值T,當車牌圖像的像素灰度值大于最佳閾值T時,像素灰度值設為255,即黑色;小于T時,像素灰度值設為0,即白色,車牌圖像被分成目標和背景兩部分。 研究推得的數學公式見如下:
其中,f(i,j) 為灰度點的像素值;g(i,j) 為二值化點的像素值;T為選定的閾值。
1.1.6 形態學處理
為提高復雜場景下車牌識別準確率,利用基于OpenCV-Python 的morphologyEx 形態學濾波函數,并搭配kernel 膨脹核參數對車牌圖像做形態學閉運算、即先膨脹運算,再腐蝕運算。 閉運算能夠平滑車牌邊緣,排除黑色區域并彌合裂縫等缺陷,也不會改變位置和形狀。 圖2 是經過預處理后得到的車牌效果圖。

圖2 預處理后車牌效果圖Fig. 2 License plate renderings after preprocessing
車牌圖像的定位主要分為2 步。 首先,通過預處理,利用形態學閉運算截取候選車牌區域;然后,基于HOG 特征提取和訓練SVM 支持向量機分類器,并結合規則過濾出真正的車牌區域。
1.2.1 HOG 特征提取
HOG 特征具有尺度不變性,適用于復雜環境下SVM 支持向量機的車牌定位檢測,魯棒性較好[8]。HOG 局部特征提取具體步驟如下:
(1)顏色空間歸一化、即車牌圖像灰度化;
(2)梯度計算:計算像素點(x,y) 水平方向和垂直方向的梯度值。 可由式(5)、式(6)計算求得:
其中,f(x,y) 表示像素值,Gx(x,y),Gy(x,y)分別表示水平和垂直梯度。
進而求出像素點(x,y) 處的梯度幅值和梯度方向,可由式(7)、式(8)進行描述:
(3)構建梯度方向直方圖,本文采用9 個直方圖通道,如圖3 所示。

圖3 Block 矩形區間(9 個直方圖通道)Fig. 3 Block rectangular interval (9 histogram channels)
1.2.2 SVM 定位車牌
SVM 利用結構風險最小原則對目標數據進行二元分類,主要分為線性和非線性支持向量機。HOG 特征提取后,選用二元SVM 分類器對車牌定位圖片進行過濾,過濾掉一些偽車牌區域,最終篩選出真正的車牌圖片。 分別從車牌區域和非車牌區域選取數據集作為正樣本和負樣本進行模型訓練,并在測試集上測試,分類正確率達98.9%。 部分樣本如圖4 所示。

圖4 SVM 訓練所用正負樣本(部分)Fig. 4 Positive and negative samples for SVM training (part)
為提高車牌字符分割和識別工作的準確性,現對車牌圖像進行傾斜校正。 國內外經典車牌傾斜校正算法主要有直線檢測算法、投影旋轉變換算法等,其中直線檢測算法主要包括Hough 變換算法和Radon 變換算法[9]。 本文選用基于Radon 變換的傾斜矯正算法。
基于Radon 變換的傾斜校正算法是在車牌圖像預處理的基礎上,對車牌圖像進行Radon 變換,求出最大峰值點處的傾斜角,旋轉后實現傾斜校正。 由此推得的數學計算公式為:
其中,;D為車牌圖像平面;f(x,y) 為點(x,y) 的原始圖像像素值;在ρ-θ空間內,ρ為(x,y) 平面內直線到原點的距離;θ為要求的傾斜角。
基于Radon 變換的車牌傾斜校正如圖5 所示。

圖5 基于Radon 變換的車牌傾斜校正Fig. 5 License plate tilt correction based on Radon transform
目前,常用的字符分割方法主要有模板匹配法、投影法(包括水平和垂直投影)、基于連通域分割法以及基于人工神經網絡分割法[10]。 根據國內車牌的形態特征和字符編排的特殊性,本文選用垂直投影法對校正后的車牌圖像進行分割。
車牌傾斜校正后,首先需要去除邊框區域和固定的鉚釘,然后選用基于顏色信息的跳變法,將字符區域過渡引起的跳變次數與設定閾值相比較,再根據字符區域為白色、非字符區域為黑色的二分類特征使用垂直投影法,所得投影圖上的波谷區域即是字符分割點,最終完成車牌字符的分割。 分割過程和結果如圖6 所示。

圖6 基于垂直投影的車牌字符分割Fig. 6 License plate character segmentation based on vertical projection
現如今,主流的車牌字符識別方法主要有4 種,分別為基于模板匹配的字符識別、基于統計特征的字符識別、基于傳統機器學習的字符識別和基于卷積神經網絡的字符識別[11]。 本文采用基于深度學習的卷積神經網絡車牌字符識別算法,避免了傳統算法中復雜的字符特征提取過程,提高了復雜環境下車牌字符識別的準確性和穩定性。
CNN 是以卷積計算為核心的深層神經網絡,具有優秀的圖像特征提取能力,其結構一般包括:卷積層(Convolutional layer)、池化層(Pooling layer)和全連接層(Full-connected layer),具有局部感知、權值共享、多層卷積等特點[12]。 對此擬做研究分述如下。
(1)卷積層(Convolutional layer)。 卷積層是CNN 的核心構建塊,主要由卷積計算和激活函數構成。 卷積層中含有多個過濾器、即卷積核,用來檢測并提取輸入圖像的特征,還通過卷積運算增強某些特征信號和降低噪聲,從而創建多個有助于對輸入圖像進行分類的特征圖。
卷積計算的參數包括:步長S、即卷積核每次平移滑動的長度;卷積核大小K;邊緣填充P、即用來調整卷積后特征的大小,常用0 值填充(zeropadding),如果要維持卷積層前后的特征圖尺寸一致,P的取值應該為P=(K -1)/2。 用input表示輸入特征圖的大小,用output表示卷積后特征圖的大小,可用如下公式來計算求值:
卷積計算的過程如圖7 所示。 圖7 中,深藍色的5*5 矩陣是輸入圖像,灰色的3*3 區域是卷積核,步長S為1、填充P為1,卷積核每滑動一個步長輸出一個結果,以此類推,最終卷積計算的輸出結果為淺藍色的5*5 矩陣,且滿足式(10)。

圖7 二維卷積計算過程示意圖Fig. 7 Schematic diagram of two - dimensional convolution calculation process
本文采用ReLu激活函數來解決卷積神經網絡中的非線性問題。 函數定義公式具體如下:
(2)池化層(Pooling layer)。 池化層主要功能是通過壓縮圖像(數據和參數計算等)去除冗余的信息,并減小過擬合,從而增強圖像特征的表達。 本文采用平均值池化來增加卷積核對圖片信息的提取能力,即以平均值作為特征子區域的輸出值。 以4*4輸入圖像為例,給出的平均值池化操作如圖8所示。

圖8 平均值池化示意圖Fig. 8 Schematic diagram of average pooling
(3)全連接層(Full-connected layer)。 全連接層在卷積神經網絡中的作用是在輸入圖像通過卷積計算、激活函數、池化處理等操作后,將輸出結果進行特征融合轉化為一維標記空間, 并送到分類器(如softmax分類器) 實現分類,其核心數學運算是矩陣向量乘積。
綜上所述,在卷積神經網絡中,全連接層之前是對輸入信號進行特征提取,全連接層本身實現分類并輸出結果。 依托這一優點,在進行大量數據訓練后,卷積神經網絡能夠實現對復雜圖像特征的自動提取和分類,且不易受到外界環境的干擾,為本文車牌識別算法的研究提供理論支撐。
為減少外界環境的干擾,并提高車牌識別的魯棒性和自適應性,本文采用基于卷積神經網絡的VGG16 網絡模型進行車牌字符識別,其模型包含了13 個卷積層、5 個池化層、3 個全連接層[13],且每一層都含有參數和權重,網絡模型如圖9 所示。 考慮到車牌識別的輸出結果為檢測異常與正常輸出號碼, 本文將原網絡的softmax分類器改為二分類softmax,激活函數仍采用ReLu,其他保持不變。

圖9 VGG16 網絡模型圖Fig. 9 VGG16 network model diagram
本文以公開數據集CCPD 為基礎,結合國內汽車牌照特點,制作31 類省、市、自治區簡稱的中文漢字、除I 和O 之外的24 類英文字母和10 類阿拉伯數字、共65 類字符組成的數據集,數據集包含中文漢字圖片3 573張,英文字母圖片5 481張,數字圖片7 693張。 首先基于TensorFlow 深度學習框架搭建VGG16 網絡模型,然后結合車牌圖像預處理、車牌定位和字符分割等前期處理,最終將分割后的字符歸一化為224*224 并輸入VGG16 網絡進行訓練和測試。 在訓練與測試過程中,發現模型容易對‘Z’和‘2’、‘U’和‘V’、‘B’和‘8’、‘浙’和‘湘’等相似字符產生誤識別。
本文設計的基于深度學習的復雜場景下車牌識別算法,是以公開的中國城市停車數據集CCPD 為基礎,少部分測試圖片來自現場采集,通過選取正常拍攝、不同角度傾斜、異常天氣條件(雨天、冰雪、大霧)、光照不足或過強、不同運動姿態等場景下的車輛圖片進行車牌識別測試。 所有選取的車輛圖片都經過預處理、車牌定位、字符分割等處理,然后轉換為tensor 變量傳入VGG16 網絡模型進行訓練與測試。 本文設計的算法在雨雪天氣和傾斜場景下定位率達到了93%以上,大霧天氣、車牌模糊和夜晚場景下車牌定位率稍低,對字符分割和識別產生了較大影響,結果顯示復雜場景下字符識別準確率僅達到了85%,但符合本文算法研究的預期。 部分復雜場景下的車牌識別結果如圖10 所示。

圖10 部分復雜場景下車牌識別結果Fig. 10 License plate recognition results in some complex scenes
為了提高對于不同環境、不同角度、不同清晰度、不同天氣狀況以及動態多變的復雜場景下車牌識別的準確率,本文從基于深度學習的復雜場景下車牌識別算法展開研究,針對圖像預處理、車牌定位、傾斜校正、字符分割和字符識別分別做了優化處理。 利用灰度化、濾波去噪、二值化、形態學運算等手段對車牌圖像進行預處理、設計并采用Python 編程語言的HOG+SVM 算法對目標車牌進行檢測定位、采用Radon 變換對車牌進行傾斜校正以及使用基于深度學習和CNN 卷積神經網絡的VGG16 模型對車牌字符進行識別,測試結果顯示車牌字符平均識別準確率和魯棒性均得到有效提高,具有廣闊的應用場景。