王 霞
(福建船政交通職業學院 信息工程系,福建 福州 350007)
隨著以“人”“車”“路”三者協調發展為內涵的智能交通系統(ITS)迅速發展,采用圖像智能縮放技術、高速視頻流采集技術、多傳感器融合技術等來進行“人”“車”“路”三者的重新智能化洗牌成為當下政府相關部門的共識[1],大量案例表明,新技術的引入對于提高交通運輸資源一體化共享、優化道路利用效率、緩解道路擁擠、顯著提高車輛出行安全等方面發揮了巨大的作用。車標識別作為智能交通系統核心技術之一,具有廣泛的應用領域,特別是在車輛號牌發生人為污染時,車標作為車輛的另一個核心特征對于準確識別目標車輛并進行必要的唯一性標識具有重要意義[2]。Petrovic等人[3]利用梯度過濾器對車輛標識等部位進行定位;但當車標發生旋轉時,該方法的準確性會有所下降。部分學者利用低層次特征,即尺度不變特征變換(SIFT)和梯度直方圖(HOG)來識別車標[4-5];但大多數方法仍然嚴重依賴于低級特性和手工特性(例如SIFT),因此這些算法在處理具有不同成像條件的圖像時仍然受到限制。由CNNs進行自動特征提取比手工提取更有效,CNNs算法已經成功應用在ImageNet[6]上,并被廣泛應用于解決車標識別問題[7-8]。但研究表明,CNNs在某些條件下會失敗,如像素值的變化[9]。傳統的車標識別大多基于模板匹配或者支持向量機(SVM)求解最佳評測函數,進而調用模板庫和分類庫得出結果,上述方法對環境敏感性較強,可擴展性較差,識別準確率較低,已經不適應日益復雜的交通現狀?;谏鲜霰尘埃岢隽艘环N基于Seam Carving和深度學習的車標識別算法,通過車輛圖像預處理、圖像智能縮放處理、車標識別網絡構建等步驟,可以準確定位并識別車標[10],具有較好的可擴展性和穩定性,對環境干擾敏感度較低,可以廣泛應用于車標識別領域。
通過道路圖像采集器獲得的圖像一般為帶有大量噪聲和信息冗余的真彩色圖像,這種圖像一般含有明顯的干擾區域,不利于車標的定位和識別,為了節約圖像后期處理資源,提高處理效率,需要對車輛圖像進行物理預處理。為了縮小車輛圖像的顏色取值范圍,節約內存空間,需要對圖像進行灰度化處理,處理方法采用常用的三原色加權法,處理效果如圖1所示;為了降低噪聲對車標識別的影響[11],凸顯車標有益特征,需要對圖像進行平滑處理,處理方法采用常用的中值濾波法,處理效果如圖2所示;為了進一步抑制灰度化圖像中的邊緣點信息,在車標定位的同時去除圖像中不相干的信息,需要對圖像進行邊緣檢測,處理方法采用常用的Sobel算子檢測法,處理效果如下頁圖3所示。

圖2 車輛圖像中值濾波處理效果圖

圖3 車輛圖像邊緣檢測處理效果圖
Seam Carving是一種可以實現圖像低失真條件下的圖像智能縮放技術,可以在改變圖像自身大小的同時保留圖像的重要特征不失真,其核心點是能量梯度函數的選取,根據能量梯度函數來插入或者刪除水平或者垂直的裁切線,進一步根據上述裁切線獲取圖像重要特征能量的最小通道,確保圖像的重要特征不失真[12]。Seam Carving技術完整的處理流程一般包括能量分布圖計算、能量累加圖預測、獲取最小低失真裁切線等,其中,能量累加圖預測和獲取最小低失真裁切線的主要依據是能量梯度函數與圖像的亮度變化幅度、紋理豐富度等呈正相關[13]。
基于內容感知的圖像縮放關鍵在于如何選擇要刪除的像素。直覺上,我們的目標是移除與周圍環境相融合的不明顯的像素。本文使用的能量函數如下所示:
(1)
給定一個能量函數,假設我們需要減少圖像寬度。我們可以考慮幾種策略來實現這一點。例如,保存能量的最佳策略,即保持像素具有較高的能量值,刪除能量最低的像素。為了防止圖像被破壞,可以從每一行刪除等量的低能量像素。同時為了保持圖像的形狀和視覺一致性,可以使用自動裁剪,即尋找包含最高能量的子窗口。另一種可能的策略是刪除能量最低的整個列。這導致了我們的縫刻策略(圖2(d))和內部縫的定義。假設I是一個n×m的圖像,垂直縫的定義為:
(2)
其中,x是映射x:[1,...,n]→[1,...,m]。若y是映射y:[1,...,m]→[1,...,n],則水平縫的定義為:
(3)

(4)
對于問題(4),我們可以采用動態規劃求解,動態規劃的貝爾曼方程如下所示:
M(i,j)=e(i,j)+min(M(i-1,j-1),M(i-1,j),M(i-1,j+1))
(5)
動態規劃的過程結束后,矩陣M中最后一行的最小值將表示最小連接垂直接縫的結束。因此,在第二步中,我們從M上的最小值開始回溯,就能找到最優接縫的路徑。
經過Seam Carving技術處理的車輛圖像效果如圖4所示。為了提高編程效率,快捷的尋找最佳有效的能量梯度函數,采用動態規劃的方法實現,核心代碼如下:
%求解能量最小路徑
lastCol=find(Energy(m,:)==min(Energy(m,:)));
col=lastCol(1);
%描畫出裁切線
Line=Im;
for i=m:-1:1
Line(i,col,:)=[0,255,0];
col=col+Path(i,col);%連續動態迭代
end
%得出有效的能量值圖
Energy=zeros(m,n);
%得出有效路徑圖
Path=zeros(m,n);
tmp=0;
for i=1:m
for j=1:n
if(i==1)
Energy(i,j)=Gradient(i,j);
Path(i,j)=0;

圖4 經過Seam Carving技術處理的車輛圖像效果圖
由于車輛圖像獲取的環境較為復雜,獲取的圖像由于道路上的不確定因素、車輛自身的裝飾物等造成車輛本身是一個形狀不規則目標體,此外,由于車標形狀各異、底色、凹凸性差異明顯,為車標的精確識別帶來較大干擾[14],基于此,設計了車標粗定位算法,可以粗略識別出類車標區域,如圖5所示,算法主要流程如下:S1:根據整合的車標核心特征點檢測信息,進行分時特征點標定操作;S2:根據先驗模板庫中計算車標核心特征點的主輪廓并進行輪廓標定操作;S3:整合特征點標定信息,為車標粗定位做準備。根據上述流程,在Matlab環境下編程實現,效果如下頁圖6所示。

圖5 車標粗定位算法流程圖

圖6 Matlab環境下的車標粗定位效果圖
基于深度學習的車標識別算法主要包括含多隱層的多層感知神經網絡訓練子算法、基于人眼視覺紋理的車標精定位與識別子算法兩部分,如圖7所示,其中,含多隱層的多層感知神經網絡訓練子算法用來實現車標識別網絡的初始化與車標樣本的訓練、擬合、反饋、層級遞進等,形成包含多層感知器的種深度學習網絡;基于人眼視覺紋理的車標精定位與識別子算法用來實現車標的精確定位與識別,車標在粗略定位的基礎上基于人眼視覺紋理進行精確定位并把定位信息反饋給深度學習網絡,進而得出車標分類與識別結果。為了保證樣本訓練效率,樣本的訓練采用有監督的訓練模式,不斷增加模型結構的深度,最終形成具有6層隱層節點的深度學習網絡結構,使算法整體向著最優解方向迭代。

圖7 基于深度學習的車標識別算法總體示意圖
含多隱層的多層感知神經網絡訓練子算法通過獲取并重新組合底層車標特征抽象出更加簡潔的高層共同特征,可以實現不同車標特征的分布式表達。含多隱層的多層感知神經網絡訓練子算法包含輸入層、輸出層、隱藏層,其中,輸入層的源數據是經過預處理過的車輛圖像信息,在輸入層進行二維矩陣格式化處理后附加期望輸出值傳遞給隱藏層;如圖8所示,隱藏層在數目上與輸入層節點一致,從包含單個節點的獨立隱藏層開始,將內含節點添加到隱藏層接口,依次遞推,同時計算泛化誤差,訓練誤差,偏差和方差。當泛化誤差已經下降并且在其再次開始增加之前[15],在這一點上的節點數量是最終的隱藏層目標值;輸出層的類型由期望模型決定,可以是回歸或者分類結果。與上述過程相對應,核心代碼如下:
with tf.Session()as sess:
sess.run(tf.global_variables_initializer())
for epoch in range(6):# 隱藏層迭代次數
for batch_xs,batch_ys in generatebatch(X,Y,Y.shape[0],batch_size):# 每個周期進行MBGD算法
sess.run(train_step,feed_dict={tf_X:batch_xs,tf_Y:batch_ys})
if(epoch%100==0):
res = sess.run(accuracy,feed_dict={tf_X:X,tf_Y:Y})
print(epoch,res)
res_ypred = y_pred.eval(feed_dict={tf_X:X,tf_Y:Y}).flatten()# 只能預測一批樣本,不能預測一個樣本
print res_ypred

圖8 隱藏層迭代示意圖示意圖
通過廣泛調研和查閱相關文獻得知,車標一般處于車身兩端,這里僅考慮前端車標,前端車標大多處于車輛前端發動機散熱網所覆蓋的區域,發動機散熱網考慮到散熱效率,一般設計成規則起伏的紋理狀,這些紋理狀與車標性狀形成顯著差異。基于這一特性,提出了一種基于人眼視覺紋理的車標精定位與識別算法,如圖9所示,算法主要流程如下:S1:獲取原始車輛圖像并進行預處理;S2:進行車標粗定位并根據發動機散熱網的紋理特性唯一定位車標;S3:根據精確定位結果采用含多隱層的多層感知神經網絡訓練子算法進行車標識別并把識別結果反饋給深度學習網絡;S4:深度學習網絡根據反饋結果適當調整隱藏層的目標數目。與上述過程相對應,核心代碼如下:
accuracy = tf.reduce_mean(tf.cast(bool_pred,tf.float32))%設定人眼視覺紋理閾值
from collections import Counter%唯一定位車標
singerDict = {} %車標信息統計
for songKey in bigSongDict.keys():
theArtist = bigSongDict[songKey][artist_id]
if(theArtist in singerSDict):%調用深度學習網絡

圖9 基于人眼視覺紋理的車標精定位與識別子算法流程圖
為了實際驗證上文所提算法的有效性和實用性,本文在vs2012環境下調用OpenCV通用計算機視覺庫開發了一款通用車標自動識別系統,該系統可以實現通用車標二維輪廓的準確定位、車標內容的快速識別、車標核心特征點檢測與標定、一般車標特征點提取、車輛號牌污染情況下的車輛輔助追蹤、車標后期真實感渲染等功能,系統實際運行界面如下頁圖10所示。

圖10 通用車標識別系統界面示意圖
為了進一步驗證系統在非正常環境下的性能,選取對車輛圖像采集影響較大的因素(本文選取環境亮度和環境噪聲)進行控制變量驗證,具體做法為:S1:控制圖像采集噪聲不變,人為調整圖像采集環境亮度,觀察車標識別準確率;S2:控制圖像采集亮度不變,人為調整圖像采集環境噪聲,觀察車標識別準確率?;谏鲜鲎龇?,則實驗結果如圖11所示(綠色曲線為固定時間段內的預測識別準確率、藍色曲線為實驗曲線)。

圖11 控制變量法下的系統性能示意圖
由于篇幅所限,僅展示部分車標的識別結果,如下頁圖12所示。

圖12 車標識別結果示例
本文研究了基于Seam Carving和深度學習的車標識別方法并開發了對應的系統,依次設計了車輛圖像預處理算法、基于Seam Carving的車輛圖像縮放算法、車標粗定位算法、基于深度學習的車標識別算法等,在此基礎上,本文在vs2012環境下采用OpenCV通用計算機視覺庫開發了一款通用車標自動識別系統并對系統的性能進行了實際測試。實際測試表明,本文所提基于Seam Carving和深度學習的車標識別方法速度快、信息需求量較小、識別精度較高,重構出的車標具有較強的真實感和紋理性,可以較好地滿足肇事車輛信息確認、復雜路況下的車輛布控、車輛監管等領域的應用需求,具有一定的實際推廣價值。