楊金孝, 張金鳳,, 周堅峰, 萬 鵬
(1.西北工業(yè)大學 電子信息學院,陜西 西安 710129;2.中航工業(yè)無線電電子研究所 上海 200233;3.中國人民解放軍邊防學院訓練部辦公室 陜西 西安710108)
由于顯示器分辨率是固定的,所以當源輸入圖像分辨率與顯示器的分辨率不匹配時,必須使用圖像縮放引擎對輸人圖像分辨率進行調節(jié)使其在顯示器上滿屏顯示。
圖像縮放的算法很多,目前應用于圖像縮放的算法主要分兩大類[1],第l類是不基于邊緣的圖像縮放算法,主要包括:最近鄰插值算法、雙線性插值算法、雙三次插值算法、B樣條插值算法等,在這類算法中,新得到的目標像素值與圖像的邊緣信息無關,只與其位置及其鄰域的像素值有關,這些經(jīng)典算法硬件實現(xiàn)比較容易,數(shù)據(jù)處理過程容易控制,計算時間相對較短,但是低階算法得到的圖像會出現(xiàn)“馬賽克”現(xiàn)象[2],而高階算法由于“振鈴”效應會使圖像邊界模糊[3]。第2類是基于邊緣的圖像插值算法,這類算法新得到的目標像素點的灰度值與源圖像的邊緣相關,縮放后的圖像有很好的視覺效果,圖像失真度比較小,但是此類算法硬件實現(xiàn)復雜,數(shù)據(jù)運算的時間長,占用了比較多的片上資源,很少應用于實時條件下的圖像縮放[4-5]。文中設計的縮放引擎用到的圖像插值方法是一種用于實時條件下的基于邊緣的自適應圖像插值算法。該算法通過比較相鄰源像素的二階差商[6]的絕對值自動選取一組源像素,之后根據(jù)二階牛頓插值公式獲得目標像素的值。文獻[6]通過比較各種插值算法處理圖像的主觀視覺效果、峰值信噪比及邊緣信息,得出該算法不僅獲得了比不基于邊緣插值算法更滿意的視覺效果,而且復雜度比不基于邊緣的雙三次插值算法更低,遠低于傳統(tǒng)的基于邊緣的插值算法。
傳統(tǒng)的基于邊緣的插值算法通過檢測源圖像的邊緣,根據(jù)圖像的邊緣信息對圖像的不同區(qū)域采用不同的插值方法。此方法不但對圖像進行邊緣檢測,而且要存儲圖像的邊緣信息。因此,由于其復雜性高一般不用于實時圖像處理。
對圖像進行實時縮放處理時,通常將二維圖像分解成水平和垂直兩個一維方向分別進行插值處理。除邊界像素點外[7],目標圖像中任意像素點與源圖像像素點的位置關系如圖1所示,任何目標像素點F均能找到與之對應的源像素點f0、f1、 f2、 f3,其中 dx(1≤dx<2)為目標像素點 F 與源像素點間的距離。這樣,采用二階牛頓插值函數(shù)得到目標像素點F的灰度值為:
當采用公式(1)來計算目標像素的灰度值時,圖1中的目標像素灰度值 F 可以通過源像素(f0、 f1、 f2)或(f1、 f2、 f3)計算得到。當f0、f1、f2、f3灰度值差別不大,處于圖像的平坦區(qū)域時,使用以上兩組源像素計算得到F的灰度值基本相同;而當f0、f1、f2、f3灰度值差別很大,處于圖像細節(jié)部分或邊沿時,使用以上兩組源像素計算得到F的灰度值將差距很大。
圖1 自適應牛頓插值的一維計算模型Fig.1 Adaptive Newton interpolation’s one dimensional calculate model
若采用傳統(tǒng)的差值算法,如最近鄰插值和雙線性插值,目標像素點F只與源像素點f0、f1有關,而采用雙三次插值計算的目標像素點F與源像素點f0、f1、f2、f3有關。但這些算法都不判斷源圖像中各像素點之間的相關性,結果不同程度地導致包含豐富信息的圖像邊緣模糊。各像素點間的相關性隱含在圖像本身,只要選擇一個合適的參數(shù)便能得到這一重要特征。
源像素點(f0、 f1、 f2)和(f1、 f2、 f3)的二階差商定義如下:
這樣,將相鄰3個點的二階差商的絕對值作為衡量該3個點的相關性大小的標準,絕對值越小,相關性越大,表明該組各像素處在同一圖像區(qū)域的可能性越大,反之亦然。通過比較兩組源像素點的相關性,選擇計算目標像素F的值的一組源像素,然后再采用二階牛頓插值公式完成目標像素點的計算。綜上所述,基于圖像邊緣計算目標像素F的值的插值公式如下:
按照第2章介紹的自適應牛頓插值算法,對算法進行面向硬件設計的優(yōu)化和改進,完成了視頻圖像縮放引擎的硬件實現(xiàn)。系統(tǒng)對數(shù)據(jù)的處理過程可以分為兩個階段:首先對每個有效掃描行中的有效像素作水平方向的縮放處理,之后以掃描行為單位作垂直方向的縮放處理。整個圖像縮放引擎由四個順序連接的子模塊即輸入FIFO、水平縮放模塊、行緩沖存儲器1以及垂直縮放模塊所構成,如圖2所示。每個縮放單元輸出的插值點只和輸入的四個點關聯(lián),使自適應牛頓插值算法得以硬件實現(xiàn)的同時又節(jié)省資源。使用同一個縮放引擎可以實現(xiàn)放大和縮小操作,可移植性好,且不限制縮放倍數(shù)的范圍和取值(如有些縮放模塊限制縮放倍數(shù)必須為2k)。
圖2 縮放內(nèi)核模塊結構框圖Fig.2 System block diagram of image scaling program
緩沖存儲器用來存儲縮放前后的圖像數(shù)據(jù)信息,本設計中使用異步FIFO和雙端口RAM作為緩沖。由于縮放內(nèi)核工作在多時鐘域,因此在本設計中采用異步FIFO作為數(shù)據(jù)緩沖區(qū)來完成圖像的暫存功能,一方面以源時鐘將圖像數(shù)據(jù)信號寫入FIFO,兩一方面以水平縮放時鐘從FIFO中讀取水平縮放模塊需要的數(shù)據(jù)。
在進行水平插值之前,需要先接受四行數(shù)據(jù)后才能開始處理。為保證系統(tǒng)能連續(xù)、快速處理接受的數(shù)據(jù)信號,在水平縮放模塊和輸入FIFO之間加上一個由4個雙端口RAM組成數(shù)據(jù)緩沖區(qū)1,每個雙端口RAM的容量為一行目標分辨率的圖像數(shù)據(jù),從FIFO讀取的數(shù)據(jù)只能寫入緩沖區(qū)1,水平縮放模塊只能讀取緩沖區(qū)1。使用HDL代碼編寫狀態(tài)機對4個RAM緩沖模塊控制,并產(chǎn)生一個FIFO讀取命令fifo-rd,控制從FIFO讀取數(shù)據(jù),使FIFO不溢出,且能滿足輸入和水平處理的速度要求。
水平縮放模塊輸出的數(shù)據(jù)是按行輸出的,而垂直縮放模塊需要四行中的同列數(shù)據(jù)來進行垂直方向上的縮放。而根據(jù)縮放比例的不同,時域上行與行間可能存在間斷,為了進行垂直方向上的縮放運算,在水平縮放和垂直縮放模塊之間需要一個由5個雙口RAM組成的數(shù)據(jù)緩沖2,每個雙端口RAM的容量為一行目標分辨率的圖像數(shù)據(jù)。水平縮放模塊只能對緩沖區(qū)2進行寫操作,垂直縮放模塊只能對緩沖區(qū)2進行讀操作。
根據(jù)插值運算公式(4)進行實時插值運算時,需要準確及時的求出兩個運算系數(shù)dx和dy[8-9]。由于FPGA本身不支持浮點運算,需要設計一種浮點運算器來實現(xiàn)計算過程中的浮點運算。為了保證計算精度,將縮放因子擴展到16位,高4位表示整數(shù)部分,低12位表示小數(shù)部分,即Fix_16_12。根據(jù)不同分辨率之間可能出現(xiàn)的縮放比例關系,把水平方向和垂直方向縮放因子的累加和輸出分別設計為Fix_21_12和Fix_22_12。采用上述浮點表示方法后,dx和dy就變成累加和的小數(shù)部分與13’b1的和,恰好可以通過把1與截取的Fix_21_12和Fix_22_12的低12位并位得到dx和dy系數(shù)。用FPGA內(nèi)數(shù)字邏輯完成浮點運算時,我們必須時刻記住每個浮點數(shù)表示為二進制碼的小數(shù)位在哪位上。擴展后的數(shù)據(jù)運算后需要將結果除以,即右移12位。
插值計算模塊是縮放模塊中占用資源較大的模塊,運算器結構的簡化可以極大的降低所消耗的資源,降低縮放模塊實現(xiàn)的復雜度。由(1)可以看出,本方法需3次乘法和5次加法完成一次插值運算。而雙三次插值計算一目標像素點需5次乘法和10次加法運算,對比這兩種算法,本算法約減少40%的計算量[10]。根據(jù)公式(4)設計了一種具有3級流水線特性的運算邏輯結構,如圖3所示。系統(tǒng)的輸入f0、f1、f2、f3由緩沖區(qū)1、緩沖區(qū)2提供,通過并行的加法運算即可得到一階差 商 Δ f0、Δ f1、Δ f2和 二 階 差 商 Δ2f0、Δ2f1, 比 較和的大小產(chǎn)生的邏輯量作為3個多路選擇器 (MUX)的判斷條件,多路選擇器自動選擇一組值參與式(4)所示的求和運算最終得到插值結果F。
圖3 插值計算模塊單元Fig.3 Logical structure of interpolation calculating unit
在自適應牛頓插值圖像縮放算法的上述功能模塊設計完成后,用Verilog HDL語言對算法進行描述,并在Xilinx公司提供的可編程邏輯器件集成開發(fā)環(huán)境Xilinx ISE10.1中進行編譯和綜合,目標FPGA芯片選為Virtex-4系列的XC4VSX-35。經(jīng)實驗驗證,本文采用的算法能較好的消除插值后出現(xiàn)的圖像邊緣模糊,提高插值后圖像的質量,得到令人滿意的圖像縮放效果,且計算復雜度小、硬件資源需求少。
提出了一種基于邊緣自適應插值算法的縮放引擎的有效設計方法,設計了硬件實現(xiàn)結構,并用Verilog語言進行描述,綜合出目標代碼,最后搭建FPGA驗證平臺。從實驗結果可以看出,采用該算法進行圖像縮放可得到滿意的視覺效果,而且算法復雜度低,便于硬件實現(xiàn)。綜上所述,該算法適應于實時條件下的圖像縮放。
[1]趙慧波.用于平板顯示器的圖像縮放引擎的設計與研究[D].武漢:華中科技大學,2005.
[2]劉志軍,蔡超,彭曉明,等.一種新穎的基于遺傳算法的正則化圖像插值方法 [J].中國圖象圖形學報,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]劉政林,肖建平,鄒雪城,等.基于邊緣的實時圖像縮放算法研究[J].中國圖象圖形學報,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]鄭俊杰,陸虎敏,方向忠.基于自適應插值算法的視頻圖像縮放技術及其FPGA實現(xiàn)[J].航空電子技術,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實現(xiàn)研究[D].合肥:合肥工業(yè)大學,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.