王泓淇, 陳守滿, 文雅宏, 周超凡, 趙東勃
(安康學院,電子與信息工程學院, 陜西,安康 725000)
伴隨著智慧城市的快速建設和發(fā)展,高速公路和高鐵的數(shù)量急劇增加,普通現(xiàn)場勘查的交通管理方式已不能滿足客觀要求[1-2]。智能化的交通系統(tǒng)正逐步成為解決交通管理問題的重要技術手段,也是我國“十四五”交通重點建設項目。與此同時,西成高鐵和高速陜西段可稱為中國“最穿越”的路段,它將穿越由20條隧道組成的134公里長的秦嶺隧道群[3-4],隧道中車流量較大,行人、施工車和牲畜都會對行車造成一定影響,交通監(jiān)控技術的發(fā)展顯得尤為重要[5]。
由于隧道本身具有半封閉性、通達性低、情況不清等特點,秦嶺隧道路段較多,隧道內(nèi)外的光線過渡頻繁,駕駛員相繼經(jīng)歷“黑洞效應”和“白洞效應”的情況,其會導致交通事故頻發(fā)[6-7]。并且在轉(zhuǎn)彎口、盲區(qū)等特殊區(qū)域也存在安全問題。因此,行車的檢測對智能交通監(jiān)控有著很大的現(xiàn)實意義。
基于以上的原因,本文提出了一種智能行車檢測系統(tǒng),利用FPGA并行計算效率高,硬件成本低的特點[8],實現(xiàn)對前方道路進行實時監(jiān)測,出現(xiàn)突發(fā)情況時,系統(tǒng)發(fā)出預警信息,極大地降低事故發(fā)生概率,確保了人民群眾的生命財產(chǎn)安全。該系統(tǒng)將會給智慧交通智能化管理提供很強的實用價值和現(xiàn)實意義。
基于以FPGA為核心的行車檢測系統(tǒng)的基本要求,采用FPGA設計中自頂向下的設計思想,將該系統(tǒng)大致分為四大模塊:CMOS視頻圖像采集模塊、SDRAM存儲器模塊、FPGA圖像處理模塊以及VGA顯示模塊。首先對OV7725的相關寄存器進行配置,實現(xiàn)圖像采集,視頻圖像數(shù)據(jù)在圖像預處理模塊進行灰度化、中值濾波和Sobel邊緣檢測,之后通過SDRAM將數(shù)據(jù)進行緩存,并讀取相鄰兩幀進行幀間差分,以并行方式將一幀圖像數(shù)據(jù)進行腐蝕和膨脹處理[9-10],最后在VGA顯示器上實時顯示。整體的系統(tǒng)框架圖如圖1所示。

圖1 行車檢測系統(tǒng)框圖
本文主要利用OV7725攝像頭實現(xiàn)視頻圖像采集功能,其主要由I2C寄存器配置和驅(qū)動模塊、CMOS圖像采集模塊構成。I2C配置和驅(qū)動模塊主要是利用I2C的相關接口協(xié)議來配置OV7725傳感器的內(nèi)部寄存器,完成OV7725的初始化操作。CMOS圖像采集模塊的作用是接收和捕獲來自OV7725的視頻圖像信號,完成行幀同步和16位圖像數(shù)據(jù)的拼接。
根據(jù)手冊的要求,在完成OV7725的SCCB配置之后,需要延時10幀,這樣OV7725才能處于穩(wěn)定狀態(tài)。
1.3.1 圖像灰度化處理
對于本設計來說,彩色視頻圖像序列數(shù)據(jù)量大,對圖像進行灰度化可以減少圖像數(shù)據(jù)量。通過CMOS攝像頭寄存器的配置,采集RGB565格式的圖像數(shù)據(jù),通過高位補低位的方式將RGB565轉(zhuǎn)化為RGB888,然后根據(jù)圖像灰度轉(zhuǎn)換公式將其轉(zhuǎn)換成YCbCr格式[11],如式(1):
Y=0.299R+0.587G+0.114B
(1)
其中,Y表示亮度,也就是灰度,R、G、B分別表示紅色色度分量、綠色色度分量、藍色色度分量。
通過乘積、求和和移位三級流水線運算方式,可以提高其系統(tǒng)的運算速度。
1.3.2 中值濾波模塊
中值濾波能夠較好地濾除脈沖中的噪聲,同時也保護了信號的邊緣,使其不模糊。本設計選擇3*3區(qū)域?qū)D像進行處理,其計算方法是將3*3矩陣的每一行從大到小排序,然后用排序法求出最大組的最小值,中間組的中間值和最小組的最大值,最后對求出的3個值進行排序,這3個值的中間值就是此矩陣的中間值[12]。排序算法的思想如圖2:

圖2 中值濾波排序圖
中間位置的圖像數(shù)據(jù)表達式如式(2):
f(x,y)=med{f(x±k,Y±Z),(K≤(N-1)/2,
Z≤(N-1)/2)}
(2)
其中,f(x,y)表示處理后圖像,K、Z表示二維模板(區(qū)域)。
由于灰度圖像原始的邊緣屬于梯度區(qū)域,所以特征信息不夠明顯。Sobel邊緣檢測算法的作用濾掉大量的無效信息,從而減少目標檢測過程中帶來的干擾。
本設計中采用Shift_RAM IP核實現(xiàn)3*3矩陣,其與Sobel算子卷積得到目標像素的梯度值。最后,設置閾值條件,當像素梯度值小于閾值時,輸出為0,當其大于閾值時,輸出為1。Sobel卷積算子如圖3所示。
此灰度圖像包含2組3*3矩陣,分別是橫向和縱向的。橫向和縱向亮度差分的近似值是由圖像進行二維卷積得到的。其表達式如式(3):
(3)
其中,A為原始灰度圖像,Gx和Gy為通過橫向邊緣檢測和縱向邊緣檢測的圖像灰度值。
圖像的灰度值可通過式(4)來獲得,以此獲得該方向上像素點的灰度值,G為圖像梯度。
(4)
為了提高魯棒性,可以使用無平方根的近似值,其表達式如式(5):
|G|=|Gx|+|Gy|
(5)
視頻圖像數(shù)據(jù)經(jīng)過CMOS采集模塊和圖像處理模塊后,需要進行緩存才能進行后續(xù)算法處理。對于一幀分辨率為640*480的灰度圖像,需要2.34 Mbit(640*480*8 bit)的大小,F(xiàn)PGA內(nèi)部的RAM空間不能容納大容量的數(shù)據(jù),因此需要大容量、高速的外部SDRAM存儲器來實現(xiàn)圖像存儲。
對于OV7725來說,其輸出像素時鐘頻率為24 MHz,經(jīng)過圖像采集模塊后,時鐘頻率變?yōu)?2 MHz。然而,VGA顯示分辨率為640*480的圖像時,驅(qū)動時鐘是25 MHz。因此,需要對其調(diào)用IP核中的fifo模塊,用來解決傳輸時鐘不同步和數(shù)據(jù)不能交互的問題。
幀差分法主要通過對圖像序列2個或者3個相鄰幀進行差分運算來實現(xiàn)的。在本設計中,選擇此方法是因為其鄰接兩幀間的間隔極短,可以將前一幀圖像作為當前幀的背景模型,這樣可以使其具有較好的實時性,并且具有更新速度較快,算法簡單,計算量不大的特點。
利用如下表達式即可實現(xiàn)幀差分,其具體表達式為
(6)
其中,x1和x2為當前幀和上一幀在同一位置坐標的像素點灰色值,T為預設的參考分割閾值。
此模塊主要利用形態(tài)學圖像處理中開運算(先腐蝕后膨脹)的方法消除異常的噪聲點和填充邊緣存在的空洞問題,從而能夠得到較為清晰的目標輪廓。其腐蝕和膨脹的具體表達式如下。
(1) 腐蝕運算
腐蝕運算可以將目標區(qū)域范圍變小,尋找局部的極小值區(qū)域,消除圖像中孤立的異常噪聲點,使其目標圖像的邊界向內(nèi)部收縮。其結果可以表示為
A?B=(x:Bx?A)
(7)
其中,A為二值化后的像素集合,B為腐蝕的結構元素。
(2) 膨脹運算
膨脹運算是腐蝕運算的對偶算法,它可以將目標區(qū)域范圍變大,尋找局部的極大值區(qū)域,使其目標圖像的邊界向外部擴張,用來填補幀差分留下的空洞。膨脹結果可以表示為
(8)
其中,A為二值化后的像素集合,B為膨脹的結構元素。
本設計的顯示模塊采用IBM公司1987年提出的標準VGA接口,支持RGB和YCbCr兩種圖像格式。由于VGA標準接口只能接收模擬信號,因此該系統(tǒng)需要利用GM7123芯片將信號進行模數(shù)轉(zhuǎn)換。
此系統(tǒng)采用的圖像分辨率為640*480,幀率為60 Hz,驅(qū)動時鐘為25 MHz,可以通過PLL IP核對系統(tǒng)時鐘進行分頻得到。
對于圖像采集模塊來說,編寫Testbench仿真程序,在modelsim軟件上對其模塊進行仿真驗證。為了較好地觀察仿真結果和分析,在圖像采集的仿真中將有效像素設置成12行8列。圖4為CMOS圖像采集模塊局部放大圖。

圖4 CMOS圖像采集模塊仿真局部放大圖
從仿真波形圖4可知,當cam_href為低電平時,cam_data的數(shù)據(jù)不變,coms_frame_data沒有輸出有效數(shù)據(jù);當cam_href為高電平時,coms_frame_vaild信號開始周期性變化,cam_data開始輸入有效值,經(jīng)過2個時鐘周期,coms_frame_data開始輸出有效數(shù)據(jù),每行2個cmos_data的8位數(shù)據(jù)在cmos_frame_data中轉(zhuǎn)換成為16位數(shù)據(jù),完成RGB565格式的數(shù)據(jù)拼接,圖像采集模塊成功實現(xiàn)。
對于灰色圖像中值濾波模塊來說,編寫Testbench仿真程序,在modelsim軟件上對其模塊進行仿真驗證。為了較好的觀察仿真結果和分析,在灰色圖像中值濾波的仿真中將有效像素設置成12行8列。圖5為灰色中值濾波局部放大圖。

圖5 灰色中值濾波仿真局部放大圖
從仿真波形圖5可知,將第一行、第二行、第三行的數(shù)據(jù)分別設置為:33,97,161;35,99,163;37,101,165。在一個時鐘周期之后,對每行數(shù)據(jù)的大小進行排列,求出中值分別為97、99、101。由此表明,灰色圖像中值濾波算法正確。
對于Sobel邊緣檢測模塊來說,編寫Testbench仿真程序,在modelsim軟件上對其進行仿真驗證。為了較好地觀察仿真結果和分析,在Sobel邊緣檢測的仿真中將有效像素設置成12行8列。圖6為Sobel邊緣檢測局部放大圖。

圖6 Sobel邊緣檢測仿真局部放大圖
從仿真波形圖6可以看出,將第一行、第二行、第三行的數(shù)據(jù)分別設置為:173,237,45;175,239,47;177,241,49。本設計將閾值Sobel_Threshold設置為250,其在一個時鐘周期后得到Gx_tmp1、Gx_tmp2、Gy_tmp1、Gy_tmp2的值,再經(jīng)過一個時鐘周期得到Gx_data、Gy_data的值,時鐘第三個上升沿到來時得到了Dim(即為Gxy)的值為512。與預設的閾值250進行比較,最后得到post_img_bit為1,此結果與實際值相一致。由此表明,Sobel邊緣檢測算法是正確的。
本設計模擬驗證將通過電腦播放行車視頻以達到模擬效果。其監(jiān)測到的視頻結果和處理過后的行車視頻圖像如圖7、圖8所示。

(a)

(b)圖7 處理前的行車視頻圖像

(a)

(b)圖8 處理后行車視頻圖像
從圖8中可知,經(jīng)過行車檢測系統(tǒng)處理后的結果可以較好地驗證行車檢測功能的實現(xiàn)。
通過綜合編譯后,將工程下載至開發(fā)板,利用攝像頭對學校門前的行車進行白天和夜晚實時監(jiān)測,其監(jiān)測到的和處理后的行車圖像如圖9~圖12所示。

(a)

(b)圖9 白天行車抓拍圖像

(a)

(b)圖10 白天行車檢測系統(tǒng)處理后的行車圖像

(a)

(b)圖11 夜晚行車抓拍圖像

(a)

(b)圖12 夜晚行車檢測系統(tǒng)處理后的行車圖像
從圖10和圖12中可知,行車檢測系統(tǒng)在白天和夜晚均可實現(xiàn)檢測功能。但由于攝像頭像素較低以及天氣的影響,導致檢測圖像模糊,但總體實現(xiàn)了行車檢測功能。
通過測試得知,由于雨天地面有積水,圖像經(jīng)系統(tǒng)處理后,會出現(xiàn)鏡像圖像(圖12(b));在霧天,由于攝像頭像素較低,會降低原始圖像的清晰度,從而導致檢測圖像的重影(圖10);夜晚由于攝像頭像素以及車燈影響,導致檢測車輛的部分信息丟失(圖12(a))。
本文主要設計了一種以FPGA為核心的行車檢測系統(tǒng),利用FPGA并行結構的特點,提高了計算速度,結合邊緣檢測和幀差分圖像處理方式,在VGA上能夠?qū)崿F(xiàn)行車的檢測。該系統(tǒng)有較好的實用性,可以很好地應用在目標檢測、智能視頻監(jiān)控領域,為各種復雜環(huán)境下的行車安全帶來較好的保障。