任夢茹,侯宏錄
(西安工業(yè)大學(xué) 光電工程學(xué)院,西安710021)
圖像采集與預(yù)處理系統(tǒng)是通過圖像傳感器獲取客觀世界的圖像信息,并對得到的圖像信息進行存儲和預(yù)處理的過程,被廣泛應(yīng)用于智能交通監(jiān)控領(lǐng)域。隨著道路車流量的不斷增加,傳統(tǒng)的單目圖像采集在對多目標車輛識別時,很難獲取多個目標之間的位置信息。而雙目圖像采集可以基于視差的原理獲取目標的三維信息,為進一步研究多目標車輛識別提供基礎(chǔ)平臺[1]。目前,圖像采集硬件平臺主要有ASIC,ARM,F(xiàn)PGA 和DSP。FPGA 具有體積小、并行處理等特點,其設(shè)計的實時性、靈活性也遠高于其它平臺,使其在圖像處理領(lǐng)域中應(yīng)用廣泛。
圖像預(yù)處理是圖像處理技術(shù)的基礎(chǔ)環(huán)節(jié)。中值濾波作為一種常用的圖像預(yù)處理方法,能夠有效地濾除噪聲干擾,保留圖像的邊緣信息。而傳統(tǒng)的中值濾波算法處理速度慢, 無法滿足系統(tǒng)實時性要求。故在此以傳統(tǒng)中值濾波為基礎(chǔ)提出一種并行中值濾波算法,相比于傳統(tǒng)的濾波算法,其運算量減小了近1/2。
基于FPGA 的實時雙目圖像采集與預(yù)處理系統(tǒng)主要包括圖像采集、存儲、預(yù)處理和顯示等模塊,實現(xiàn)圖像數(shù)據(jù)的實時采集顯示與預(yù)處理。系統(tǒng)總體結(jié)構(gòu)如圖1所示。

圖1 系統(tǒng)總體結(jié)構(gòu)Fig.1 Overall structure of the system
系統(tǒng)上電后, 通過I2C 總線配置OV5640 圖像傳感器的寄存器。由圖像采集模塊實時獲取圖像傳感器采集到圖像的幀行信號、10 bit 圖像數(shù)據(jù)和像素時鐘,將圖像數(shù)據(jù)轉(zhuǎn)換成RGB 模式輸出。由于相機時鐘為50 MHz,DDR3 工作時鐘為100 MHz,需要讀寫FIFO 完成跨時鐘域操作。將采集的2 路圖像數(shù)據(jù)緩存在2 個寫FIFO 中, 在寫仲裁模塊采用輪詢的方式選擇一路圖像數(shù)據(jù),再通過AXI 總線控制,利用MIG 核對片外存儲芯片DDR3 進行讀寫操作。同樣,在讀仲裁模塊采用輪詢的方式讀取一路圖像數(shù)據(jù), 將讀取的圖像數(shù)據(jù)經(jīng)過讀FIFO 緩存送入濾波模塊進行降噪處理。最后通過顯示模塊,在HDMI 顯示屏上實時顯示2 幀分辨率為1920×1080,幀頻為30 f/s 的圖像。
該系統(tǒng)選用2 個CMOS OV5640 圖像傳感器來完成雙目圖像的采集。FPGA 芯片通過I2C 總線對OV5640 進行參數(shù)配置, 配置攝像頭的分辨率為1920×1080, 輸出數(shù)據(jù)格式為RGB, 幀頻為30 f/s。CMOS OV5640 與FPGA 芯片連接如圖2所示,F(xiàn)P GA 芯片通過I2C 總線的時鐘線scl、 數(shù)據(jù)線sda,配置圖像傳感器的內(nèi)部寄存器[2]。
當scl 為高電平,sda 從高到低時, 開始傳輸數(shù)據(jù);scl 為高電平,sda 從低到高時, 停止傳輸數(shù)據(jù)。RGB565 格式是{R[4:0],G[5:0],B[4:0]},圖像傳感器先輸出高8 bit 數(shù)據(jù),再輸出低8 bit 數(shù)據(jù),將2個8 bit 數(shù)據(jù)進行拼位操作,即可得到16 bit 的RGB數(shù)據(jù)。輸出RGB 數(shù)據(jù)仿真如圖3所示, 在50 MHz的時鐘下,1 個時鐘周期輸入1 個8 bit 數(shù)據(jù), 經(jīng)過拼位操作后, 每間隔1 個時鐘周期輸出1 個16 bit數(shù)據(jù),從而完成RGB 數(shù)據(jù)的輸出。

圖3 輸出RGB 數(shù)據(jù)仿真Fig.3 Output RGB data simulation
緩存模塊由AXI 接口控制、讀寫FIFO 控制、讀寫仲裁、MIG 核、DDR3 SDRAM 等模塊構(gòu)成。DDR3 SDRAM 控制器采用XilinxMIG 核[3-4]來設(shè)計,通過AXI 總線對DDR3 執(zhí)行讀寫操作。AXI 總線對DDR3 執(zhí)行寫、讀操作的狀態(tài)機設(shè)計如圖4所示。
圖中, 在寫初始狀態(tài)接收到寫突發(fā)請求信號,進入寫等待狀態(tài), 等待寫FIFO 滿足一次突發(fā)的條件后進入寫地址狀態(tài),通過寫地址通道寫入突發(fā)地址和突發(fā)長度。在寫數(shù)據(jù)等待狀態(tài),等待寫地址通道的READY 信號, 產(chǎn)生寫數(shù)據(jù)通道的VALID 信號,進入寫數(shù)據(jù)狀態(tài),通過寫數(shù)據(jù)通道往DDR3 中寫完一包數(shù)據(jù),進入寫反饋狀態(tài),等待寫反饋通道的VALID 信號,再進入寫突發(fā)完成狀態(tài),表示一次寫突發(fā)數(shù)據(jù)完成,回到初始狀態(tài),等待下一包數(shù)據(jù)突發(fā)請求信號。

圖4 DDR3 寫操作和讀操作狀態(tài)機的設(shè)計Fig.4 Design of DDR3 write and read operation state machine
AXI 總線對DDR3 執(zhí)行讀操作的過程與寫操作類似,通過讀地址和讀數(shù)據(jù)通道完成DDR3 的讀操作。
該系統(tǒng)中突發(fā)數(shù)據(jù)以包的形式傳輸,數(shù)據(jù)位寬64 bit,突發(fā)長度64,故一包可傳輸?shù)臄?shù)據(jù)為64×64 bit=4 kbit。由于圖像采集的時鐘頻率與DDR3 提供的時鐘頻率不同, 故調(diào)用2 個FIFO 核來解決跨時鐘域問題。采集到的2 路圖像數(shù)據(jù)分別存入寫FIFO中等待,當有寫突發(fā)數(shù)據(jù)請求時且滿足突發(fā)條件則產(chǎn)生一次寫突發(fā),對2 路圖像數(shù)據(jù)采用輪詢的方式進行選擇,通過AXI 總線完成寫操作。當有讀突發(fā)數(shù)據(jù)請求時且寫入DDR3 中的數(shù)據(jù)達到4 kbit 時,就發(fā)生一次讀突發(fā),采用輪詢方式,通過AXI 總線完成讀操作。
為提高圖像數(shù)據(jù)緩存效率,將DDR3 存儲空間128 Mbit 分為4 個bank,每個bank 存儲1 幀圖像。采用乒乓操作,其操作框架如圖5所示,圖像數(shù)據(jù)寫入bank0 時,讀取bank3 數(shù)據(jù),bank0 寫完第1 幀圖像后,讀取bank0 同時往bank1 寫入第2 幀數(shù)據(jù),依次按順序讀寫,提高緩存效率。

圖5 DDR3 SDRAM 兵乓操作框架Fig.5 Operation frame of DDR3 SDRAM label
中值濾波是基于排序統(tǒng)計理論的一種能有效抑制噪聲的非線性信號處理技術(shù)。通常采用濾波模板的方法,對模板內(nèi)的像素按照像素值的大小進行全排序,找到模板內(nèi)像素的中間值,其輸出為

式中:f(x,y)為原始的圖像;g(x,y)為濾波處理后的圖像;W 為二維模板。
對于系統(tǒng)中分辨率為1920×1080 的RGB 圖像,采用傳統(tǒng)中值濾波,在3×3 濾波窗口中對每一像素的R,G,B 各通道濾波取中值來替代每一像素的RGB 值,對每個通道像素點及其鄰域取中值需要有36 次的排序運算,因此運算量大,耗時長,難以實現(xiàn)圖像的實時處理。故在此提出一種并行中值濾波算法,采用并行處理和流水線操作,以最快的速度找出中值,滿足系統(tǒng)實時處理的要求[5-6]。以一個通道的3×3 濾波窗口為例,求取中間值的流水線操作,如圖6所示。

圖6 求取中間值的流水線操作Fig.6 Pipelining operation for intermediate value
步聚1在第1 級流水線上,采用并行處理,對模板內(nèi)每一行的像素值由大到小進行排序,同時得到每行的最大值、 中間值和最小值。該操作需要9次比較。
步聚2在第2 級流水線上, 將上級得到的最大像素值、 中間像素值和最小像素值再次進行排序,同時得到最大像素中的最小值、中間像素中的中間值, 以及最小像素中的最大值。該操作需要9次比較。
步聚3在第3 級流水線上, 將上級輸出的3個像素再次進行排序, 獲得中間值。該操作需要3次比較。
所提出的并行中值濾波算法僅需要調(diào)用7 次三值比較器,共進行21 次排序運算,相比傳統(tǒng)中值濾波算法的36 次排序減小了近1/2 的計算量,從而提高數(shù)據(jù)處理速度,滿足系統(tǒng)實時性要求。
并行中值濾波算法根據(jù)功能劃分為3 個模塊,緩存模塊、寄存器陣列模塊和排序輸出模塊。其結(jié)構(gòu)框圖如圖7所示。

圖7 并行中值濾波結(jié)構(gòu)框圖Fig.7 Structure block diagram of parallel median filter
緩存模塊中設(shè)置3 個FIFO,寬度為64 bit,每個FIFO 緩存一行圖像。從DDR3 中讀出的數(shù)據(jù)固定寫入FIFO1, 寫滿后將其寫入FIFO2。當FIFO2 寫滿后,再將其寫入FIFO3 同時將FIFO1 中的數(shù)據(jù)寫入FIFO2, 即可使3 行圖像數(shù)據(jù)緩存在3 個FIFO 中。將緩存的3 行數(shù)據(jù)同時送入寄存器模板陣列,生成R,G,B 各通道的3×3 濾波模板。通過排序輸出模塊,對R,G,B3 個濾波模板中像素值進行排序,最后輸出該像素的中間值。以G 分量通道為例,其并行中值濾波仿真如圖8所示。

圖8 G 分量通道并行中值濾波仿真Fig.8 Simulation of G-component channel parallel median filter
圖中,pix_fval,pix_lval 為圖像的幀行同步信號,F(xiàn)IFO 中緩存的3 行數(shù)據(jù)經(jīng)過3 個時鐘周期的延遲,即可得到G 通道的3×3 濾波模板data_p1…data_p9。在生成的模板上執(zhí)行像素排序流水線操作,每完成一級流水線操作需要1 個時鐘周期,3 個時鐘周期即可輸出中值。
采用Verilog HDL 語言[7]編寫各子模塊程序后,基于XILINX Artix-7 系列XC7A100TFGG484-2 芯片及其軟件開發(fā)平臺Vivado 和仿真工具Questa Sim,對系統(tǒng)進行試驗驗證。
實時雙目圖像采集與顯示試驗如圖9所示。系統(tǒng)上電,圖像傳感器采集圖像信息,通過HDMI 實時顯示。試驗結(jié)果表明,該雙目圖像采集系統(tǒng)能實時采集圖像并顯示,為后續(xù)獲取目標三維信息提供基礎(chǔ)平臺。

圖9 實時雙目圖像采集與顯示試驗Fig.9 Real-time binocular image acquisition and display experiment
為了更直觀地測試該算法在FPGA 上實現(xiàn)的效果,利用MatLab 與Questa Sim 聯(lián)合仿真,對一幅分辨率為256×256 的彩色圖像進行軟硬件仿真對比。并行中值濾波算法處理試驗的仿真結(jié)果對比如圖10 所示。

圖10 并行中值濾波算法處理試驗Fig.10 Parallel median filtering algorithm processing experiment
試驗結(jié)果表明,采用軟、硬件方法實現(xiàn)的并行中值濾波效果基本一致,對椒鹽噪聲均有顯著的濾波效果。然而,在2.20 GHz 的計算機上MatLab 軟件實現(xiàn)中值濾波需要185 ms;用Artix-7FPGA 硬件實現(xiàn)的并行中值濾波算法,工作在50 MHz 時鐘頻率下僅需1.377 ms。耗時對比表明,本文設(shè)計的硬件系統(tǒng)處理速度遠快于軟件處理,滿足系統(tǒng)實時性要求。
所提出的實時雙目圖像采集與處理系統(tǒng)充分發(fā)揮了FPGA 的并行高速處理,以及DDR3 SDRAM大容量高速率存儲等特點,相比于軟件處理,其處理速度明顯提高。同時,實現(xiàn)了一種并行中值濾波算法,相比于傳統(tǒng)的中值濾波算法,運算量減少了約1/2, 有效地解決了實時動態(tài)圖像噪聲干擾的問題。通過試驗證明,該系統(tǒng)可實現(xiàn)實時雙目圖像采集、存儲、預(yù)處理及顯示等功能,為進一步實現(xiàn)智能交通監(jiān)控系統(tǒng)中多目標車輛識別、 跟蹤等算法,奠定堅實的基礎(chǔ)。