【摘要】在行車過程中,控制好本車與前方車輛的距離是一個重要課題,車距太大影響交通流量,車距太小不利安全。結合FPGA的特點,通過選擇和改進圖像處理算法,設計了一款基于動態圖像識別的高速公路車輛檢測系統。系統使用了一種快速中值濾波算法;通過提取路面數據,再在圖中排除與路面數據相似的圖像數據實現二值圖片;利用Sobel算子對圖像進行邊緣增強處理;采用一種快速Hough變換實現道路的檢測。經過模擬測試,系統功能與反應速度都達到了預期效果。
【關鍵詞】FPGASobel邊緣增強快速Hough變換道路識別
一、引言
隨著經濟的不斷發展,人民生活水平的不斷提高,汽車漸漸成為了人們的生活中所必需的交通工具。目前,全球汽車保有量約10億,而且這個數據還在不斷增加。如此龐大的汽車數量也使得交通事故頻繁發生。據世界衛生組織統計,每年世界有120萬人死在道路上,2000萬到5000萬人遭受非致命傷害[1]。
據統計,汽車駕駛員只要在有碰撞危險的0.5秒前得到預警,就可以避免至少60%的追尾撞車事故、30%的迎面撞車事故和50%的路面相關事故,若有1秒鐘的“預警”時間,則可避免90%的事故[2]。而為了彌補駕駛員感官能力的不足,幫助駕駛員避免可能產生的交通事故,提高車輛行駛的安全性。本文開發了一款基于FPGA的車輛檢測系統,它通過攝像頭對汽車前方的道路情況進行檢測,識別車道和前方車輛,當檢測到與前方車輛有異常動作,包括車距與運動方向的快速變化,達到危險閾值時,進行預警,提醒駕駛員注意可能存在危險情況。
二、系統設計
2.1系統總體結構設計
FPGA內部由幾大功能模塊組成[3],如圖1所示。
采集模塊負責配置解碼芯片并將采集的數據存儲于緩存中,因為本系統只需要灰度數據,因此在數據采集的時候,只采集YCrCb中的Y值即可;有效區域確定模塊負責屏蔽掉無效區域以節省處理時間;中值濾波模塊負責圖像的平滑處理;路面數據提取與二值化模塊負責統計路面數據信息并以此為依據進行二值化處理;sobel邊緣檢測模塊負責將二值化后的圖像邊緣顯現出來;車輛檢測模塊負責車道檢測與車輛檢測;數據處理與報警模塊負責確定是否報警并發出報警信號。
2.2圖像處理功能實現
這些功能模塊用硬件描述語言在FPGA內得以實現。
2.2.1中值濾波模塊
中值濾波的思想是將像素鄰域內灰度的中值代替該像素的值。這個中值的實現方法有很多種,本系統中選用一種三級排序[4][5]的方法,共使用七個排序器。其實現過程如下:濾波窗口選用的是一3*3矩陣如圖2(a)所示;先對其每一行進行排序,得到每行的序列為從左到右依次從大到小如圖2(b)所示;如圖2(c)所示;最后將圖2(c)的amax_min、amid_mid、amin_max進行排序,所得到的中間值即為矩陣中九個數據的中間值。
2.2.2路面數據提取與二值化模塊
本模塊分為路面數據提取、二值化兩部分。
路面數據提取是對路面數據進行采樣,計算出路面數據的平均值和方差。取路面樣本的方法主要是在圖片中取出七個64*32的小矩形。計算每一個矩形的灰度平均值和灰度方差,去掉一個最大值和一個最小值,再計算剩下的五個的灰度值的平均值m和方差δ的平均值,如圖3。
(1)Hough變換。因為Hough變換查找左、右車道的方法類似,所以本文以左車道為例進行說明。為了適用FPGA的實現和提高效率,本系統選用一種快速的Hough變換實現方法[7][8]。在數據處理前,先進行濾波處理,減少一些不必要的干擾數據,再把數據輸入到一多步長偽隨機特征點生成器,由其抽取隨機點數據。再利用Hough變換公式進行計算,得到參數,進行二次統計得到一組極大值,即為當前的車道線。(2)車道外干擾線濾波。在經過Hough變換得到車道線的直線數據后,再利用此車道線,進行排除車道外的數據,即清零兩車道線外的數據。(3)車道陰影查找。經清零車道線外數據后的圖像,只剩下當前車道的數據。統計每一行的連續數據點的個數,即為每行橫線和長度,將它與當行車道線的寬度進行比較,大于1/3則保留。(4)車輛確認。在得到的N條可能為當前汽車障礙物的橫線后,以此線寬為高確定一小區域。統計這小區域內垂直方向的像素和,得到一個數列。若能在左右兩邊找到兩個大于高度的2/3的值,并兩值相差不大,則認為此小區域內為一汽車。
因此,對于一款攝像頭,按水平方面安裝,我們只需要測量其盲區(上圖BC‘)的長度取可知道圖中任意行映射到地面時,此點到攝像頭的水平距離。
而對于同一行的圖像數據,其每一點像素點換算成實際距離受到攝像頭本身視覺廣度的影響,測量攝像頭視覺廣度可以讀取攝像頭參數,也可以用以下方法進行計算,圖7為攝像頭頂視光結構示意圖。找一墻壁,讓攝像頭正對著墻壁,記錄墻壁在圖像中的兩邊緣A、B,同時測量攝像頭到墻壁的距離l和AB的長度H。此時,對于已知與圖像中某一行所對應的地面距離攝像頭的距離為l‘,則設此一行的圖像數據的對應的實際寬度為H’。
前車異常檢測分為車距驟變的檢測,以及前車左右搖擺的檢測。
車距驟變的檢測可以根據公式(5)計算出來的距離,對本幀前車的車距數據與上一幀的車距數據進行比較,并與一閾值α作比較,如果小于閾值則忽略,如果大于則發出報警信號。
前車搖擺的檢測,比較本幀車輛輪廓左側線與車陰影線相交的點所在的位置相距多少像素,再利用公式(6)計算出每個像素點所代表的實際距離的值,并與一閾值β作比較,如果小于閾值則忽略,如果大于則發出報警信號。
2.2.5數據處理與報警模塊
在查找到車輛后,確定車輛的位置,查表得到當前車輛與本車的距離,若此距離小于某一個閾值,則輸出報警信號-LED閃爍、蜂鳴器發出報警聲響。
三、結論
本文設計研制的基于FPGA的高速公路前方車輛檢測系統,通過攝像頭采集前方路況數據,將圖像數據傳送到FPGA進行數據處理,從而分析當前車道與前方車輛的位置及運動情況,對可能發生的危險情況發出警告信號,提醒司機注意行車安全。整個系統的設計,充分利用FPGA的資源,改進了數據處理算法,達到了提高效率和處理精度這兩個目標。
系統設計實現后,通過預先采集高速公路行車數據,在實驗室進行測試,結果表明在車道線較明顯且直路正常行駛過程,報警有很高的準確性。后續的工作可以在現有的系統基礎上,進一步完成圖像處理能力以及添加道路預測模塊,使系統在道路車道不明顯的路面也能正常檢測報警。
參考文獻
[1] World Health Organization. Global status report on road safety: time for action. [EB/OL] 2009. www.who.int/violence_injury_prevention/road_safety_status/2009.
[2]胡海峰,史忠科,徐德文.智能汽車發展研究[J].計算機應用研究,2004(6):20-23
[3]田浩,葛透慧,王頂. Tinku Acharya,Ajoy K. Ray.數字圖像處理原理與應用[M].北京:清華大學出版社,2007
[4]徐大鵬,李從善.基于FPGA的數字圖像中值濾波器設計[J].電子器件. 2006,29(4):1114-1117
[5]沈德海,劉大成,邢濤.一種縱橫窗口關聯的多級中值濾波算法[J].計算機科學. 2012,39(5):246-248
[6] Li Xue,ZhaoRongchun,Wang Qing. FPGA BASED SOBEL ALGORITHM AS VEHICLE EDGE DETECTOR IN VCAS [C]. Neural Networks Signal Processing. Nanjing, China. 2003
[7]商爾科,李健,安向京.一種面向FPGA的快速Hough變換[J].計算機工程與應用. 2010,46(7):72-75
[8]商爾科,李健,安向京.基于FPGA的實時Hough變換[J].計算機工程. 2010,33(16):161-163