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