任夢(mèng)茹,侯宏錄
(西安工業(yè)大學(xué) 光電工程學(xué)院,西安710021)
圖像采集與預(yù)處理系統(tǒng)是通過(guò)圖像傳感器獲取客觀世界的圖像信息,并對(duì)得到的圖像信息進(jìn)行存儲(chǔ)和預(yù)處理的過(guò)程,被廣泛應(yīng)用于智能交通監(jiān)控領(lǐng)域。隨著道路車(chē)流量的不斷增加,傳統(tǒng)的單目圖像采集在對(duì)多目標(biāo)車(chē)輛識(shí)別時(shí),很難獲取多個(gè)目標(biāo)之間的位置信息。而雙目圖像采集可以基于視差的原理獲取目標(biāo)的三維信息,為進(jìn)一步研究多目標(biāo)車(chē)輛識(shí)別提供基礎(chǔ)平臺(tái)[1]。目前,圖像采集硬件平臺(tái)主要有ASIC,ARM,F(xiàn)PGA 和DSP。FPGA 具有體積小、并行處理等特點(diǎn),其設(shè)計(jì)的實(shí)時(shí)性、靈活性也遠(yuǎn)高于其它平臺(tái),使其在圖像處理領(lǐng)域中應(yīng)用廣泛。
圖像預(yù)處理是圖像處理技術(shù)的基礎(chǔ)環(huán)節(jié)。中值濾波作為一種常用的圖像預(yù)處理方法,能夠有效地濾除噪聲干擾,保留圖像的邊緣信息。而傳統(tǒng)的中值濾波算法處理速度慢, 無(wú)法滿(mǎn)足系統(tǒng)實(shí)時(shí)性要求。故在此以傳統(tǒng)中值濾波為基礎(chǔ)提出一種并行中值濾波算法,相比于傳統(tǒng)的濾波算法,其運(yùn)算量減小了近1/2。
基于FPGA 的實(shí)時(shí)雙目圖像采集與預(yù)處理系統(tǒng)主要包括圖像采集、存儲(chǔ)、預(yù)處理和顯示等模塊,實(shí)現(xiàn)圖像數(shù)據(jù)的實(shí)時(shí)采集顯示與預(yù)處理。系統(tǒng)總體結(jié)構(gòu)如圖1所示。
圖1 系統(tǒng)總體結(jié)構(gòu)Fig.1 Overall structure of the system
系統(tǒng)上電后, 通過(guò)I2C 總線配置OV5640 圖像傳感器的寄存器。由圖像采集模塊實(shí)時(shí)獲取圖像傳感器采集到圖像的幀行信號(hào)、10 bit 圖像數(shù)據(jù)和像素時(shí)鐘,將圖像數(shù)據(jù)轉(zhuǎn)換成RGB 模式輸出。由于相機(jī)時(shí)鐘為50 MHz,DDR3 工作時(shí)鐘為100 MHz,需要讀寫(xiě)FIFO 完成跨時(shí)鐘域操作。將采集的2 路圖像數(shù)據(jù)緩存在2 個(gè)寫(xiě)FIFO 中, 在寫(xiě)仲裁模塊采用輪詢(xún)的方式選擇一路圖像數(shù)據(jù),再通過(guò)AXI 總線控制,利用MIG 核對(duì)片外存儲(chǔ)芯片DDR3 進(jìn)行讀寫(xiě)操作。同樣,在讀仲裁模塊采用輪詢(xún)的方式讀取一路圖像數(shù)據(jù), 將讀取的圖像數(shù)據(jù)經(jīng)過(guò)讀FIFO 緩存送入濾波模塊進(jìn)行降噪處理。最后通過(guò)顯示模塊,在HDMI 顯示屏上實(shí)時(shí)顯示2 幀分辨率為1920×1080,幀頻為30 f/s 的圖像。
該系統(tǒng)選用2 個(gè)CMOS OV5640 圖像傳感器來(lái)完成雙目圖像的采集。FPGA 芯片通過(guò)I2C 總線對(duì)OV5640 進(jìn)行參數(shù)配置, 配置攝像頭的分辨率為1920×1080, 輸出數(shù)據(jù)格式為RGB, 幀頻為30 f/s。CMOS OV5640 與FPGA 芯片連接如圖2所示,F(xiàn)P GA 芯片通過(guò)I2C 總線的時(shí)鐘線scl、 數(shù)據(jù)線sda,配置圖像傳感器的內(nèi)部寄存器[2]。
當(dāng)scl 為高電平,sda 從高到低時(shí), 開(kāi)始傳輸數(shù)據(jù);scl 為高電平,sda 從低到高時(shí), 停止傳輸數(shù)據(jù)。RGB565 格式是{R[4:0],G[5:0],B[4:0]},圖像傳感器先輸出高8 bit 數(shù)據(jù),再輸出低8 bit 數(shù)據(jù),將2個(gè)8 bit 數(shù)據(jù)進(jìn)行拼位操作,即可得到16 bit 的RGB數(shù)據(jù)。輸出RGB 數(shù)據(jù)仿真如圖3所示, 在50 MHz的時(shí)鐘下,1 個(gè)時(shí)鐘周期輸入1 個(gè)8 bit 數(shù)據(jù), 經(jīng)過(guò)拼位操作后, 每間隔1 個(gè)時(shí)鐘周期輸出1 個(gè)16 bit數(shù)據(jù),從而完成RGB 數(shù)據(jù)的輸出。
圖3 輸出RGB 數(shù)據(jù)仿真Fig.3 Output RGB data simulation
緩存模塊由AXI 接口控制、讀寫(xiě)FIFO 控制、讀寫(xiě)仲裁、MIG 核、DDR3 SDRAM 等模塊構(gòu)成。DDR3 SDRAM 控制器采用XilinxMIG 核[3-4]來(lái)設(shè)計(jì),通過(guò)AXI 總線對(duì)DDR3 執(zhí)行讀寫(xiě)操作。AXI 總線對(duì)DDR3 執(zhí)行寫(xiě)、讀操作的狀態(tài)機(jī)設(shè)計(jì)如圖4所示。
圖中, 在寫(xiě)初始狀態(tài)接收到寫(xiě)突發(fā)請(qǐng)求信號(hào),進(jìn)入寫(xiě)等待狀態(tài), 等待寫(xiě)FIFO 滿(mǎn)足一次突發(fā)的條件后進(jìn)入寫(xiě)地址狀態(tài),通過(guò)寫(xiě)地址通道寫(xiě)入突發(fā)地址和突發(fā)長(zhǎng)度。在寫(xiě)數(shù)據(jù)等待狀態(tài),等待寫(xiě)地址通道的READY 信號(hào), 產(chǎn)生寫(xiě)數(shù)據(jù)通道的VALID 信號(hào),進(jìn)入寫(xiě)數(shù)據(jù)狀態(tài),通過(guò)寫(xiě)數(shù)據(jù)通道往DDR3 中寫(xiě)完一包數(shù)據(jù),進(jìn)入寫(xiě)反饋狀態(tài),等待寫(xiě)反饋通道的VALID 信號(hào),再進(jìn)入寫(xiě)突發(fā)完成狀態(tài),表示一次寫(xiě)突發(fā)數(shù)據(jù)完成,回到初始狀態(tài),等待下一包數(shù)據(jù)突發(fā)請(qǐng)求信號(hào)。
圖4 DDR3 寫(xiě)操作和讀操作狀態(tài)機(jī)的設(shè)計(jì)Fig.4 Design of DDR3 write and read operation state machine
AXI 總線對(duì)DDR3 執(zhí)行讀操作的過(guò)程與寫(xiě)操作類(lèi)似,通過(guò)讀地址和讀數(shù)據(jù)通道完成DDR3 的讀操作。
該系統(tǒng)中突發(fā)數(shù)據(jù)以包的形式傳輸,數(shù)據(jù)位寬64 bit,突發(fā)長(zhǎng)度64,故一包可傳輸?shù)臄?shù)據(jù)為64×64 bit=4 kbit。由于圖像采集的時(shí)鐘頻率與DDR3 提供的時(shí)鐘頻率不同, 故調(diào)用2 個(gè)FIFO 核來(lái)解決跨時(shí)鐘域問(wèn)題。采集到的2 路圖像數(shù)據(jù)分別存入寫(xiě)FIFO中等待,當(dāng)有寫(xiě)突發(fā)數(shù)據(jù)請(qǐng)求時(shí)且滿(mǎn)足突發(fā)條件則產(chǎn)生一次寫(xiě)突發(fā),對(duì)2 路圖像數(shù)據(jù)采用輪詢(xún)的方式進(jìn)行選擇,通過(guò)AXI 總線完成寫(xiě)操作。當(dāng)有讀突發(fā)數(shù)據(jù)請(qǐng)求時(shí)且寫(xiě)入DDR3 中的數(shù)據(jù)達(dá)到4 kbit 時(shí),就發(fā)生一次讀突發(fā),采用輪詢(xún)方式,通過(guò)AXI 總線完成讀操作。
為提高圖像數(shù)據(jù)緩存效率,將DDR3 存儲(chǔ)空間128 Mbit 分為4 個(gè)bank,每個(gè)bank 存儲(chǔ)1 幀圖像。采用乒乓操作,其操作框架如圖5所示,圖像數(shù)據(jù)寫(xiě)入bank0 時(shí),讀取bank3 數(shù)據(jù),bank0 寫(xiě)完第1 幀圖像后,讀取bank0 同時(shí)往bank1 寫(xiě)入第2 幀數(shù)據(jù),依次按順序讀寫(xiě),提高緩存效率。
圖5 DDR3 SDRAM 兵乓操作框架Fig.5 Operation frame of DDR3 SDRAM label
中值濾波是基于排序統(tǒng)計(jì)理論的一種能有效抑制噪聲的非線性信號(hào)處理技術(shù)。通常采用濾波模板的方法,對(duì)模板內(nèi)的像素按照像素值的大小進(jìn)行全排序,找到模板內(nèi)像素的中間值,其輸出為
式中:f(x,y)為原始的圖像;g(x,y)為濾波處理后的圖像;W 為二維模板。
對(duì)于系統(tǒng)中分辨率為1920×1080 的RGB 圖像,采用傳統(tǒng)中值濾波,在3×3 濾波窗口中對(duì)每一像素的R,G,B 各通道濾波取中值來(lái)替代每一像素的RGB 值,對(duì)每個(gè)通道像素點(diǎn)及其鄰域取中值需要有36 次的排序運(yùn)算,因此運(yùn)算量大,耗時(shí)長(zhǎng),難以實(shí)現(xiàn)圖像的實(shí)時(shí)處理。故在此提出一種并行中值濾波算法,采用并行處理和流水線操作,以最快的速度找出中值,滿(mǎn)足系統(tǒng)實(shí)時(shí)處理的要求[5-6]。以一個(gè)通道的3×3 濾波窗口為例,求取中間值的流水線操作,如圖6所示。
圖6 求取中間值的流水線操作Fig.6 Pipelining operation for intermediate value
步聚1在第1 級(jí)流水線上,采用并行處理,對(duì)模板內(nèi)每一行的像素值由大到小進(jìn)行排序,同時(shí)得到每行的最大值、 中間值和最小值。該操作需要9次比較。
步聚2在第2 級(jí)流水線上, 將上級(jí)得到的最大像素值、 中間像素值和最小像素值再次進(jìn)行排序,同時(shí)得到最大像素中的最小值、中間像素中的中間值, 以及最小像素中的最大值。該操作需要9次比較。
步聚3在第3 級(jí)流水線上, 將上級(jí)輸出的3個(gè)像素再次進(jìn)行排序, 獲得中間值。該操作需要3次比較。
所提出的并行中值濾波算法僅需要調(diào)用7 次三值比較器,共進(jìn)行21 次排序運(yùn)算,相比傳統(tǒng)中值濾波算法的36 次排序減小了近1/2 的計(jì)算量,從而提高數(shù)據(jù)處理速度,滿(mǎn)足系統(tǒng)實(shí)時(shí)性要求。
并行中值濾波算法根據(jù)功能劃分為3 個(gè)模塊,緩存模塊、寄存器陣列模塊和排序輸出模塊。其結(jié)構(gòu)框圖如圖7所示。
圖7 并行中值濾波結(jié)構(gòu)框圖Fig.7 Structure block diagram of parallel median filter
緩存模塊中設(shè)置3 個(gè)FIFO,寬度為64 bit,每個(gè)FIFO 緩存一行圖像。從DDR3 中讀出的數(shù)據(jù)固定寫(xiě)入FIFO1, 寫(xiě)滿(mǎn)后將其寫(xiě)入FIFO2。當(dāng)FIFO2 寫(xiě)滿(mǎn)后,再將其寫(xiě)入FIFO3 同時(shí)將FIFO1 中的數(shù)據(jù)寫(xiě)入FIFO2, 即可使3 行圖像數(shù)據(jù)緩存在3 個(gè)FIFO 中。將緩存的3 行數(shù)據(jù)同時(shí)送入寄存器模板陣列,生成R,G,B 各通道的3×3 濾波模板。通過(guò)排序輸出模塊,對(duì)R,G,B3 個(gè)濾波模板中像素值進(jìn)行排序,最后輸出該像素的中間值。以G 分量通道為例,其并行中值濾波仿真如圖8所示。
圖8 G 分量通道并行中值濾波仿真Fig.8 Simulation of G-component channel parallel median filter
圖中,pix_fval,pix_lval 為圖像的幀行同步信號(hào),F(xiàn)IFO 中緩存的3 行數(shù)據(jù)經(jīng)過(guò)3 個(gè)時(shí)鐘周期的延遲,即可得到G 通道的3×3 濾波模板data_p1…data_p9。在生成的模板上執(zhí)行像素排序流水線操作,每完成一級(jí)流水線操作需要1 個(gè)時(shí)鐘周期,3 個(gè)時(shí)鐘周期即可輸出中值。
采用Verilog HDL 語(yǔ)言[7]編寫(xiě)各子模塊程序后,基于XILINX Artix-7 系列XC7A100TFGG484-2 芯片及其軟件開(kāi)發(fā)平臺(tái)Vivado 和仿真工具Questa Sim,對(duì)系統(tǒng)進(jìn)行試驗(yàn)驗(yàn)證。
實(shí)時(shí)雙目圖像采集與顯示試驗(yàn)如圖9所示。系統(tǒng)上電,圖像傳感器采集圖像信息,通過(guò)HDMI 實(shí)時(shí)顯示。試驗(yàn)結(jié)果表明,該雙目圖像采集系統(tǒng)能實(shí)時(shí)采集圖像并顯示,為后續(xù)獲取目標(biāo)三維信息提供基礎(chǔ)平臺(tái)。
圖9 實(shí)時(shí)雙目圖像采集與顯示試驗(yàn)Fig.9 Real-time binocular image acquisition and display experiment
為了更直觀地測(cè)試該算法在FPGA 上實(shí)現(xiàn)的效果,利用MatLab 與Questa Sim 聯(lián)合仿真,對(duì)一幅分辨率為256×256 的彩色圖像進(jìn)行軟硬件仿真對(duì)比。并行中值濾波算法處理試驗(yàn)的仿真結(jié)果對(duì)比如圖10 所示。
圖10 并行中值濾波算法處理試驗(yàn)Fig.10 Parallel median filtering algorithm processing experiment
試驗(yàn)結(jié)果表明,采用軟、硬件方法實(shí)現(xiàn)的并行中值濾波效果基本一致,對(duì)椒鹽噪聲均有顯著的濾波效果。然而,在2.20 GHz 的計(jì)算機(jī)上MatLab 軟件實(shí)現(xiàn)中值濾波需要185 ms;用Artix-7FPGA 硬件實(shí)現(xiàn)的并行中值濾波算法,工作在50 MHz 時(shí)鐘頻率下僅需1.377 ms。耗時(shí)對(duì)比表明,本文設(shè)計(jì)的硬件系統(tǒng)處理速度遠(yuǎn)快于軟件處理,滿(mǎn)足系統(tǒng)實(shí)時(shí)性要求。
所提出的實(shí)時(shí)雙目圖像采集與處理系統(tǒng)充分發(fā)揮了FPGA 的并行高速處理,以及DDR3 SDRAM大容量高速率存儲(chǔ)等特點(diǎn),相比于軟件處理,其處理速度明顯提高。同時(shí),實(shí)現(xiàn)了一種并行中值濾波算法,相比于傳統(tǒng)的中值濾波算法,運(yùn)算量減少了約1/2, 有效地解決了實(shí)時(shí)動(dòng)態(tài)圖像噪聲干擾的問(wèn)題。通過(guò)試驗(yàn)證明,該系統(tǒng)可實(shí)現(xiàn)實(shí)時(shí)雙目圖像采集、存儲(chǔ)、預(yù)處理及顯示等功能,為進(jìn)一步實(shí)現(xiàn)智能交通監(jiān)控系統(tǒng)中多目標(biāo)車(chē)輛識(shí)別、 跟蹤等算法,奠定堅(jiān)實(shí)的基礎(chǔ)。