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