吳藝陽,樊 凡,2,周 怡,黃 珺,2
1.武漢大學(xué) 電子信息學(xué)院,武漢430072
2.武漢大學(xué) 宇航科學(xué)與技術(shù)研究院,武漢430072
仿射變換是一種實(shí)現(xiàn)原始圖像旋轉(zhuǎn)、縮放與平移并最終得到目標(biāo)圖像的幾何變換,是圖像融合、圖像配準(zhǔn)、圖像矯正等應(yīng)用中不容或缺的步驟之一[1]。例如,在實(shí)時視頻圖像融合系統(tǒng)中,仿射變換可以實(shí)現(xiàn)來自不同波段圖像之間的配準(zhǔn)[2];在全景相機(jī)中,全景圖像的拼接需要通過仿射變換實(shí)現(xiàn)[3];在醫(yī)學(xué)圖像應(yīng)用中,仿射變換可以實(shí)現(xiàn)計算機(jī)斷層掃描(CT)涉及的坐標(biāo)配準(zhǔn)[4]。上述應(yīng)用普遍要求系統(tǒng)的實(shí)時性達(dá)到30 Hz 幀頻[5]。相比ARM、DSP等處理器件,F(xiàn)PGA的靈活性更高、性能更強(qiáng),采用FPGA 實(shí)現(xiàn)圖像的仿射變換能夠有效地提高系統(tǒng)的實(shí)時性[6-7]。但仿射變換中涉及大量的矩陣運(yùn)算與插值運(yùn)算,需要占用較多的邏輯資源,設(shè)計難度大[8-9]。因此,研究仿射變換FPGA的高吞吐率實(shí)現(xiàn)具有重要意義。
目前,國內(nèi)外在實(shí)時視覺系統(tǒng)中的仿射變換FPGA實(shí)現(xiàn)均以反向映射為基本原理。這類方法需要使用存儲器緩存一幀原始圖像數(shù)據(jù),然后根據(jù)目標(biāo)像素的坐標(biāo)從存儲器中讀取對應(yīng)的四鄰域像素灰度值,最后采用雙線性插值算法確定目標(biāo)像素灰度值。因?yàn)殡p線性插值模塊需要從存儲器中同步讀取四鄰域像素,所以存儲器的傳輸數(shù)據(jù)帶寬是原始圖像數(shù)據(jù)流的4 倍。為了實(shí)現(xiàn)存儲器的4 倍數(shù)據(jù)帶寬需求,國內(nèi)外研究人員提出了不同的方法。例如,Jiang 等人以及Gribbon 等人分別采用FPGA 內(nèi)部存儲資源與外部存儲器緩存4幀相同的原始圖像,從而實(shí)現(xiàn)雙線性插值需要的4 路圖像數(shù)據(jù)流輸入,該方法存在存儲資源消耗大的問題[10-11]。為節(jié)約存儲資源FPGA 存儲資源,Ngo 等人以及王文治采用像素時鐘的4 倍頻時鐘從DPRAM 中讀取原始圖像數(shù)據(jù)[12-13];王金輝等人采用兩個單口SRAM 實(shí)現(xiàn)乒乓操作,并使用像素時鐘的4 倍頻時鐘讀取原始圖像[14]。上述實(shí)現(xiàn)方案可歸納為以下兩種:(1)使用4 個獨(dú)立的存儲資源對原始圖像進(jìn)行存取[10-11];(2)采用像素時鐘的4倍頻對存儲器內(nèi)部數(shù)據(jù)進(jìn)行讀取[12-14]。第一種方式需要為4 個存儲器提供更多的引腳資源與設(shè)計空間,在增加FPGA 功耗的同時,不利于實(shí)時系統(tǒng)的小型化實(shí)現(xiàn)。第二種方式需要將存儲器的讀寫頻率提高至原始圖像時鐘頻率的4倍,考慮到存儲器存在最大讀寫頻率,所以這類提升頻率的方法會將系統(tǒng)數(shù)據(jù)吞吐率降低至第一種方式的1/4。
綜上所述,基于反向映射的仿射變換不能同時兼顧存儲資源消耗與數(shù)據(jù)吞吐率。其根本原因在于雙線性插值模塊需要在一個像素時鐘內(nèi)從存儲器中讀取原始圖像四鄰域像素點(diǎn),導(dǎo)致存儲器的傳輸數(shù)據(jù)帶寬需求為原始圖像流的4 倍。為解決該問題,本文提出了一種插值前置的仿射變換FPGA 實(shí)現(xiàn)方法,該方法采用四角點(diǎn)映射方式將雙線性插值計算提前到存儲器緩存原始圖像之前,避免了雙線性插值模塊對存儲器的直接讀取,從而降低了存儲器的傳輸數(shù)據(jù)帶寬需求。
目前,國內(nèi)外在實(shí)時視覺系統(tǒng)中仿射變換的FPGA實(shí)現(xiàn)均以反向映射為基本原理。以反向映射為基礎(chǔ)的仿射變換采用順序掃描的方式遍歷目標(biāo)圖像中的像素點(diǎn),通過反向映射在原始圖像中確定與該像素點(diǎn)對應(yīng)的四鄰域像素,并對四鄰域像素進(jìn)行雙線性插值計算,最終建立目標(biāo)圖像。反向映射的數(shù)學(xué)模型為[15]:
其中,( x,y)T是原始圖像中的坐標(biāo)向量,( u,v)T是目標(biāo)圖像中的坐標(biāo)向量,( k1,k2)是圖像的縮放系數(shù),θ 是圖像的旋轉(zhuǎn)角度參數(shù),( t1,t2)是圖像的橫向與縱向平移參數(shù)。上述仿射參數(shù){k1,k2,θ,t1,t2} 為預(yù)設(shè)值。
如圖1 所示,基于反向映射的仿射變換FPGA 實(shí)現(xiàn)流程可歸納為:(1)地址生成模塊根據(jù)行場同步信號產(chǎn)生目標(biāo)圖像的地址信號流;(2)該地址信號流經(jīng)過反向映射得到原始圖像中對應(yīng)的坐標(biāo),并依此產(chǎn)生雙線性插值需要的4 個像素坐標(biāo)以及插值權(quán)重;(3)存儲器接口使用4 路并行的數(shù)據(jù)鏈路從外部RAM 中同時讀取這4個坐標(biāo)的像素值;(4)雙線性插值模塊根據(jù)同步輸入的插值權(quán)重與4 路原始圖像數(shù)據(jù)流輸出得到目標(biāo)圖像數(shù)據(jù)流[16]。
圖1 反向映射FPGA實(shí)現(xiàn)原理設(shè)計框圖
從圖1 可以看出,基于反向映射的仿射變換FPGA實(shí)現(xiàn)方法需要從RAM 中同時讀取4 路原始圖像數(shù)據(jù),該操作只能通過兩種方式實(shí)現(xiàn):(1)使用4 個獨(dú)立的存儲器對原始圖像進(jìn)行存?。唬?)采用像素時鐘的4 倍頻對存儲器內(nèi)部數(shù)據(jù)進(jìn)行讀取。第一種方式需要為4 個存儲器提供更多的引腳資源與設(shè)計空間,同時增加了FPGA 的功耗,不利于實(shí)時系統(tǒng)的小型化實(shí)現(xiàn)。第二種方式需要將RAM 的讀寫頻率提高至原始圖像時鐘的4倍,考慮到RAM 存在最大讀寫頻率,所以該方法會將數(shù)據(jù)吞吐率降低至第一種方式的1/4。綜上所述,基于反向映射的仿射變換FPGA 實(shí)現(xiàn)方法不能同時兼顧存儲資源與數(shù)據(jù)吞吐率。
針對基于反向映射的仿射變換FPGA 實(shí)現(xiàn)方法存在的缺點(diǎn),本文提出了一種基于前置插值的仿射變換理論,并詳細(xì)介紹該仿射變換的FPGA 實(shí)現(xiàn)方法,并對實(shí)現(xiàn)方法中涉及的簡化運(yùn)算與相關(guān)的校驗(yàn)運(yùn)算進(jìn)行了分析。
本文的想法是將雙線性插值的計算提前到存儲器緩存原始圖像數(shù)據(jù)流之前,即在原始圖像數(shù)據(jù)流輸入的同時便實(shí)現(xiàn)雙線性插值計算,從而避免存儲器讀寫圖像數(shù)據(jù)時所需的4 倍數(shù)據(jù)帶寬。為實(shí)現(xiàn)插值前置,本文提出一種基于四角點(diǎn)映射的數(shù)學(xué)模型,該模型采用滑動窗遍歷原始圖像坐標(biāo),并在滑動窗中通過前向映射與反向映射的結(jié)合建立原始圖像與目標(biāo)圖像的映射關(guān)系。滑動窗的大小選取與仿射變換中應(yīng)用的具體插值算法相關(guān),滑動窗內(nèi)應(yīng)包含插值運(yùn)算中所需的所有原始圖像坐標(biāo)。因?yàn)楸疚奶岢龅姆律渥儞Q方法中采用的是雙線性插值算法,所以選取2×2 大小的窗口作為滑動窗?;谇爸貌逯档姆律渥儞Q具體實(shí)現(xiàn)原理描述如下:
(1)如圖2 所示,首先根據(jù)串行輸入的圖像數(shù)據(jù)流生成一個2×2 的滑動窗,即四角點(diǎn)對應(yīng)的滑動窗,該滑動窗可以實(shí)現(xiàn)原始圖像坐標(biāo)與像素值的同步傳輸,為后續(xù)的映射關(guān)系計算與雙線性插值計算提供時序上的同步。定義該窗口為四角點(diǎn)ABCD,ABCD 坐標(biāo)即為四角點(diǎn)坐標(biāo)。
圖2 四角點(diǎn)映射原理圖
(2)在已獲得四角點(diǎn)滑動窗的基礎(chǔ)上,需要建立原始圖像與目標(biāo)圖像的映射關(guān)系,考慮到前向映射可在已知原始圖像坐標(biāo)與仿射參數(shù)的基礎(chǔ)上實(shí)現(xiàn)映射關(guān)系的建立,本文采用前向映射將四角點(diǎn)滑動窗ABCD 的坐標(biāo)映射到目標(biāo)圖像,得到映射窗口A′B′C′D′,并在接下來 的 步 驟 中 從 映 射 窗 口A′B′C′D′中 獲 取ABCD 與A′B′C′D′之間像素的插值關(guān)系。其中,前向映射的數(shù)學(xué)模型為:
式(2)與式(1)互為反函數(shù)。
(3)通常情況下,映射后四角點(diǎn)A′B′C′D′的坐標(biāo)包含小數(shù)部分,但是在基于FPGA 的數(shù)字圖像處理中,必須對目標(biāo)圖像的整數(shù)坐標(biāo)進(jìn)行賦值才有意義。因此必須在A′B′C′D′內(nèi)找到其內(nèi)部的整數(shù)坐標(biāo)( )u′,v′,并對其進(jìn)行賦值。本文計算( )u′,v′的方式為:
其中( u1,v1)、( u2,v2)、( u3,v3)、( u4,v4)為映 射后 四角 點(diǎn)A′B′C′D′的坐標(biāo)。為簡化FPGA 的計算復(fù)雜度,( u′,v′)分別由( u1, u2,u3,u4)與( v1, v2,v3,v4)中的最大值并向下取整得到。
(4)在坐標(biāo)( u′,v′)確定之后,需要對( u′,v′)的灰度值進(jìn)行賦值??紤]到從映射后四角點(diǎn)A′B′C′D′直接計算( u′,v′)的灰度值計算復(fù)雜度較高,從四角點(diǎn)ABCD 確定坐標(biāo)( u′,v′)灰度值計算復(fù)雜度較低,所以本文采用反向映射原理將目標(biāo)圖像中的( u′,v′)映射到原始圖像得到坐標(biāo)( x′,y′),并通過雙線性插值算法確定( x′,y′)的灰度值。
(5)雙線性插值根據(jù)同步輸入的插值權(quán)重與4 路原始圖像數(shù)據(jù)確定目標(biāo)像素的灰度值,并將該數(shù)據(jù)存儲到RAM 中。最后,在一幀原始圖像數(shù)據(jù)進(jìn)行四角點(diǎn)映射處理之后,從RAM 中順序讀出數(shù)據(jù),便可得到仿射變換后的圖像。
理論上講,數(shù)字圖像仿射變換的實(shí)現(xiàn)原理為:在仿射參數(shù)已知的情況下,通過某種映射計算方式建立原始圖像與目標(biāo)圖像之間全部坐標(biāo)及像素灰度值的映射關(guān)系。傳統(tǒng)的反向映射采用點(diǎn)對點(diǎn)映射方式遍歷目標(biāo)圖像坐標(biāo),并確定該坐標(biāo)在原始圖像中對應(yīng)的四鄰域像素,最終對四鄰域像素進(jìn)行插值計算。本文提出的基于前置插值的仿射變換方法根據(jù)反向映射的對稱性,通過四角點(diǎn)窗口遍歷原始圖像獲取目標(biāo)圖像中所有與當(dāng)前窗口存在映射關(guān)系的像素坐標(biāo),然后通過反向映射確定當(dāng)前像素坐標(biāo)的像素灰度值,最終實(shí)現(xiàn)目標(biāo)圖像的建立。本文提出的基于前置插值的仿射變換方法需要實(shí)現(xiàn)四路并行的前向映射計算與一路的反向映射計算,實(shí)現(xiàn)難度與計算復(fù)雜度高于傳統(tǒng)的反向映射方法??紤]到FPGA 具有邏輯資源豐富,支持并行運(yùn)算的特點(diǎn),本文提出的基于前置插值的仿射變換方法在FPGA 實(shí)現(xiàn)中設(shè)計與實(shí)現(xiàn)難度較低,之后將介紹該方法的FPGA 實(shí)現(xiàn)架構(gòu)。
根據(jù)3.1 節(jié)中介紹的基于前置插值的仿射變換原理,其FPGA 實(shí)現(xiàn)方法需要分別實(shí)現(xiàn)四角點(diǎn)坐標(biāo)生成、四角點(diǎn)前向映射、坐標(biāo)選取、反向映射、滑動窗并行輸出以及雙線性插值模塊6 個處理模塊,如圖3 所示。下面將分別介紹這6個部分的FPGA實(shí)現(xiàn)方法。
(1)四角點(diǎn)坐標(biāo)生成模塊根據(jù)輸入的行場同步信號生成4路并行的原始圖像四角點(diǎn)坐標(biāo)( xi,yi)T( i= 1,2,3,4)。
(2)四角點(diǎn)前向映射模塊對輸入的4 路坐標(biāo)信號進(jìn)行并行的前向映射計算得到4 路目標(biāo)圖像坐標(biāo)信號( ui,vi)T( i= 1,2,3,4)。前向模塊的FPGA 實(shí)現(xiàn)原理圖如圖4(a)所示,輸入的x 坐標(biāo)與y 坐標(biāo)通過乘法器與加法器實(shí)現(xiàn)與仿射參數(shù)的乘加運(yùn)算,得到目標(biāo)圖像坐標(biāo)( u,v)。
圖3 基于前置插值的FPGA實(shí)現(xiàn)方法設(shè)計框圖
圖4 前向映射與反向映射FPGA實(shí)現(xiàn)原理圖
(3)坐標(biāo)選取模塊根據(jù)映射窗坐標(biāo)( ui,vi)T(i=1,2, 3,4 )選取當(dāng)前窗口的插值坐標(biāo)( u′,v′),其RTL級電路如圖5。坐標(biāo)選取模塊由數(shù)據(jù)比較器組與數(shù)據(jù)選擇器組構(gòu)成。數(shù)據(jù)比較器與數(shù)據(jù)選擇器的作用是得到映射坐標(biāo)( ui,vi)T( i= 1,2,3,4 )中的最大值與最小值。當(dāng)且僅當(dāng)umax-umin=1 與vmax-vmin=1 兩個條件均成立時,坐標(biāo)選取模塊輸出( umax,vmax)作為插值坐標(biāo)( u′,v′)。當(dāng)條件不成立時,意味著當(dāng)前窗口不包含插值坐標(biāo),坐標(biāo)選取模塊在當(dāng)前時刻將輸出坐標(biāo)(0,0)。
圖5 坐標(biāo)選取部分RTL級電路
(4)反向映射實(shí)現(xiàn)對輸入的插值坐標(biāo)( u′,v′)進(jìn)行反向映射計算,得到對應(yīng)的原始圖像坐標(biāo)( x′,y′),并通過( x′,y′)與四角點(diǎn)坐標(biāo)( xi,yi)T( i= 1,2,3,4 )的位置關(guān)系確定插值權(quán)重。如圖4(b)所示,反向映射的FPGA 實(shí)現(xiàn)也是通過乘法器與加法器對輸入坐標(biāo)( u′,v′)與相關(guān)仿射參數(shù)的運(yùn)算,得到原始圖像坐標(biāo)( x′,y′)。
(5)滑動窗并行輸出模塊實(shí)現(xiàn)了原始圖像數(shù)據(jù)的串并轉(zhuǎn)換,其時序圖如圖6 所示。方法采用兩個串行的FIFO 緩存圖像數(shù)據(jù),每個FIFO 內(nèi)緩存圖像的一行數(shù)據(jù)。寄存器Reg1、Reg2、Reg3 與Reg4 對FIFO 輸出的數(shù)據(jù)進(jìn)行流水緩存操作,從而實(shí)現(xiàn)圖像數(shù)據(jù)的并行輸出。其中,Reg1 與Rge3 內(nèi)緩存的數(shù)據(jù)為同一列像素,Reg2與Reg4 內(nèi)緩存的數(shù)據(jù)為同一列像素。當(dāng)FIFO1 與FIFO2 均存滿一行數(shù)據(jù)時,寄存器組將會并行輸出當(dāng)前2×2 窗口的像素值。該滑動窗結(jié)構(gòu)實(shí)現(xiàn)了像素時鐘下雙線性插值模塊所需的4倍數(shù)據(jù)帶寬輸入。
圖6 滑動窗原理框圖及時序圖
(6)雙線性插值部分根據(jù)輸入的4 路原始圖像數(shù)據(jù)流與插值權(quán)重,得到仿射變換圖像數(shù)據(jù)流,并將其存入到外部存儲器中。當(dāng)滑動窗遍歷原始圖像中所有的像素坐標(biāo)之后,順序讀出外部存儲器中的數(shù)據(jù)流,即可得到最終的仿射變換圖像數(shù)據(jù)。
插值前置的仿射變換FPGA 實(shí)現(xiàn)方法實(shí)現(xiàn)了雙線性插值的前置計算,避免雙線性插值模塊對存儲器的直接讀取,降低存儲器的傳輸帶寬需求。
如上所述,為降低FPGA 的計算復(fù)雜度,本文提出的插值前置的仿射變換FPGA 實(shí)現(xiàn)方法在坐標(biāo)選取部分中進(jìn)行了簡化計算,具體的簡化過程為:坐標(biāo)選取部分需要從映射窗口A′B′C′D′中選取插值坐標(biāo)( u′,v′),通常情況下,A′B′C′D′的邊與圖像坐標(biāo)軸為非平行關(guān)系,在A′B′C′D′中直接選取插值坐標(biāo)( u′,v′)需要計算坐標(biāo)( u′,v′)與A′B′C′D′形成的向量與映射窗口向量之間的內(nèi)積,通過內(nèi)積的取值判斷當(dāng)前坐標(biāo)是否在映射窗口A′B′C′D′內(nèi)部。上述操作需要使用大量的乘法器資源,降低FPGA 處理圖像數(shù)據(jù)的實(shí)時性。因此,本文采用一種簡化計算的坐標(biāo)選取方法,將選取的矩形窗擴(kuò)大為映射窗口A′B′C′D′的外接矩形EFGH,并通過對EFGH坐標(biāo)最大值向下取整遍歷的方式快速定位矩形窗內(nèi)包含的整數(shù)坐標(biāo)點(diǎn)。上述方法雖然降低了FPGA 的計算復(fù)雜度,但是矩形窗的外擴(kuò)會在當(dāng)前滑動窗中引入其余四角點(diǎn)滑動窗需要計算的插值坐標(biāo),如圖7 所示,映射窗口A′B′C′D′中的有效插值點(diǎn)為I,但矩形窗的外擴(kuò)導(dǎo)致無效插值點(diǎn)K 的引入。從而造成K 點(diǎn)雙線性插值的重復(fù)計算,降低仿射圖像的插值精度。
針對上述問題,本文在反向映射部分中添加校驗(yàn)計算模塊實(shí)現(xiàn)無效坐標(biāo)點(diǎn)的剔除。其中,無效坐標(biāo)點(diǎn)的定義為非當(dāng)前滑動窗內(nèi)的插值坐標(biāo)點(diǎn)。根據(jù)前向映射與反向映射的對稱關(guān)系可知,當(dāng)映射窗口中的插值坐標(biāo)( u′,v′)為有效插值坐標(biāo)時,該坐標(biāo)通過反向映射計算后仍然在四角點(diǎn)ABCD 構(gòu)成的滑動窗內(nèi),反之則會落于滑動窗外。根據(jù)上述性質(zhì),校驗(yàn)?zāi)K對選取到的插值坐標(biāo)( u′,v′)進(jìn)行反向映射計算得到坐標(biāo)( x′,y′),判斷( x′,y′)是否在當(dāng)前四角點(diǎn)的滑動窗內(nèi)。若當(dāng)前坐標(biāo)( x′,y′)在四角點(diǎn)ABCD 構(gòu)成的滑動窗內(nèi),則該坐標(biāo)為有效坐標(biāo),并對該坐標(biāo)進(jìn)行后續(xù)的插值計算;若當(dāng)前坐標(biāo)不在滑動窗內(nèi),則判定該坐標(biāo)為無效坐標(biāo),并進(jìn)行舍棄。
校驗(yàn)計算實(shí)現(xiàn)了在當(dāng)前時刻僅對四角點(diǎn)滑動窗內(nèi)的坐標(biāo)進(jìn)行插值計算,剔除由于插值坐標(biāo)選取的FPGA簡化計算帶來的無效坐標(biāo)點(diǎn),避免對無效坐標(biāo)點(diǎn)重復(fù)進(jìn)行插值計算所導(dǎo)致的仿射圖像插值精度下降的問題。
為驗(yàn)證本文提出的基于前置插值的仿射變換算法的可行性,本文在Matlab中對本文提出的方法進(jìn)行了仿真,仿真實(shí)驗(yàn)結(jié)果圖如圖8、圖9 與圖10 所示。圖8、圖9與圖10 中的圖(a)為原圖,圖(b)~圖(e)為不同仿射參數(shù)下的仿射變換圖像,其中實(shí)驗(yàn)中的k 為縮放參數(shù),θ 為旋轉(zhuǎn)參數(shù),實(shí)驗(yàn)中橫向與縱向縮放參數(shù)取值均為k。從實(shí)驗(yàn)結(jié)果可以看出本文提出的基于前置插值的仿射變換算法可以實(shí)現(xiàn)不同參數(shù)下的仿射變換。
圖8 Venice基于前置插值的仿射變換Matlab仿真實(shí)驗(yàn)圖
圖9 Office基于前置插值的仿射變換Matlab仿真實(shí)驗(yàn)圖
圖10 Penguins基于前置插值的仿射變換Matlab仿真實(shí)驗(yàn)圖
為驗(yàn)證本文提出算法的插值精度,采用峰值信噪比(PSNR)衡量仿射圖像與原始圖像相符合程度。首先對原始圖像采用反向映射的方式對圖像進(jìn)行旋轉(zhuǎn)得到兩幅相同的旋轉(zhuǎn)圖像,然后分別通過反向映射的方式與本文算法對旋轉(zhuǎn)圖像進(jìn)行仿射變換得到仿射圖像,并與原始圖像進(jìn)行比較得到PSNR。表1 給出了通過反向映射與無校驗(yàn)的本文算法以及本文算法在不同圖像中的PSNR 指標(biāo)表現(xiàn),從表1 可以看出本文算法的插值精度與基于反向映射的仿射變換的插值精度基本一致,這是因?yàn)楸疚奶岢龅乃惴ㄅc基于反向映射的仿射變換均采用雙線性插值實(shí)現(xiàn)插值計算,因此插值精度基本一致。與此同時,當(dāng)本文算法缺少校驗(yàn)算法時,PSNR指標(biāo)將會出現(xiàn)下降,這是因?yàn)樾r?yàn)?zāi)K的缺少會使得本文算法對部分坐標(biāo)進(jìn)行重復(fù)插值,從而降低了插值精度。
表1 PSNR指標(biāo)實(shí)驗(yàn)對比數(shù)據(jù) dB
為驗(yàn)證本文提出的插值前置的仿射變換FPGA 實(shí)現(xiàn)方法在數(shù)據(jù)傳輸帶寬、存儲資源與數(shù)據(jù)吞吐率中的表現(xiàn),本文采用Altera 公司的Cyclone V 5CEFA7U19C8N芯片,在Quartus II 14.1 的綜合編譯平臺上進(jìn)行進(jìn)一步驗(yàn)證。在驗(yàn)證實(shí)驗(yàn)中,原始圖像數(shù)據(jù)流的輸入時鐘為6.75 MHz,幀頻為50 Hz。
表1 給出了本文提出的實(shí)現(xiàn)方法與其他文獻(xiàn)提出的方法在存儲器傳輸帶寬需求、外部存儲器個數(shù)、內(nèi)部存儲器資源占用率、存儲器讀寫頻率與極限數(shù)據(jù)吞吐率的綜合比較情況。其中,存儲器傳輸帶寬需求為成像系統(tǒng)工作時存儲器在單位時間內(nèi)的數(shù)據(jù)吞吐率。高存儲器傳輸帶寬需要通過消耗更多的存儲資源或者降低極限數(shù)據(jù)吞吐率實(shí)現(xiàn)。存儲器傳輸帶寬需求越低,系統(tǒng)的資源消耗與極限數(shù)據(jù)吞吐率綜合表現(xiàn)越好。fpixel為原始圖像的像素時鐘頻率,在輸入始終頻率相同的情況下,存儲器的讀寫頻率越高,則存儲器越容易到達(dá)讀寫頻率上限,系統(tǒng)的極限數(shù)據(jù)吞吐率越低。由表2 可得,文獻(xiàn)[10]雖然在不使用外部存儲器的情況下達(dá)到了最高的數(shù)據(jù)吞吐率,但片上存儲資源占用率高達(dá)80%,系統(tǒng)可擴(kuò)展性差。文獻(xiàn)[11]所需的外部存儲器個數(shù)則高達(dá)4 個。文獻(xiàn)[12]與文獻(xiàn)[14]的存儲器讀寫頻率為像素頻率fpixel的4 倍,導(dǎo)致系統(tǒng)極限數(shù)據(jù)吞吐率僅為其他方法的1/4。本文的存儲器傳輸帶寬需求為其他方法的1/4,避免了反向映射方法中為實(shí)現(xiàn)4 倍傳輸數(shù)據(jù)帶寬而存在的存儲資源消耗高與降低數(shù)據(jù)吞吐率的問題。最終在使用1 個外部存儲資源并且內(nèi)部存儲資源占用率僅為0.48%的情況下,達(dá)到最大的極限數(shù)據(jù)吞吐率,在存儲資源與數(shù)據(jù)吞吐率方面擁有最好的綜合表現(xiàn)。
表2 不同方法的指標(biāo)對比(fpixel為原始圖像的像素時鐘頻率)
為說明本文提出的基于前置插值的仿射變換在FPGA實(shí)現(xiàn)中資源占用率情況,表3給出了Quartus II 14.1的綜合編譯資源報告。從表3 可以得到以下結(jié)論:本文提出的方法的ALM(算術(shù)邏輯資源),Registers(寄存器)與LUTs(查找表)的占用率均小于3%。與此同時,方法僅占用0.48%的Block Memory(片上存儲資源)與14.1%乘法器資源??傮w上說,本文提出的插值前置的仿射變換FPGA 實(shí)現(xiàn)方法仍然剩余充足的邏輯資源用于其余圖像預(yù)處理算法中。
表3 AlteraCycloneV芯片資源占用表
本文將提出的基于前置插值的FPGA 實(shí)現(xiàn)方法應(yīng)用于可見光與紅外圖像的實(shí)時融合系統(tǒng)之中,融合相機(jī)的實(shí)物圖如圖11 所示。其中,紅外相機(jī)得到的紅外圖像分辨率為400×300??梢姽庀鄼C(jī)的型號為MT9M034,最高可輸出分辨率為1 280×960的可見光圖像。該相機(jī)可通過簡單的寄存器配置實(shí)現(xiàn)分辨率、幀頻等圖像參數(shù)的調(diào)節(jié)。因此,在實(shí)時相機(jī)融合系統(tǒng)中,本文提出的基于前置插值映射的仿射變換方法用于可見光相機(jī)的輸出端,對可見光圖像進(jìn)行旋轉(zhuǎn),縮放與平移,從而達(dá)到紅外圖像與可見光圖像像素間的對齊。首先,對紅外圖像進(jìn)行圖像預(yù)處理,得到清晰的紅外圖像信息,并將紅外圖像數(shù)據(jù)傳輸?shù)娇梢姽庀鄼C(jī)所在的FPGA 芯片。與此同時,對可見光圖像進(jìn)行仿射變換,實(shí)現(xiàn)紅外圖像與可見光圖像的像素對齊。其中,仿射參數(shù)由Matlab仿真獲得,并在系統(tǒng)初始化時便設(shè)置成固定參數(shù)。最后,對紅外圖像與可見光圖像進(jìn)行同步處理之后,對同步的紅外圖像與可見光圖像進(jìn)行融合處理。
圖11 融合相機(jī)實(shí)物圖
融合相機(jī)的實(shí)驗(yàn)結(jié)果圖如圖12 所示。由實(shí)驗(yàn)結(jié)果可得,本文提出的插值前置的仿射變換FPGA 實(shí)現(xiàn)方法可實(shí)現(xiàn)紅外圖像與可見光圖像像素間的對齊。
圖12 融合相機(jī)實(shí)驗(yàn)結(jié)果
針對基于反向映射的仿射變換在FPGA 實(shí)現(xiàn)中遇到的存儲資源消耗高與數(shù)據(jù)吞吐率問題,本文提出了一種基于前置插值的仿射變換數(shù)學(xué)模型,實(shí)現(xiàn)了雙線性插值的前置計算,避免雙線性插值對存儲器的直接讀寫,降低存儲器的傳輸帶寬需求。實(shí)驗(yàn)結(jié)果表明,本文提出的插值前置的仿射變換方法在實(shí)現(xiàn)實(shí)時仿射變換的同時,降低了存儲器的傳輸帶寬需求,擁有更好的存儲器占用率與數(shù)據(jù)吞吐率綜合表現(xiàn)。與此同時,本文提出的仿射變換方法成功實(shí)現(xiàn)紅外圖像與可見光圖像的像素間的對齊。