楊金孝, 張金鳳,, 周堅(jiān)峰, 萬(wàn) 鵬
(1.西北工業(yè)大學(xué) 電子信息學(xué)院,陜西 西安 710129;2.中航工業(yè)無(wú)線電電子研究所 上海 200233;3.中國(guó)人民解放軍邊防學(xué)院訓(xùn)練部辦公室 陜西 西安710108)
由于顯示器分辨率是固定的,所以當(dāng)源輸入圖像分辨率與顯示器的分辨率不匹配時(shí),必須使用圖像縮放引擎對(duì)輸人圖像分辨率進(jìn)行調(diào)節(jié)使其在顯示器上滿屏顯示。
圖像縮放的算法很多,目前應(yīng)用于圖像縮放的算法主要分兩大類[1],第l類是不基于邊緣的圖像縮放算法,主要包括:最近鄰插值算法、雙線性插值算法、雙三次插值算法、B樣條插值算法等,在這類算法中,新得到的目標(biāo)像素值與圖像的邊緣信息無(wú)關(guān),只與其位置及其鄰域的像素值有關(guān),這些經(jīng)典算法硬件實(shí)現(xiàn)比較容易,數(shù)據(jù)處理過(guò)程容易控制,計(jì)算時(shí)間相對(duì)較短,但是低階算法得到的圖像會(huì)出現(xiàn)“馬賽克”現(xiàn)象[2],而高階算法由于“振鈴”效應(yīng)會(huì)使圖像邊界模糊[3]。第2類是基于邊緣的圖像插值算法,這類算法新得到的目標(biāo)像素點(diǎn)的灰度值與源圖像的邊緣相關(guān),縮放后的圖像有很好的視覺(jué)效果,圖像失真度比較小,但是此類算法硬件實(shí)現(xiàn)復(fù)雜,數(shù)據(jù)運(yùn)算的時(shí)間長(zhǎng),占用了比較多的片上資源,很少應(yīng)用于實(shí)時(shí)條件下的圖像縮放[4-5]。文中設(shè)計(jì)的縮放引擎用到的圖像插值方法是一種用于實(shí)時(shí)條件下的基于邊緣的自適應(yīng)圖像插值算法。該算法通過(guò)比較相鄰源像素的二階差商[6]的絕對(duì)值自動(dòng)選取一組源像素,之后根據(jù)二階牛頓插值公式獲得目標(biāo)像素的值。文獻(xiàn)[6]通過(guò)比較各種插值算法處理圖像的主觀視覺(jué)效果、峰值信噪比及邊緣信息,得出該算法不僅獲得了比不基于邊緣插值算法更滿意的視覺(jué)效果,而且復(fù)雜度比不基于邊緣的雙三次插值算法更低,遠(yuǎn)低于傳統(tǒng)的基于邊緣的插值算法。
傳統(tǒng)的基于邊緣的插值算法通過(guò)檢測(cè)源圖像的邊緣,根據(jù)圖像的邊緣信息對(duì)圖像的不同區(qū)域采用不同的插值方法。此方法不但對(duì)圖像進(jìn)行邊緣檢測(cè),而且要存儲(chǔ)圖像的邊緣信息。因此,由于其復(fù)雜性高一般不用于實(shí)時(shí)圖像處理。
對(duì)圖像進(jìn)行實(shí)時(shí)縮放處理時(shí),通常將二維圖像分解成水平和垂直兩個(gè)一維方向分別進(jìn)行插值處理。除邊界像素點(diǎn)外[7],目標(biāo)圖像中任意像素點(diǎn)與源圖像像素點(diǎn)的位置關(guān)系如圖1所示,任何目標(biāo)像素點(diǎn)F均能找到與之對(duì)應(yīng)的源像素點(diǎn)f0、f1、 f2、 f3,其中 dx(1≤dx<2)為目標(biāo)像素點(diǎn) F 與源像素點(diǎn)間的距離。這樣,采用二階牛頓插值函數(shù)得到目標(biāo)像素點(diǎn)F的灰度值為:
當(dāng)采用公式(1)來(lái)計(jì)算目標(biāo)像素的灰度值時(shí),圖1中的目標(biāo)像素灰度值 F 可以通過(guò)源像素(f0、 f1、 f2)或(f1、 f2、 f3)計(jì)算得到。當(dāng)f0、f1、f2、f3灰度值差別不大,處于圖像的平坦區(qū)域時(shí),使用以上兩組源像素計(jì)算得到F的灰度值基本相同;而當(dāng)f0、f1、f2、f3灰度值差別很大,處于圖像細(xì)節(jié)部分或邊沿時(shí),使用以上兩組源像素計(jì)算得到F的灰度值將差距很大。
圖1 自適應(yīng)牛頓插值的一維計(jì)算模型Fig.1 Adaptive Newton interpolation’s one dimensional calculate model
若采用傳統(tǒng)的差值算法,如最近鄰插值和雙線性插值,目標(biāo)像素點(diǎn)F只與源像素點(diǎn)f0、f1有關(guān),而采用雙三次插值計(jì)算的目標(biāo)像素點(diǎn)F與源像素點(diǎn)f0、f1、f2、f3有關(guān)。但這些算法都不判斷源圖像中各像素點(diǎn)之間的相關(guān)性,結(jié)果不同程度地導(dǎo)致包含豐富信息的圖像邊緣模糊。各像素點(diǎn)間的相關(guān)性隱含在圖像本身,只要選擇一個(gè)合適的參數(shù)便能得到這一重要特征。
源像素點(diǎn)(f0、 f1、 f2)和(f1、 f2、 f3)的二階差商定義如下:
這樣,將相鄰3個(gè)點(diǎn)的二階差商的絕對(duì)值作為衡量該3個(gè)點(diǎn)的相關(guān)性大小的標(biāo)準(zhǔn),絕對(duì)值越小,相關(guān)性越大,表明該組各像素處在同一圖像區(qū)域的可能性越大,反之亦然。通過(guò)比較兩組源像素點(diǎn)的相關(guān)性,選擇計(jì)算目標(biāo)像素F的值的一組源像素,然后再采用二階牛頓插值公式完成目標(biāo)像素點(diǎn)的計(jì)算。綜上所述,基于圖像邊緣計(jì)算目標(biāo)像素F的值的插值公式如下:
按照第2章介紹的自適應(yīng)牛頓插值算法,對(duì)算法進(jìn)行面向硬件設(shè)計(jì)的優(yōu)化和改進(jìn),完成了視頻圖像縮放引擎的硬件實(shí)現(xiàn)。系統(tǒng)對(duì)數(shù)據(jù)的處理過(guò)程可以分為兩個(gè)階段:首先對(duì)每個(gè)有效掃描行中的有效像素作水平方向的縮放處理,之后以掃描行為單位作垂直方向的縮放處理。整個(gè)圖像縮放引擎由四個(gè)順序連接的子模塊即輸入FIFO、水平縮放模塊、行緩沖存儲(chǔ)器1以及垂直縮放模塊所構(gòu)成,如圖2所示。每個(gè)縮放單元輸出的插值點(diǎn)只和輸入的四個(gè)點(diǎn)關(guān)聯(lián),使自適應(yīng)牛頓插值算法得以硬件實(shí)現(xiàn)的同時(shí)又節(jié)省資源。使用同一個(gè)縮放引擎可以實(shí)現(xiàn)放大和縮小操作,可移植性好,且不限制縮放倍數(shù)的范圍和取值(如有些縮放模塊限制縮放倍數(shù)必須為2k)。
圖2 縮放內(nèi)核模塊結(jié)構(gòu)框圖Fig.2 System block diagram of image scaling program
緩沖存儲(chǔ)器用來(lái)存儲(chǔ)縮放前后的圖像數(shù)據(jù)信息,本設(shè)計(jì)中使用異步FIFO和雙端口RAM作為緩沖。由于縮放內(nèi)核工作在多時(shí)鐘域,因此在本設(shè)計(jì)中采用異步FIFO作為數(shù)據(jù)緩沖區(qū)來(lái)完成圖像的暫存功能,一方面以源時(shí)鐘將圖像數(shù)據(jù)信號(hào)寫入FIFO,兩一方面以水平縮放時(shí)鐘從FIFO中讀取水平縮放模塊需要的數(shù)據(jù)。
在進(jìn)行水平插值之前,需要先接受四行數(shù)據(jù)后才能開始處理。為保證系統(tǒng)能連續(xù)、快速處理接受的數(shù)據(jù)信號(hào),在水平縮放模塊和輸入FIFO之間加上一個(gè)由4個(gè)雙端口RAM組成數(shù)據(jù)緩沖區(qū)1,每個(gè)雙端口RAM的容量為一行目標(biāo)分辨率的圖像數(shù)據(jù),從FIFO讀取的數(shù)據(jù)只能寫入緩沖區(qū)1,水平縮放模塊只能讀取緩沖區(qū)1。使用HDL代碼編寫狀態(tài)機(jī)對(duì)4個(gè)RAM緩沖模塊控制,并產(chǎn)生一個(gè)FIFO讀取命令fifo-rd,控制從FIFO讀取數(shù)據(jù),使FIFO不溢出,且能滿足輸入和水平處理的速度要求。
水平縮放模塊輸出的數(shù)據(jù)是按行輸出的,而垂直縮放模塊需要四行中的同列數(shù)據(jù)來(lái)進(jìn)行垂直方向上的縮放。而根據(jù)縮放比例的不同,時(shí)域上行與行間可能存在間斷,為了進(jìn)行垂直方向上的縮放運(yùn)算,在水平縮放和垂直縮放模塊之間需要一個(gè)由5個(gè)雙口RAM組成的數(shù)據(jù)緩沖2,每個(gè)雙端口RAM的容量為一行目標(biāo)分辨率的圖像數(shù)據(jù)。水平縮放模塊只能對(duì)緩沖區(qū)2進(jìn)行寫操作,垂直縮放模塊只能對(duì)緩沖區(qū)2進(jìn)行讀操作。
根據(jù)插值運(yùn)算公式(4)進(jìn)行實(shí)時(shí)插值運(yùn)算時(shí),需要準(zhǔn)確及時(shí)的求出兩個(gè)運(yùn)算系數(shù)dx和dy[8-9]。由于FPGA本身不支持浮點(diǎn)運(yùn)算,需要設(shè)計(jì)一種浮點(diǎn)運(yùn)算器來(lái)實(shí)現(xiàn)計(jì)算過(guò)程中的浮點(diǎn)運(yùn)算。為了保證計(jì)算精度,將縮放因子擴(kuò)展到16位,高4位表示整數(shù)部分,低12位表示小數(shù)部分,即Fix_16_12。根據(jù)不同分辨率之間可能出現(xiàn)的縮放比例關(guān)系,把水平方向和垂直方向縮放因子的累加和輸出分別設(shè)計(jì)為Fix_21_12和Fix_22_12。采用上述浮點(diǎn)表示方法后,dx和dy就變成累加和的小數(shù)部分與13’b1的和,恰好可以通過(guò)把1與截取的Fix_21_12和Fix_22_12的低12位并位得到dx和dy系數(shù)。用FPGA內(nèi)數(shù)字邏輯完成浮點(diǎn)運(yùn)算時(shí),我們必須時(shí)刻記住每個(gè)浮點(diǎn)數(shù)表示為二進(jìn)制碼的小數(shù)位在哪位上。擴(kuò)展后的數(shù)據(jù)運(yùn)算后需要將結(jié)果除以,即右移12位。
插值計(jì)算模塊是縮放模塊中占用資源較大的模塊,運(yùn)算器結(jié)構(gòu)的簡(jiǎn)化可以極大的降低所消耗的資源,降低縮放模塊實(shí)現(xiàn)的復(fù)雜度。由(1)可以看出,本方法需3次乘法和5次加法完成一次插值運(yùn)算。而雙三次插值計(jì)算一目標(biāo)像素點(diǎn)需5次乘法和10次加法運(yùn)算,對(duì)比這兩種算法,本算法約減少40%的計(jì)算量[10]。根據(jù)公式(4)設(shè)計(jì)了一種具有3級(jí)流水線特性的運(yùn)算邏輯結(jié)構(gòu),如圖3所示。系統(tǒng)的輸入f0、f1、f2、f3由緩沖區(qū)1、緩沖區(qū)2提供,通過(guò)并行的加法運(yùn)算即可得到一階差 商 Δ f0、Δ f1、Δ f2和 二 階 差 商 Δ2f0、Δ2f1, 比 較和的大小產(chǎn)生的邏輯量作為3個(gè)多路選擇器 (MUX)的判斷條件,多路選擇器自動(dòng)選擇一組值參與式(4)所示的求和運(yùn)算最終得到插值結(jié)果F。
圖3 插值計(jì)算模塊單元Fig.3 Logical structure of interpolation calculating unit
在自適應(yīng)牛頓插值圖像縮放算法的上述功能模塊設(shè)計(jì)完成后,用Verilog HDL語(yǔ)言對(duì)算法進(jìn)行描述,并在Xilinx公司提供的可編程邏輯器件集成開發(fā)環(huán)境Xilinx ISE10.1中進(jìn)行編譯和綜合,目標(biāo)FPGA芯片選為Virtex-4系列的XC4VSX-35。經(jīng)實(shí)驗(yàn)驗(yàn)證,本文采用的算法能較好的消除插值后出現(xiàn)的圖像邊緣模糊,提高插值后圖像的質(zhì)量,得到令人滿意的圖像縮放效果,且計(jì)算復(fù)雜度小、硬件資源需求少。
提出了一種基于邊緣自適應(yīng)插值算法的縮放引擎的有效設(shè)計(jì)方法,設(shè)計(jì)了硬件實(shí)現(xiàn)結(jié)構(gòu),并用Verilog語(yǔ)言進(jìn)行描述,綜合出目標(biāo)代碼,最后搭建FPGA驗(yàn)證平臺(tái)。從實(shí)驗(yàn)結(jié)果可以看出,采用該算法進(jìn)行圖像縮放可得到滿意的視覺(jué)效果,而且算法復(fù)雜度低,便于硬件實(shí)現(xiàn)。綜上所述,該算法適應(yīng)于實(shí)時(shí)條件下的圖像縮放。
[1]趙慧波.用于平板顯示器的圖像縮放引擎的設(shè)計(jì)與研究[D].武漢:華中科技大學(xué),2005.
[2]劉志軍,蔡超,彭曉明,等.一種新穎的基于遺傳算法的正則化圖像插值方法 [J].中國(guó)圖象圖形學(xué)報(bào),2004,9(8):935-940.LIU Zhi-jun,CAI Chao,PENG Xiao-ming,et a1.A novel regularized image interpolation algorithm based on genetic algorithm[J].Journal of Image and Graphics,2004,9 (8):935-940.
[3]OHIRA M,MORI K,WADA K,et al.High quality image restoration by adaptively transformed sampling function[C]//Proceedings of IEEE Conference on Communication,Computer and Signal Processing,in Victoria,Canada,1999:201-204.
[4]Jensen K,Anastassiou D.Subpixel edge localization and the interpolation of still images[J].IEEE Transactions on Image Processing,1995,4(3):285-295.
[5]Xin L,Orchard,M T.New edge-directed interpolation[J].IEEE Transactions on Image Processing,2001,10(10):1521-1527.
[6]XIAO Jian-ping,ZOU Xue-cheng,LIU Zheng-lin,et al.Adaptive interpolation algorithm for real-time image resizing[C]//IEEE Proceedings of the First International Conference on Innovative Computing, Information and Control(ICICIC'06),2006:221-224.
[7]劉政林,肖建平,鄒雪城,等.基于邊緣的實(shí)時(shí)圖像縮放算法研究[J].中國(guó)圖象圖形學(xué)報(bào),2008,13(2):225-229.LIU Zheng-lin,XIAO Jian-ping,ZOU Xue-cheng,et al.Edgebased algorithm of real-time image resizing[J].Journal of Image and Graphics,2008,13(2):225-229.
[8]鄭俊杰,陸虎敏,方向忠.基于自適應(yīng)插值算法的視頻圖像縮放技術(shù)及其FPGA實(shí)現(xiàn)[J].航空電子技術(shù),2008,39(2):46-50.ZHENG Jun-jie,LU Hu-min,F(xiàn)ANG Xiang-zhong.Video image sealing technology based on adaptive interpolation algorithm and its implement by using FPGA[J].Avionics Technology,2008,39(2):46-50.
[9]盛磊.面向特種LCD圖像處理方法與FPGA實(shí)現(xiàn)研究[D].合肥:合肥工業(yè)大學(xué),2005.
[10]Han J K,Baek S U.Parametric cubic convolution scaler for enlargement and reduction of image[J].IEEE Transactions on Consumer Electronics,2000,46(2):247-256.