陳高攀, 徐美華, 王 琪, 郭愛英
(1. 上海大學微電子研究與開發(fā)中心, 上海200444; 2. 上海大學機電工程與自動化學院, 上海200444)
在過去的十幾年里, 針對智能駕駛輔助系統(tǒng)和自動駕駛系統(tǒng)的研究有很大進展, 這些研究主要是通過監(jiān)測路面環(huán)境來增強車輛的安全性[1]. 基于視覺的前方車輛檢測算法, 因其具備傳感設備便攜、檢測環(huán)境信息量較大、應用范圍較廣等優(yōu)點而成為研究熱點. 該算法主要由2 個步驟組成: 前方車輛提取和前方車輛識別. 前方車輛提取是根據(jù)車輛的直觀視覺信息, 如對稱性[2]、邊緣信息[3]、車底部陰影[4]等來分割可能是車輛的區(qū)域——感興趣區(qū)域(region-of-interest, ROI); 前方車輛識別采用車體尾部紋理、車尾燈[3]、車牌、Haar 特征[5]+自適應提升(adaptive boosting, AdaBoost)、方向梯度直方圖(histogram of oriented gradient,HOG)特征[6]+ 支持向量機(support vector machine, SVM)等方法篩選出感興趣區(qū)域.
作為算法的前半部分, ROI 的產生對整個車輛檢測的準確率、誤檢率、速度都有較大影響. 由于車底部陰影特征明顯、計算量小、魯棒性強等優(yōu)點, 故ROI 產生的算法被廣泛使用.閆巧云[3]采用基于大津閾值Qtsu 方法來分割圖像, 以此產生ROI; Kanitkar 等[7]提出了一種基于累積密度方程(cumulative-density-function, CDF)的方法來產生ROI; 而Li 等[8]假設路面區(qū)域灰度值服從高斯分布, 取灰度直方圖積分的0.1 對應像素灰度值作為閾值分割點, 進而得到感興趣區(qū)域. 在這幾種方法中, 由于大津閾值計算量大、耗時長, 且對于灰度直方圖為多峰的情況處理效果差, 故其應用范圍有局限性; Kanitkar 等[7]和Li 等[8]雖然針對不同光照條件的適應性有所提高, 但是在復雜的行駛環(huán)境下ROI 產生的效率較低, 且漏檢率較高. 基于此,本工作從灰度值分割和區(qū)域分割2 個維度進行分析, 提出了一種基于人工神經網絡(artificial neural network, ANN)的閾值分割與分區(qū)域六角分割相結合的提取ROI 方法, 并在此基礎上結合類Haar 特征與改進的AdaBoost 分類器[9]識別算法對ROI 進行篩選, 從而得到前方車輛目標. 實驗結果表明, 對于分辨率為640×480 的視頻,系統(tǒng)的處理速度可達到81.3 幀/s, 錯誤率為3.8%, 為進一步的前方車輛檢測系統(tǒng)實用化打下基礎.
本工作提出的前方車輛檢測算法由4 個模塊組成:視頻輸入、前方車輛提取、前方車輛識別和視頻輸出, 其結構如圖1 所示. 前方車輛提取模塊將有可能是車輛的區(qū)域標記出來, 以減少目標驗證的計算量; 前方車輛識別模塊對ROI 進行篩選得到車輛目標.
圖1 算法結構Fig.1 Algorithm structure
前方車輛提取包括圖像預處理、ANN 灰度分割、分區(qū)域六角分割和ROI 篩選4 個子模塊, 其作用是將可能是車輛的區(qū)域從整個圖像中提取出來.
圖像的預處理是將視頻的幀畫面進行前期處理的過程, 包括頂部分割、灰度化、中值濾波3 個步驟. 對大量的視頻數(shù)據(jù)(包括平路、上坡、下坡、隧道、橋梁等)統(tǒng)計分析發(fā)現(xiàn), 車載相機捕獲到的圖像頂部為天空區(qū)域; 頂部分割將原圖像(見圖2)的上1/4 去除而把下3/4 作為處理對象(見圖3), 減少了不必要的運算而提高算法效率; 然后對分割后的圖像進行RGB 加權灰度化(見圖4), 其運算表達式為
式中, (i,j)為像素點的空間位置; F 為灰度化后的像素值; R, G, B 為3 個顏色通道的值; K1,K2, K3分別為3 個顏色的權重, 在這里分別取0.11, 0.59, 0.30. 最后用3×3 的模板對圖像進行中值濾波, 去掉隨機噪聲. 預處理結果如圖5 所示.
圖2 原圖Fig.2 Original image
圖3 頂部分割Fig.3 Top segmentation
圖4 灰度化Fig.4 Gray scale image
圖5 中值濾波Fig.5 Median filter
作為一個非常明顯的車輛特征, 車底部陰影在前方車輛檢測中得到了廣泛的應用, 其基本思路是通過尋找車底部陰影來定位車輛位置區(qū)域. 相比圖像中的其他部分, 車底部陰影像素灰度值較低, 可根據(jù)灰度值將車底部陰影與其他背景分割開來, 即灰度閾值分割(大于閾值為背景區(qū)域, 小于閾值為候選車底部陰影區(qū)域), 其中關鍵技術是灰度閾值的計算.
閆巧云[3]采用大津閾值來分離目標(車底部陰影)和背景(其他區(qū)域). 大津閾值是一種圖像處理中具有代表性的灰度閾值分割方法, 以概率論為理論基礎, 假設圖像中的目標和背景的像素灰度均服從正態(tài)分布:
式中, k 為常數(shù), m 為均值, s 為方差. 雖然在背景較為單一的情況下這種假設是可以滿足的,但是由于在實際車輛行駛環(huán)境中, 存在天空、路面、建筑物、路旁樹木等較復雜的多背景, 這種條件很難使整體背景的灰度直方圖為正態(tài)分布, 故其應用受到了限制.
Kanitkar 等[7]認為, 如果將車底部陰影與背景分割開來, 則不同的光照會對分割閾值產生影響, 因此分割的閾值應具有動態(tài)性. 本工作假設路面區(qū)域灰度統(tǒng)計直方圖服從高斯分布, 對歸一化后的直方圖進行積分得到累積分布函數(shù)(cumulative distribution function, CDF), 根據(jù)實驗經驗設CDF 的值為0.15~0.20. 這種方法能夠適應不同光照條件, 但是由于實際路面環(huán)境為動態(tài)的, 車輛數(shù)目會影響到車底部陰影像素和數(shù)目, 距離的遠近對車底部陰影的大小也有較大的影響, 因此靜態(tài)的像素數(shù)目積分的方法應用范圍受限. 同樣, Li 等[8]也提出類似的方法,對歸一化的灰度直方圖進行積分, 將積分值為0.10 處對應的灰度值作為閾值分割點.
本工作提出了一種基于人工神經網絡方法來分割目標和背景的方法. 首先, 假設圖像中存在一個目標區(qū)域及一個或多個背景區(qū)域; 其次, 目標區(qū)域和背景區(qū)域的灰度值都服從正態(tài)分布, 且目標區(qū)域與背景區(qū)域、背景區(qū)域之間的灰度值無重疊部分或者存在較小的重疊部分. 該灰度直方圖模型如圖6 所示.
圖6 多背景灰度直方圖模型Fig.6 Multi-background gray scale histogram model
圖7 實際灰度直方圖Fig.7 Actual gray scale histogram
在如圖7 所示的實際灰度直方圖中, 目標區(qū)域即為車底部陰影, 背景部分可能為綠化帶、道路、房屋建筑、車身等其他部分和天空區(qū)域等. 對實際灰度直方圖進行抽象可以得到如圖6所示的多背景灰度直方圖模型. 從模型中可以看出需要尋找的點即為O1, 本工作以此模型為基礎, 采用人工神經網絡來擬合O1點的灰度值.
人工神經網絡是20 世紀80 年代以來人工智能領域興起的研究熱點, 是從信息處理角度對若干生物神經網絡的基本特征進行抽象和模擬[10]. 一個經典的反向傳播(back propagation,BP)網絡結構如圖8 所示, 該結構包含輸入層、隱含層和輸出層, 其相鄰層之間的單元是全連接的. 圖8 中, X1, X2, ···, Xn為神經網絡的輸入值, Y 為神經網絡的輸出值, Wij和Wjk為神經網絡的權值. 應用該神經網絡的一個難點是必須找到合適的待分類數(shù)據(jù)的特征, 即輸入向量X1, X2, ···, Xn.
在如圖7 所示的多背景灰度直方圖模型的基礎上, 進一步對其進行離散化抽象, 得到如圖9 所示的歸一化離散點圖. 圖中橫軸方向灰度值為α, 范圍為0~255; 縱軸是灰度值對應像素數(shù)目與總像素數(shù)目比例β.
可以看出, 圖9 是對圖7 主要信息的抽取, 其峰值和谷值直接來源于圖7. 將得到的離散峰谷向量作為從灰度直方圖提取的特征輸入BP 神經網絡進行訓練, 其中每一個向量包含3 個數(shù)據(jù):灰度值α、像素比例β、像素比例β 對灰度值α的積分γ. 為了降低算法的漏檢率, 灰度分割閾值需要將圖像中的車底部陰影準確分割出來. 在實際情景中, 能滿足此條件的分割點是一個閾值范圍, 而人工神經網絡的輸出為一個固定的值而非閾值范圍. 為消除此不匹配且使算法具有較高的魯棒性, 將閾值范圍的中值作為BP 神經網絡的目標值Y.
為驗證所提出方法的準確性, 從隨機選取的294 張圖像中提取出10 組峰谷向量作為輸入X, 以及對應的閾值范圍中值作為目標Y. 訓練、確認和測試集分別占總樣本的50%, 25%,25%, 其中訓練集用于訓練神經網絡的參數(shù); 確認集測量網絡的生成, 觸發(fā)訓練終止; 測試集評價網絡的性能. 采用Matlab 訓練測試結果如圖10 所示.
圖8 BP人工神經網絡Fig.8 BP artificial neural network
圖9 歸一化離散點圖Fig.9 Normalized discrete point graph
圖10 ANN訓練測試結果Fig.10 Result of ANN training and test
從圖10 中可以看出, 橫軸為目標值與實際輸出值的差值, 縱軸為樣本數(shù)目. 訓練集的誤差成正態(tài)分布, 范圍為[?5, 6]; 而根據(jù)實際的灰度閾值分割經驗, 在誤差范圍為[?10, 10]內都能夠有效分割出所有感興趣區(qū)域, 故訓練集的輸出值Y 都能滿足誤差范圍. 測試集數(shù)據(jù)大致也呈正態(tài)分布, 但其離散程度更大, 不滿足誤差范圍的概率為8.3%.
表1 對比了大津閾值、CDF 和本工作的ANN 這3 種方法的性能, 其中對比的參數(shù)為誤差的最大值、最小值、范圍、均值和標準差. 從表1 中可以看出, ANN 的方法除誤差最小值低于大津閾值以外, 其他參數(shù)都要優(yōu)于另外2 種方法; 誤差均值和誤差標準差都小于大津閾值和CDF 的方法, 表明本方法的魯棒性更強, 能適應更復雜的背景環(huán)境.
表1 3 種方法比較Table1 Comparison of three methods
采用上述3 種方法, 對一幅灰度分割閾值范圍為[25, 45]的測試圖像進行閾值計算, 得到的結果分別為40(ANN)、65(大津閾值)和22(CDF). 可以看出, 采用ANN 的方法得到的結果更加接近閾值范圍的中值35. 用這3 個閾值對一幅圖像進行閾值分割和形態(tài)學處理的結果如圖11 所示. 從圖中可以看出, 當閾值越小時白色區(qū)域面積越小; 而閾值越大時, 白色區(qū)域面積越大.
圖11 3種方法閾值分割與形態(tài)學處理結果Fig.11 Processing results of segmented by threshold and morphology of three methods
圖12 給出了在不同閾值分割后提取ROI 的結果. ANN 閾值得到了10 個ROI, 其中包含4 個真車尾部; 大津閾值得到了16 個ROI. 而真車尾部只有3 個, 其中最右邊的車輛雖然有框選中此車輛, 但提取的部分為側視的整個車輛, 而整個車輛的特征與車尾部特征存在差異, 因此該ROI 也會在識別部分被過濾掉, 故此部分不能為真車尾部. CDF 閾值得到了13 個ROI,其中包含3 個真車尾部, 其中從左邊起第5 個紅色框只捕獲到部分車尾部, 而部分車尾部與整體車尾部特征存在較大差異, 此ROI 將會在識別部分被過濾掉, 故此部分的提取也是無效的.
從圖11 和12 分析可知, 當閾值取值較大時, 圖11 中的白色區(qū)域面積越大, 而白色區(qū)域面積越大會導致潛在的可能為ROI 的部分也就越多, 其結果是ROI 識別部分的計算量增大, 算法的效率降低. 當閾值較小時白色區(qū)域面積也越小, 同樣的可能為ROI 的部分也會一定程度地減少, 甚至剔除掉真車底部陰影, 結果使算法的漏檢率增大. 從圖12 可以看出, ANN 閾值的方法在不增加漏檢率的情況下, 能有效減少偽ROI, 提高算法的效率.
當路面行駛環(huán)境較為復雜時, 道路兩旁的樹陰等陰影區(qū)域會與車底部陰影形成粘連, 因此僅根據(jù)灰度閾值分割和形態(tài)操作很難準確地把所有的車底部陰影分割出來. 對如圖13 所示圖像(不含紅色矩形)進行灰度閾值分割和形態(tài)操作后的效果如圖14 所示.
圖12 3 種方法ROI 提取結果Fig.12 ROIs extracting results of three methods
圖13 基于灰度閾值42 提取ROIFig.13 ROIs extraction based on threshold 42 of grey
圖14 灰度閾值為42Fig.14 Threshold 42 of grey
圖14 對應的灰度閾值為42, 從圖中可以看出, 前方2 輛白色車輛的車底部陰影被有效分割出來, 而后面兩輛黑色車輛的車底部陰影與背景環(huán)境形成了粘連. 粘連會導致算法不能有效地提取到ROI, 即圖13 中紅色方框未有效提取到后面2 輛車. 針對此問題, 可以考慮用腐蝕或者開運算將粘連部分分割開來, 但是在某些情況下部分車輛的車底部陰影像素數(shù)目較少, 腐蝕或開運算會消除此部分陰影, 因此此形態(tài)學方法受到限制. 可以選擇的另一個辦法是通過降低灰度分割閾值來消除粘連(見圖15). 圖16 為分割閾值為18 時的提取效果.
圖15 基于灰度閾值18 提取ROIFig.15 ROIs extraction based on threshold 18 of grey
圖16 灰度閾值為18Fig.16 Threshold 18 of grey
從圖16 可以看出, 粘連已經被完全消除; 而從圖15 可以看出, 后面2 輛黑色車被有效提取出來. 但是此時也帶來一個新的問題, 即較遠地方的車底部陰影也會被除去, 由此可知一個單獨的灰度閾值不能同時將近處和遠處的車底部陰影分割出來.
為了應對這種情況, 本工作提出了一種分區(qū)域六角分割的方法(見圖17). 該方法的主要公式為
其中, 式(3)為開運算基本公式, 是用模板S 先對圖像A 先進行一次腐蝕運算Θ, 再進行一次膨脹運算⊕; 公式(4)和(5)分別為腐蝕運算和膨脹運算的部分公式. 本方法的分割思路是將可能會出現(xiàn)粘連的部分提取出來單獨進行形態(tài)學處理, 而其他部分保持不變. 具體處理過程如下:
(1) 提取灰度閾值分割圖像中的連通區(qū)域;
(2) 計算單連通區(qū)域的面積, 如果面積小于經驗值Area 則終止; 否則進入步驟(3);
(3) 將此連通區(qū)域映射到一幅空白圖像, 建立新圖像;
(4) 對新圖像進行六角開運算;
(5) 對六角開運算后的圖像進行連通區(qū)域提取;
(6) 刪除舊連通區(qū)域, 將新圖像中的連通區(qū)域映射到原圖.
對于步驟(2)中的Area 值的選擇可根據(jù)經驗給定, 一般而言Area 減小能降低算法的漏檢率, 但運算量會一定程度地增加; 反之運算量會減少, 而漏檢率增大. 本工作中Area 的值取為5 000, 選取的標準是在先保證復雜背景下較少的漏檢情況時Area 值盡量的小, 達到速度與漏檢率的平衡. 從圖14 可以看出, 粘連部分一般為矩形的角之間(左下角和右上角, 或者右下角和左上角)的重疊. 采用六角模板對此連接部分開運算能消除粘連, 且對其他部分影響較小,故步驟(4)選擇六角模板對連通域進行處理. 圖18 為采用分區(qū)域六角分割后的效果圖, 從圖17 可以看出無論是近處還是遠處的車輛都能被有效地提取出來.
圖17 基于分區(qū)域六角分割法提取ROIFig.17 ROIs extraction based on partition domain six angle division
圖18 分區(qū)域六角分割Fig.18 Partition domain six angle division
經過區(qū)域分割后的圖像能得到很多單連通區(qū)域, 但不是所有的單連通區(qū)域都是車底部陰影. 為了提高生成ROI 的準確率, 通過連通區(qū)域面積A、連通區(qū)域外接矩形從長度L 和寬度W、連通區(qū)域外接矩形寬長比θWL、連通區(qū)域與外接矩形面積比θA的閾值來篩選車底部陰影, 其中具體的閾值根據(jù)經驗獲得. 根據(jù)車底部陰影可獲得感興趣區(qū)域一車尾部圖像.
前方車輛識別由Haar 特征提取和AdaBoost 分類2 個模塊組成. Haar 特征由Haar 小波而得名, 其值由特征模板中白色矩形塊內像素和減去黑色塊得到[10]. 由于矩形Haar 特征模板對邊緣、線段有較好的檢測能力, 故本工作采用如圖19 所示的4 種特征模板來提取Haar特征.
AdaBoost 算法是一種自適應的Boost 算法[11], 其基本思路是先對一個訓練集迭代訓練出不同的弱分類器, 然后把這些弱分類器集合起來構造一個強分類器. 本工作采用一種改進的AdaBoost對由4 764 張ROI 圖像組成的樣本集進行訓練和測試[9], 其中訓練集為隨機選取的3 715 個樣本, 測試集為剩余1 049 個樣本. 在訓練過程中, 每增加一輪訓練, 弱分類器的個數(shù)增加一個. 本算法訓練、測試10 次的結果如圖20 所示.
圖19 基本的矩形Haar特征模板Fig.19 Basic rectangular Haar feature template
圖20 改進型Adaboost 訓練和測試Fig.20 Improved Adaboost training and test
從圖20 中可以看出, 訓練輪數(shù)為500, 即組成強分類器的弱分類器為500 個時, 測試錯誤率趨于穩(wěn)定, 平均錯誤率為3.8%. 完成訓練后, 生成的分類器參數(shù)將用于后續(xù)的識別過程.
為驗證本算法的有效性和可行性, 將其應用于前方車輛檢測系統(tǒng). 該系統(tǒng)運行處理器為Intel i3, 操作系統(tǒng)為Ubuntu 13.4; 采用Python+Opencv 的方案實現(xiàn)代碼, 此方案的優(yōu)點是便于后續(xù)嵌入式設備的移植, 且代碼運行效率和C++幾乎相同. 對分辨率為640×480 的視頻進行車輛檢測, 其平均運行速度為80 幀/s, 平均識別率達96.4%. 圖21 為在一個視頻檢測過程中所拍攝的一幅效果圖. 與文學志等[9]相比, 本工作提出的算法將運行速度由32 ms/幀提高到了12.5 ms/幀, 這主要是因為本工作提出的ROI 生成的方法更加高效, 減少了大量的偽ROI, 降低了ROI 驗證部分的計算量; 另外, 本算法的識別率要低于文獻[9]中的98.20%, 這是因為在對AdaBoost 進行訓練時, 本工作制作的樣本集的樣本數(shù)目為4 764 個, 低于文獻[9]中的17 467 個, 故AdaBoost 并未訓練到最優(yōu)參數(shù),分類器準確率有所下降.
本工作提出了一種基于人工神經網絡的方法來擬合閾值分割點, 提高了閾值分割的準確性和魯棒性, 減少偽ROI; 針對在復雜環(huán)境下車輛與背景粘連的問題, 提出一種分區(qū)域六角分割的方法, 降低了ROI 漏檢率. 最后對RIO 提取Haar 特征以及用優(yōu)化的AdaBoost 對ROI分類, 得到篩選后的車輛目標. 綜合實驗結果表明, 本工作算法魯棒性強, 而且識別效率更高,為進一步的前方車輛檢測系統(tǒng)實用化打下基礎.
圖21 視頻測試Fig.21 Video test