樊凌雁,徐向陽
(1.杭州電子科技大學微電子研究中心,浙江 杭州310018;2.杭州士蘭微電子股份有限公司設計所,浙江 杭州310012)
數字視頻信號處理的后端,經過處理后的視頻信號需要支持不同分辨率的顯示器。故需要采用相應的圖像縮放處理技術將輸入信號的分辨率進行縮放處理以適應不同顯示器的需要。在縮放處理過程中,讓視頻信號仍平滑顯示,要對像素進行插值運算[1-2]。目前圖像縮放處理通常采用的方法有最鄰近點法、雙線性內插法、雙三次插值法和基于圖像邊緣的算法等[3-5]。這些插值算法多種多樣,各有優(yōu)缺點,如最鄰近點法、雙線性內插法算法簡單、容易實現,但是效果一般;基于圖像邊緣的算法在圖像邊緣區(qū)域做特殊處理,圖像邊緣清晰可見,但是算法實現復雜度高。在視頻處理的場合,為提高速度,需要采用硬件方法實現差值算法。目前在進行硬件圖像處理過程中,因考慮實現復雜度的問題,大多采用最鄰近點法和低次數的插值算法,圖像顯示的質量較差[6]。為保證在高速進行視頻處理過程中,同時達到圖像縮放處理的高質量要求,本文提出了一種基于雙三次的視頻縮放插值的實現方法,針對不同的分辨率,將輸入信號進行縮小或放大處理,來適應后續(xù)顯示器的需要。并在FPGA 上得到實現,滿足視頻圖像縮放的要求。
雙線性算法插值目標圖像中需要的像素值是由源圖像位置在它附近的2×2 區(qū)域4個鄰近像素通過加權平均計算得出的。相比于雙線性插值算法,對于放大后未知的像素點,以4點為例,雙三次插值算法將對其影響的范圍擴大到鄰近的16個像素點,依據對待求點的遠近影響進行插值計算,是三次插值在二維空間上的擴展,可得到較細致的影像。雙三次插值算法即克服了最鄰近插值算法出現的邊緣階梯現象,又消除了雙線性插值算法的邊緣模糊效應,是一種插值效果較好但是運算量大的插值算法。
雙三次插值算法的目標像素如圖1所示。圖1中,空心圓代表低分辨率圖像中的像素,實心圓代表待插值的高分辨率像素,(i,j)是原圖像中像素的坐標,(i+p,j+q)是待插值的高分辨率像素的坐標。
圖1 雙三次插值算法的目標像素
雙三次插值基于如下的三階多項式產生插值系數:
式中,w為目標插值點與周圍鄰近點的距離。
雙三次插值算法的插值公式如下:
式中,A,B,C代表3個矩陣:
式中,S(w)代表插值基函數,f(i,j)代表原圖像像素的灰度值,矩陣B 包含雙三次估計窗口的所有像素。
雙三次插值硬件實現時,為降低計算復雜度,通常分解為水平和垂直處理的兩個一維的插值。整個處理分為4次水平處理和一次垂直處理兩個過程。
視頻縮放模塊的硬件實現模塊如圖2所示,視頻信號在縮放前,首先要先放入先入先出緩存器(FIFO)中緩存,然后進行水平縮放,縮放后數據放入行緩沖區(qū),在從緩沖區(qū)中取出數據進行垂直縮放。最后經過處理成特定的接口信號送入顯示器中顯示。
圖2 視頻縮放模塊框圖
無論是行處理還是列處理,目標像素和源像素的距離決定了插值系數的大小,在具體硬件實現時,為了易于實現,插值系數采用分段處理,并且先進行水平縮放再進行垂直縮放。在FPGA實現時,采用如圖3所示的框圖實現水平縮放,垂直縮放的實現原理類似。
圖3 水平縮放的內部實現框圖
圖3中,DFF表示移位寄存器,插值系數矩陣根據式(1)得到:
為了降低計算復雜度,距離系數事先計算好,采用矩陣形式存放在處理器的存儲器中,視頻信號輸出時,根據顯示器的分辨率,選擇調入不同的系數矩陣,實現不同的縮放比例。舉例來說,如果輸入信號的分辨率為x,輸出信號的分辨率為y,則縮放比例:x/y=n(k/g),n為整數,k <g,調入的系數矩陣即為k/g 帶入式(6)后得到。
舉例子說明,如果縮放比例為0/16,縮放比例為整數,縮放系數為[0 255 0 0]/256,也就是對輸出信號有影響的就是當前位的圖像灰度值;如果縮放比例為1/16,縮放系數為[-7 252 10 0]/256,除了當前位,前一位和后一位的像素值影響輸出,影響比例由系數大小決定。
視頻縮放模塊在某公司數字視頻信號處理芯片中應用,用Verilog 語言對算法進行描述,并在Xilinx公司提供的可編程邏輯器件集成開發(fā)環(huán)境Xilinx ISE10.1 中進行編譯和綜合,目標FPGA 芯片選為Virtex-4系列的XC4VSX-35,已通過FPGA 驗證。因為采用了在RAM 中配置不同分辨率的系數,所以可以支持縮小放大32倍以內的視頻信號,后續(xù)的顯示器支持標準視頻信號和高清視頻信號。
在VCS仿真測試中,通過測試現有的標準視頻信號和高清視頻信號之間的縮放,都滿足要求。水平放大的仿真結果如圖4所示。輸入視頻信號是720列,輸出到顯示器的視頻信號是1 280列,故放大倍數是16/9倍。圖4中,兩條白色光標之間數據顯示了放大過程。器件輸入的數據計數信號是8 16,共9個像素點,對應的輸出像素計數信號是7 22,共16個像素,完成了放大過程。視頻信號的水平縮小仿真結果如圖5所示。
圖4 水平放大(720列到1 280列)
圖5 水平縮小(1 280列到720列)
經過FPGA實現算法的實際圖片放大效果如圖6、圖7所示,圖6為720×480的圖片,圖6采用本文算法放大為1 280×720 后如圖7所示,兩張圖片均采用30%顯示。
圖6 原圖720×480(30%顯示)
圖7 放大為1 280×720的圖(30%顯示)
本文針對視頻后處理信號,提出了一種視頻縮放插值算法的FPGA 硬件實現方案。在縮放插值算法實現時,采用插值矩陣存放插值系數,根據視頻輸入和輸出信號的縮放關系,調用對應的插值系數,實現圖像縮放,保證插值效果,可支持多種分辨率的顯示器輸出。
[1]尤玉虎,周孝寬.數字圖像最佳插值算法研究[J].中國空間科學技術,2005,3(6):14-18.
[2]Kemal U,Alshin A,Alshina E,et al.Motion Compensated Prediction and Interpolation Filter Design in H.265/HEVC[J].2013,7(6):946-956.
[3]Sonka M,Hlavac V,Boyle.Image Processing,Analysis and Machine Vision[M].Canada:Thomson,2007:121-134.
[4]程光權,成禮智.基于小波的方向自適應圖像插值[J].電子與信息學報,2009,3(2):265-269.
[5]任杰,劉家瑛,白蔚,等.基于隱式分段自回歸模型的圖像插值算法[J].軟件學報,2012,23(5):1 248-1 259.
[6]李開宇,張煥春,經亞枝.基于FPGA 動態(tài)可重構的高速、高質量的圖像放大[J].中國圖象圖形學報,2005,10(1):69-74.