陳全兵,習友寶
(電子科技大學 電子工程學院,四川 成都 611731)
基于雙線性內插算法的多路視頻縮放設計
陳全兵,習友寶
(電子科技大學 電子工程學院,四川 成都 611731)
基于雙線性內插算法,設計改進了一種以FPGA為硬件平臺的多路視頻信號的圖像縮放裝置。把與期望位置相鄰的兩行像素緩存在RAM中,先對垂直方向進行插值運算,再對水平方向進行插值運算。利用FPGA并行處理的優勢實現多路視頻信號的實時縮放。
雙線性內插算法;FPGA;多路視頻圖像縮放
隨著生活水平的提高,人們對視頻圖像的分辨率和流暢度的要求也越來越高。在視頻圖像的處理過程中,既要求提高分辨率又要保證圖像的傳輸速度(即輸出幀率);在涉及到多路視頻信號同時處理時,處理速度就成為了一個瓶頸性問題。基于FPGA并行處理速度快的優勢,設計本圖像縮放裝置,用以實現多路視頻圖像的實時縮放。
圖像縮放變換屬于圖像幾何變換的一種類型,圖像縮放要實現的就是在輸出像素和輸入像素之間建立一種映射關系,使得在輸出圖像的每一個位置均有待輸出像素值產生。輸出像素和輸入像素之間的映射關系可以有兩種不同的定義方法:前向映射和逆向映射[1]。
前向映射將輸出像素的坐標定義為輸入像素的坐標的函數mf,如式1所示,其中Q[u,v]表示輸出像素坐標,I(x,y)表示輸入像素坐標。前向映射有兩個問題:1),如果對圖像進行放大操作,在輸出圖像中將會有部分像素點沒有相對應的輸入像素,即產生空洞現象;2),如果對圖像進行縮小操作,輸出圖像中的部分像素點將會對應輸入像素中的多個像素點,使得輸出出現混亂。
(1)
逆向映射將輸入像素的坐標定義為輸出像素的坐標的函數me,如式(2)所示,其中Q[u,v]表示輸出像素坐標,I(x,y)表示輸入像素坐標。逆向映射對每一個輸出像素逆向映射出對應的輸入像素,因此更適合產生輸出數據流。當采用逆向映射對圖像進行縮放操作時,被逆向映射出的坐標值往往不是整數,為了估計輸出的像素值通常要在期望位置處對輸入像素值進行重采樣,等效于用一個采樣插值核對輸入的像素值進行加權[1],如式(3)所示,其中C(x,y)表示采樣函數,I[x,y]表示輸入像素坐標,K[x,y]表示插值內核。
(2)
(3)
常見的圖像插值算法有最近鄰內插算法、雙線性內插算法、雙三次內插算法和B樣條插值算法[2]。
最近鄰內插算法是最簡單的圖像插值算法,該算法的原理為直接選取距離期望位置最近的源圖像位置的像素值作為輸出像素值。該算法丟失了源圖像中的大量信息,使得圖像變得模糊邊緣部分不清晰,放大后有馬賽克現象,縮小后有嚴重失真[3]。
雙線性內插算法用與期望位置最近鄰的4個像素值估計期望位置的像素值,若用(x,y)表示期望位置,用Q(x,y)表示輸出像素值,I(x,y)表示輸入像素值,雙線性內插算法的賦值公式為
(4)
雙三次內插算法用期望位置最近鄰的16個像素值估計期望位置的像素值。雙三次插值算法可分離為分段三次插值核[4],如式(5)所示,其中a為自由參數,KKeys(s)表示插值核為
(5)
B樣條插值算法的原理是以期望位置為中心利用B樣條核對源像素值進行估計從而得出期望像素值。3次B樣條核的解析公式為
(6)
雙三次內插算法主要應用于商業圖像編輯程序(如Adobe Photoshop等)中,算法復雜度較高。B樣條插值算法在使用過程中需要用到矩陣求逆等運算[5],算法復雜度更高。考慮到現實應用場景和FPGA的資源情況,本次設計選用雙線性內插算法。
采用逆向映射計算出的期望位置往往不是整數,設計中把期望位置的坐標分解為整數部分和小數部分。考慮到FPGA不方便進行浮點運算,因此把期望位置的坐標放大256倍(即左移8位)后取后8位作為小數部分,如式(7)所示。其中(xr,yr)為整數部分,用以確定源像素點的位置;(xi,yi)為小數部分,用以確定各像素點的權重,對各像素點經行加權處理進而估計出期望位置的像素值。雙線性內插算法示意圖如圖1所示,其中陰影部分為期望位置,I(x,y)為各像素點的像素值。

(7)
該圖像縮放模塊為全景視頻拼接系統的一部分,圖像在進行縮放前已經做了去隔行、桶形畸變矯正等預處理操作,經過預處理操作后的視頻數據存儲在外部DDR2存儲器(Double Data Rate 2 SDRAM)中,在進行圖像縮放前各路視頻數據已經經過DDR2讀取模塊讀取到FPGA的先入先出隊列(First Input First Output,FIFO)中進行緩存。

圖1 雙線性內插算法示意圖
圖像縮放的關鍵是根據映射關系確定讀寫時序和讀寫地址。雙線性內插算法需要用到期望位置附近的兩行視頻圖像數據,因此利用兩組RAM對視頻信號進行緩存,用FPGA控制RAM的讀寫地址,從而可以保證讀寫地址的正確性。考慮到進行縮放時讀寫緩存RAM的時序復雜性,對讀寫時序的控制利用狀態機實現,從而可以保證縮放時讀寫RAM時序的正確性。對圖像進行縮放操作可以用4個狀態機協同合作來實現,包括寫RAM狀態機、讀RAM狀態機、垂直縮放狀態機和水平縮放狀態機。
1)寫RAM狀態機完成對對視頻信號進行緩存的兩組緩存RAM的寫操作。2組RAM具有相同的讀寫地址,可以保證讀取到的視頻數據為同一列的數據,對兩組RAM進行寫操作時利用片選信號,實現兩組RAM的乒乓操作。寫RAM狀態機完成的主要工作是產生寫RAM的地址,控制寫RAM的時序,控制寫RAM的片選信號。寫RAM狀態機的流程圖如圖2所示。

圖2 寫RAM狀態機流程圖
2)讀RAM狀態機的主要工作是產生讀取RAM的地址,對讀出RAM的數據個數進行計數從而控制讀RAM時序。讀RAM狀態機的流程圖如圖3所示。

圖3 讀RAM狀態機流程圖
3)垂直縮放狀態機的主要工作是移動垂直采樣窗口,讀取FIFO中與期望位置相鄰的兩行數據并寫入RAM中進行緩存,同時計算該兩行數據的權重。垂直縮放狀態機的流程圖如圖4所示。

圖4 垂直縮放狀態機流程圖
4)水平縮放狀態機的主要工作是:第一,對縮放后的圖像的行像素個數進行計數,產生行結束標志從而控制垂直和水平縮放的時序;第二,平移水平采樣窗口,讀取緩存RAM中與期望位置相鄰的水平方向上的兩個像素點并計算此兩點的權重。水平縮放狀態機的流程圖如圖5所示。
基于FPGA的線性內插算法的運算順序為先進行垂直方向的插值運算,再以垂直方向的插值運算結果為基礎進行水平方向的插值運算。插值運算模塊的功能框圖如圖6所示,其中data1_in和data2_in為像素數據輸入端口,data1_weight和data2_weight端口分別對應像素數據輸入端口的權重。插值運算模塊以像素數據以及其對應的權重為基礎計算出插值運算后的像素數據data_out。插值運算模塊的仿真波形如圖7所示,從仿真波形中可以看出在像素數據輸入3個時鐘后輸出插值運算后的像素數據。

圖5 水平縮放狀態機流程圖

圖6 插值運算模塊功能框圖

圖7 插值運算模塊仿真波形(截圖)
上述各模塊協調工作可以實現1路視頻信號的縮放操作,效果圖如圖8所示,其中圖8a為縮放前的原始圖像,圖8b為放大后的圖像,圖8c為縮小后的圖像。把上述視頻圖像縮放模塊例化出多個,每個模塊連接不同的視頻數據碼流可以實現多路視頻信號的縮放處理,2路視頻信號的縮放效果圖如圖9所示,其中圖9a為縮放前的原始圖像,圖9b為放大后的圖像,圖9c為縮小后的圖像。
本文基于雙線性內插算法在FPGA平臺上設計實現的多路視頻信號的縮放裝置為全景視頻拼接系統的一部分,利用FPGA并行處理的優勢可以實現多路視頻信號的同時縮放操作,從而保證了拼接后視頻的實時性。根據美國電子消費品制造協會(Consumer Electronics Association,CEA)制定的未壓縮數字視頻標準CEA-861所提供的傳輸時序,該裝置可輸出1 080p(1 920×1 080)的高清數字視頻至數字顯示器顯示,輸出幀率為60 f/s(幀/秒)。4路視頻信號實現同時縮放的效果圖如圖10所示。

圖8 1路視頻信號縮放效果圖

圖9 2路視頻信號縮放效果圖
[1]DONALD G B. 基于FPGA的嵌入式圖像處理系統設計[M]. 原魁,何文浩,肖晗,譯. 北京:電子工業出版社,2013.

圖10 4路視頻信號同時縮放效果圖
[2]RAFAEL C G, RICHARD E W. 數字圖像處理[M].3版. 阮秋琦,阮宇智,譯. 北京:電子工業出版社,2011.
[3]趙煌,彭勇. 雙線性插值算法的優化及其應用[J]. 電視技術,2012, 36(17):30-32.
[4]ROBERT G K. Cubic convolution interpolation for digital image processing[J]. IEEE Trans. Acoustics,Speech and Signal Processing,1981,29(6):1153-1160.
[5]MICHAEL U, AKRAM A, MURRAY E. Fast B-spline transforms for continuous image representation and interpolation[J]. IEEE Trans. Pattern Analysis and Machine Intelligence, 1991,13(3):277-285.
Design of Multi-channel Video Zoom Based on Bilinear Interpolation Algorithm
CHEN Quanbing, XI Youbao
(SchoolofElectronicsEngineering,UniversityofElectronicScienceandTechnologyofChina,Chengdu611731,China)
A multi-channel video zoom device, which bases on bilinear interpolation algorithm and FPGA hardware platform, is designed in this paper. The two lines pixels, which are next to the desired position, are stored in the RAM. The vertical interpolation data are calculated firstly. Then, the horizontal interpolation data are calculated. The image can be scaled in real time by using this device, which takes advantage of FPGA’s parallel computation ability.
bilinear interpolation algorithm;FPGA;multi-channel video zoom
TN949.1
A
10.16280/j.videoe.2015.01.011
2014-07-10
【本文獻信息】陳全兵,習友寶.基于雙線性內插算法的多路視頻縮放設計[J].電視技術,2015,39(1).
陳全兵(1989— ),碩士生,主研FPGA邏輯芯片在圖像處理中的應用;
習友寶(1964— ),教授,主研片上系統(SOC)設計。
責任編輯:李 薇