基于FPGA+DSP技術(shù)的Bayer格式圖像處理
高分辨率圖像實(shí)時處理在通信、醫(yī)學(xué)、軍事、航天航空、信息安全等領(lǐng)域有著廣泛的應(yīng)用和發(fā)展。在圖像實(shí)時處理的過程中,下層圖像預(yù)處理的數(shù)據(jù)量大,運(yùn)算簡單,但是要求運(yùn)算速率高,可以用FPGA硬件來處理,上層所處理的數(shù)據(jù)量少,算法結(jié)構(gòu)復(fù)雜,適于運(yùn)算速度快,尋址靈活的DSP數(shù)字信號處理器進(jìn)行處理。這里提出了一種FPGA+DSP相結(jié)合的實(shí)時圖像處理系統(tǒng),并應(yīng)用于傳像光線束傳遞圖像。CMOS實(shí)際采集的是光線束的出端圖像,F(xiàn)PGA將CMOS采集的Bayer格式的圖像轉(zhuǎn)換為RGB格式的亮度信號。由于光纖出、入端結(jié)構(gòu)不同,需要DSP準(zhǔn)確每根光纖的中心位置,重新排序才能輸出正確的圖像信息。該系統(tǒng)充分發(fā)揮了FPGA和DSP各自的優(yōu)勢,能更好地提高圖像處理的實(shí)時性,降低成本。
1Bayer圖像格式
CMOS圖像傳感器作為一種基礎(chǔ)器件可以實(shí)現(xiàn)信息的采集、轉(zhuǎn)換以及視覺功能的擴(kuò)展,并能直觀真實(shí)地給出可視圖像信息。系統(tǒng)中CMOS圖像傳感器輸出2 592x1 944x12 bit的Bayer格式的圖像(該格式的圖像本身就是數(shù)字信號,因此無需對圖像進(jìn)行模數(shù)轉(zhuǎn)換),Bayer圖像格式如圖1所示。在圖l中,每個方格代表一個像素,并且只含有R、G、B中的一種顏色分量,奇數(shù)行由G、R像素交替構(gòu)成,偶數(shù)行由B、G像素交替進(jìn)行,其中G像素分量占所有像素的一半,R像素和G像素占另一半。因?yàn)镚像素分量是R、B像素分量的2倍,所以如果G像素分量采用好的插值方法,不僅可以提高G像素分量的質(zhì)量,也能提高R和B像素分量的質(zhì)量。由于TMS320DM642的video port capture接口的數(shù)據(jù)總線是8位或者16位(該系統(tǒng)采用了更適合DSP處理的8位數(shù)據(jù)),所以為了后續(xù)的DSP能夠更好的處理數(shù)據(jù)并減少DSP的運(yùn)算量,需要使用FPGA先將輸出的圖像數(shù)據(jù)取高8位,然后依據(jù)每個像素點(diǎn)與相鄰8個像素點(diǎn)之間的關(guān)系,使用雙線性插值法將Bayer圖像格式轉(zhuǎn)換成24位的RGB圖像格式和亮度信號,然后將處理后的數(shù)據(jù)發(fā)送給DSP。
2圖像數(shù)據(jù)處理的工作原理
2.1Bayer圖像的格式轉(zhuǎn)換
雙線性插值法具有算法計(jì)算量少,算法結(jié)構(gòu)簡單,易于實(shí)現(xiàn),占硬件資源少等優(yōu)點(diǎn),本系統(tǒng)中更適合FPGA實(shí)現(xiàn)。雙線性插值法的基本原理是將每個像素位置上缺少的另外兩種色彩分量通過該像素本身為中心的領(lǐng)域內(nèi)具有相同分量的像素平均獲得,即將每個像素的RGB分量都以該點(diǎn)像素為中心的3x3像素矩陣進(jìn)行線性插值而成。按照這種思路可以將圖像中的3x3矩陣分成4類,如表1所示。
每種圖像矩陣中間的像素點(diǎn)為待插值的數(shù)據(jù)源,設(shè)R(x,y)、G(x,y)、B(x,y)為插值計(jì)算后該點(diǎn)紅、綠、藍(lán)像素分量。當(dāng)像素位于奇數(shù)行奇數(shù)列計(jì)算公式為:
由于系統(tǒng)中TMS320DM642的視頻端口使用的是8位RAW采集方式從CMOS傳感器中采集圖像,為了減輕DSP的運(yùn)算負(fù)擔(dān),F(xiàn)PGA還需要將圖像數(shù)據(jù)轉(zhuǎn)換成Y亮度信號。將得到的RGB圖像信號,通過浮點(diǎn)算法公式轉(zhuǎn)換成亮度信號,具體推導(dǎo)公式如下(GB代表取高8位數(shù)據(jù)):
2.2 FPGA的硬件實(shí)現(xiàn)原理
由于雙線性插值法需要將圖像數(shù)據(jù)采集成3x3的圖像矩陣,系統(tǒng)采用一種由FPGA硬件元器件構(gòu)成的FD-FIFO模型取圖像矩陣。電路如圖2所示。
如圖2所示,每個移位寄存器FD和先入先出寄存器FIFO左側(cè)上端信號為時鐘輸入信號(上升沿有效),左側(cè)下端信號為8位的像素信號。圖像矩陣的采集流程為:8位的圖像信號送到第1個FD,然后經(jīng)過移位操作從第3個FD存入左邊第1個FIFO,存入一行圖像數(shù)據(jù)后,等第2行圖像數(shù)據(jù)送達(dá)時,第2行的圖像數(shù)據(jù)經(jīng)過移位操作從FD存入左邊第1個FIFO,同時存儲在第1個FIFO的數(shù)據(jù)開始讀出到第4個FD,再經(jīng)過移位操作存入第2個FIFO,等待兩行圖像數(shù)據(jù)都存儲后,當(dāng)?shù)?行圖像數(shù)據(jù)送達(dá)至第3個FD,同時后面2個FIFO分別讀出前兩行的前3個圖像數(shù)據(jù)時,就可以從FD和FIFO的輸出端口讀取到1個3x3的圖像數(shù)據(jù)矩陣:3x3矩陣第1行從左到右的數(shù)據(jù)為ABC,第2行的數(shù)據(jù)從左到右為DEF,第3行的數(shù)據(jù)從左到右為GHI。
CMOS圖像傳感器采集的圖像大小固定為2 592x1 946x12 bit的Bayer圖像,F(xiàn)PGA先用一個12位輸入8位輸出的移位寄存器取圖像的高8位,再利用FD-FIFO得到3x3的圖像矩陣,然后可以根據(jù)雙線性插值法計(jì)算圖像的RGB信號。雙線性插值法雖然算法簡單,且易于實(shí)現(xiàn),但是存在邊界效應(yīng)。系統(tǒng)對邊界效應(yīng)做了如下的處理方法:對圖像四周全部補(bǔ)零,即先將圖像擴(kuò)展成2 594x1 946大小,然后計(jì)算得到2592x1 944大小的圖像,這樣得到的圖像仍是完整尺寸。只需在運(yùn)算的時候,針對不同四周特殊的像素采用裁減的公式(系統(tǒng)中不產(chǎn)生零像素,只是對計(jì)算公式中相應(yīng)邊界元素補(bǔ)零)。過程如下:第1行圖像讀入第1個FIF0后,第2行圖像開始讀入左邊第1個FD的時候,開始計(jì)算第1行RGB數(shù)據(jù),這時候第2個FIFO沒有數(shù)據(jù),相當(dāng)于在第1行的數(shù)據(jù)前面補(bǔ)零。第1 944行圖像讀入第1個FIFO后,第1 943行圖像讀入第2個FIFO的時候,開始計(jì)算最后1行(第1 944行),這時候第1個FD已經(jīng)沒有數(shù)據(jù)讀入,相當(dāng)于在第1 944行的數(shù)據(jù)后面補(bǔ)零。由于FD具有延時效應(yīng),所以在讀寫時,前1個FIFO開始讀寫時,再經(jīng)過延時2個時鐘周期,才到達(dá)后1個FIFO,所以相鄰的FIFO讀寫使能信號要間隔2個時鐘周期。
對列的操作也是如此,每一行的第1個元素讀出到B、E、H位置時開始計(jì)算,這樣每一列的第1個元素前相當(dāng)于是零元素。每一行的最后一個元素讀出到B,E,H位置時開始計(jì)算,這樣每一列的最后一個元素后相當(dāng)于是零元素。
3圖像預(yù)處理系統(tǒng)的硬件工作過程
圖像預(yù)處理系統(tǒng)硬件框圖如圖3所示,整個系統(tǒng)在通電后,先由TMS320DM642通過I2C向500萬像素的CMOS攝像頭發(fā)出控制命令,調(diào)整攝像頭輸出的圖像分辨率、焦距等,之后由攝像頭將采集到的圖像數(shù)據(jù)發(fā)送至FPGA。由于攝像頭輸出的圖像格式為12位的Bayer圖像,而DSP的vp-ort口支持為8位或者16位的RAW采集方式,本項(xiàng)目中采用了更適合于DSP處理的8位數(shù)據(jù),所以需要FPGA對采集的圖像數(shù)據(jù)取高8位以方便DSP獲取圖像數(shù)據(jù)。FPGA在Frame_Valid和Line_Valid同時為高電平的時,在Pixclk的上升沿采樣圖像數(shù)據(jù),并將原來的12位圖像數(shù)據(jù)取其高8位轉(zhuǎn)換成8位Bayer圖像數(shù)據(jù),然后利用FPGA內(nèi)部的FD-FIFO模型結(jié)構(gòu)取圖像的3x3矩陣并利用雙線性插值算法將Bayer圖像轉(zhuǎn)換成24位的RGB圖像格式。除此之外,F(xiàn)PGA還將Bayer圖像數(shù)據(jù)轉(zhuǎn)換成了Y亮度信號以達(dá)到DSP對運(yùn)算數(shù)據(jù)的要求,使得DSP只工作在核心算法上。
轉(zhuǎn)換好的亮度圖像數(shù)據(jù)由FPGA通過TMS320DM642的VPort1口發(fā)送至DSP進(jìn)行核心算法處理。為了更好地達(dá)到整個DSP算法處理的實(shí)時性,DSP采用了BIOS實(shí)時操作系統(tǒng)。經(jīng)算法處理好的圖像數(shù)據(jù)由TMS320DM642通過其VPortO口發(fā)送至FPGA。圖像預(yù)處理過程是在Spartan-3系列的XC3S1500x中進(jìn)行的。FPGA使用的設(shè)計(jì)方法是HDL設(shè)計(jì)輸入法,常用的HDL語言有VHDL和VerilogDHL語言,在本系統(tǒng)中使用VHDL語言進(jìn)行硬件設(shè)計(jì)。
系統(tǒng)采用的是通過FPGA固件支持高傳輸率USB2.0的CY7C68013芯片,采用Slave_FIFO模式接收FPGA輸出的圖像數(shù)據(jù),再通過USB口輸送給上位機(jī)。如圖4所示,圖4(a)為RAW圖像,即每個像素點(diǎn)只含有單一顏色分量的Bayer格式圖像,圖4(b)為系統(tǒng)處理后的RGB格式的亮度信號圖像。
4 結(jié)論
可見,本文所提出的基于FPGA+DSP的圖像處理系統(tǒng),能在FPGA硬件設(shè)備中高速、高質(zhì)量地對CMOS傳感器采集的Bayer圖像進(jìn)行預(yù)處理,為DSP數(shù)字信號處理器進(jìn)行核心算法減少運(yùn)算量,提高整個圖像處理的實(shí)時性,縮短了開發(fā)周期,并且這種FPGA+DSP的組合模式也可以推廣到處理各種數(shù)字視頻信號。