吳以凱+喻金華+肖鐵軍
摘 要:視頻縮放是視頻處理領(lǐng)域的關(guān)鍵問題,可以分為硬件實現(xiàn)和軟件實現(xiàn)。以FPGA作為處理芯片,按照SMPTE協(xié)議設(shè)計了一種視頻縮放方法。設(shè)計采用模塊化思想對系統(tǒng)進行了自上而下的劃分,采用XILINX公司提供的Spartan6系列芯片XC6SLX45T,并使用Verilog HDL語言實現(xiàn)了各模塊功能。該算法使用流水線結(jié)構(gòu),實驗結(jié)果表明,該算法能夠在FPGA上穩(wěn)定運行,實現(xiàn)了視頻縮放的效果。和原有方法相比,該設(shè)計方法減少了5個乘法器的使用,節(jié)約了系統(tǒng)資源。
關(guān)鍵詞:FPGA;視頻縮放;流水線;DDR3 SDRAM;乘法器
DOIDOI:10.11907/rjdk.171287
中圖分類號:TP319
文獻標識碼:A 文章編號文章編號:1672-7800(2017)008-0083-03
0 引言
實時視頻圖像處理是圖像處理領(lǐng)域的研究熱點之一,廣泛應(yīng)用于監(jiān)控、醫(yī)療、通信領(lǐng)域等?;趩纹瑱C的方案對于高分辨率視頻數(shù)據(jù)的處理無法滿足實時性要求,近年來現(xiàn)場可編程門陣列(FPGA)由于其自身優(yōu)勢得到了快速發(fā)展,在實時圖像處理中的應(yīng)用也越來越廣泛。一些FPGA器件不僅提供了豐富的邏輯資源,還提供了RAM塊、乘法器、鎖相環(huán)、時鐘資源等,為實現(xiàn)高性能的數(shù)字信號處理提供了便利。目前,市場上的數(shù)字視頻處理芯片大多是從歐美、日、韓等地的公司進口的,也有一些來自中國臺灣,但這些芯片主要適用于一些高度復(fù)雜的系統(tǒng),不適用于單純進行視頻處理的場合。
圖像插值是圖像處理的基本問題之一。隨著顯示器的分辨率越來越高,原有的視頻源制式越來越跟不上顯示器的發(fā)展速度,故需要采用相應(yīng)的視頻縮放方法將輸入的視頻信號轉(zhuǎn)變?yōu)榭梢栽陲@示器中實現(xiàn)點對點顯示的視頻制式。為了實現(xiàn)視頻縮放,以及視頻信號的良好顯示,需要對視頻信號進行插值處理。本文設(shè)計了一種基于FPGA的視頻縮放算法,并對算法進行了優(yōu)化。該算法可占用更少的邏輯資源,且易于硬件實現(xiàn)。
1 算法原理
1.1 常用縮放算法
常用的線性視頻縮放算法有最鄰近插值、雙線性插值、雙三次插值[1]。對3種插值方式采用MATLAB進行檢測的結(jié)果如圖1所示,其中原圖是一幅512*384的圖像,分別用3種插值方法對原圖進行4*4倍縮小,再進行4*4倍放大得出的圖像如圖1(b)~(d)所示。無論是采用PSNR[2]方法還是人眼觀察,最終的實現(xiàn)效果都為:雙三次插值>雙線性插值>最鄰近插值。最簡單的插值方式為最鄰近插值,但其實現(xiàn)的效果最差,邊緣容易產(chǎn)生鋸齒現(xiàn)象;雙線性插值具有低通濾波器特性,會使高頻信息受損,邊緣處的過渡比較平滑,計算量比最鄰近插值大;雙三次插值能夠保持較好的圖像細節(jié),精度較高,但其計算量最大。權(quán)衡FPGA的邏輯資源與顯示效果,本設(shè)計采用雙線性插值算法實現(xiàn)。
1.2 雙線性插值算法描述
雙線性插值采用可分離的線性插值將4個最近的像素組合起來:
I[x,y]=I[xi,yi]*(1-xf)*(1-yf)+I[xi+1,yi]*xf*(1-yf)+I[xi,yi+1]*(1-xf)*yf+I[xi+1,yi+1]*xf*yf(1)
圖2(a) 為插值的坐標定義,下標i和f表示各自坐標的整數(shù)部分和小數(shù)部分,圖2(b)給了式(1)另外一種解釋。每個像素的位置用一個方框表示,其權(quán)值由期望的輸出像素和可用輸入像素之間重疊的面積給出。公式(1)需要8個乘法運算,但對其進行因式分解后,能將乘法運算減少到3個,如式(2)所示:
I[x,yi]=I[xi,yi]+xf*(I[xi+1,yi]-I[xi,yi])
I[x,yi+1]=I[xi,yi+1]+xf*(I[xi+1,yi+1]-I[xi,yi+1])
I[x,y]=Iyi+yf*(Iyi+1-Iyi) (2)
2 實現(xiàn)方案
本設(shè)計主要包含DDR3 SDRAM緩存模塊、視頻縮放模塊、輸出顯示模塊和時鐘生成模塊等,如圖3所示。
2.1 緩存模塊
本設(shè)計采用兩片片外存儲器DDR3 SDRAM作為幀緩存,型號為MT41J64M16,工作頻率可達到200MHz,數(shù)據(jù)傳輸速度達到800Mb/s,吞吐量可達12.8Gb/s,可以滿足設(shè)計要求,而且具有成本低、功耗小的特點,但是DDR3 SDRAM的設(shè)計非常復(fù)雜,不僅時鐘頻率很高,而且還需要定時刷新。XILINX公司提供了一個可以用來控制DDR3 SDRAM的IP核MIG[3],不僅可使設(shè)計復(fù)雜度大為降低,而且縮短了設(shè)計時間。由于DDR3與數(shù)字視頻流工作在不同的時鐘域,需要解決跨時鐘域處理問題。由于處理的數(shù)據(jù)位數(shù)為多位,故采用異步FIFO來解決,緩存模塊如圖4所示。
2.2 縮放模塊
將視頻數(shù)據(jù)中的視頻數(shù)據(jù)以行的形式在vid_clk時鐘下分別送入RAM0和RAM1中,然后分別從RAM0和RAM1中以148.5MHz的時鐘頻率將用到的第一行和緊鄰的第二行數(shù)據(jù)取出,再分別從兩行數(shù)據(jù)中以scl_clk的時鐘頻率分別取出待使用的兩個緊鄰像素點,共計4個像素點,如圖5所示。
在判斷待使用的像素點坐標時,水平方向上,利用縮放前和縮放后的相對步長判斷待使用的像素點坐標,提取有效像素點提供給待插值點使用,如圖6所示。
在權(quán)值計算過程中可以使用x軸方向和y軸方向系數(shù)值相乘的方法,但是該做法特別浪費資源。因此,將乘法計算改為采用LUT[4]的方法,事先將4個待插值點圍成的正方形分為8×8=64個方格,計算每個方格的權(quán)重值,存入查找表中。優(yōu)點是運行時不需要進行復(fù)雜的計算,從而減少占用資源,提高了系統(tǒng)運行速度,如圖7所示。
2.3 時鐘模塊
利用Xilinx公司提供的PLL IP核,為了提高時鐘驅(qū)動能力,將時鐘信號輸入IBUFG(Input Buffer Global)[2],然后再直接驅(qū)動全局緩沖BUFG(Buffer Global)[5],在縮放模塊中實現(xiàn)4種制式的視頻切換。148.5MHz、74.25MHz、27MHz、13.5MHz四個時鐘的比例為11∶5.5∶2∶1,四個時鐘的切換可以通過PLL倍頻和分頻得到,DDR3中需要的200MHz時鐘可以通過晶振的100MHz二倍頻得到。在上述對系統(tǒng)能正常工作所需的全局時鐘設(shè)計過程中,用到的IBUFG和BUFG都為本設(shè)計中使用的FPGA原語庫,通過原語例化[6]的方式加入設(shè)計中使用,所需的IP核由工具CORE Generator生成。仿真圖如圖8所示。endprint
2.4 輸出顯示模塊
根據(jù)SMPTE協(xié)議[7-8],顯示器正常工作需要相應(yīng)的行場信號進行同步。在不同的視頻制式下,該模塊產(chǎn)生不同的start_hcnt、start_vcnt控制縮放模塊何時開始縮放,以及產(chǎn)生縮放之后的行同步信號scl_hs、場同步信號scl_vs和數(shù)據(jù)有效信號de,所需時鐘由時鐘模塊提供。
3 實驗結(jié)果
本設(shè)計在公司數(shù)字視頻信號處理芯片中加以應(yīng)用,采用Verilog編程語言對算法進行描述,并使用Xilinx公司提供的可編程邏輯器件開發(fā)環(huán)境ISE Design Suite14.4進行編譯和實現(xiàn)。同時,使用視頻播放盒輸出的HDMI視頻信號,作為公司產(chǎn)品尋像器式監(jiān)視器1090H的信號源進行驗證,1090H搭載了一片Xilinx公司推出的Spartan6系列XC6SLX45T芯片。本設(shè)計實現(xiàn)了兩種功能:
(1)實現(xiàn)幾種常見視頻制式之間的相互轉(zhuǎn)換。以1 080p和720p之間的轉(zhuǎn)換為例,使用在線邏輯分析儀Chipscope對該模塊進行采點測試,無論是放大還是縮小都能滿足要求。當輸入視頻源為720p時,縮放模塊系統(tǒng)將其轉(zhuǎn)換為1 080p。由于720p工作在74.25MHz,而采樣的時鐘信號為148.5MHz,所以當輸入為720p時,捕捉到的有效像素個數(shù)為1 280*2=2 560個。輸出制式為1 080p,輸出的像素數(shù)據(jù)個數(shù)為1 920個。當輸入視頻源為1 080p時,縮放系統(tǒng)將其轉(zhuǎn)換為720p。
(2)實現(xiàn)了視頻畫面的放大顯示。本設(shè)計實現(xiàn)了兩種視頻放大比例,“放大1”可實現(xiàn)4/3*4/3倍中間畫面的實時放大,“放大2”可實現(xiàn)2*2倍中間畫面的實時放大。以1 080p為例,原始視頻數(shù)據(jù)如圖9所示,將視頻有效區(qū)域vid_hcnt 240~1680,vid_vcnt 135~945的數(shù)據(jù)進行放大,得到“放大1”,如圖10所示。將視頻有效區(qū)域vid_hcnt 480~1 440,vid_vcnt 270~810的數(shù)據(jù)進行放大,得到“放大2”,如圖11所示。
4 結(jié)語
本文采用先垂直縮放、再水平縮放的雙線性插值算法很好地實現(xiàn)了視頻縮放的要求,迎合了當前高清晰度視頻圖像的發(fā)展趨勢。本文對視頻縮放算法進行了相應(yīng)優(yōu)化,采用流水線的設(shè)計思想,以及適當使用查找表的方法得到了一種復(fù)雜度更小、占用邏輯資源更少的設(shè)計方法,提高了圖像處理運算速度,滿足了圖像處理對系統(tǒng)實時性的要求。該技術(shù)在視頻圖像實時處理中具有廣闊的應(yīng)用前景。但是本文設(shè)計的方法只能實現(xiàn)幾種視頻制式之間的轉(zhuǎn)換,而不能實現(xiàn)任意比例的實時轉(zhuǎn)換,需要在后續(xù)工作中進一步完善。
參考文獻:
[1] 李益.視頻信號處理芯片中圖像縮放模塊的設(shè)計[D].廣州:華南理工大學(xué),2011.
[2] 蘇延平.視頻圖像縮放的FPGA設(shè)計與實現(xiàn)[D].西安:西安電子科技大學(xué),2014.
[3] 肖文娟.基于FPGA的多格式視頻信號轉(zhuǎn)換系統(tǒng)[D].太原:太原理工大學(xué),2010.
[4] 朱艷亮.實時視頻縮放算法及FPGA實現(xiàn)[D].長沙:中南大學(xué),2009.
[5] 李曉明.基于FPGA的多通道視頻縮放研究與設(shè)計[D].哈爾濱:哈爾濱工程大學(xué),2013.
[6] 謝敏.任意比例實時圖像縮放IP核的FPGA設(shè)計與實現(xiàn)[D].南京:南京理工大學(xué),2012.
[7] 電影電視工程師協(xié)會.SMPTE 296M-2001[Z].2001.
[8] 電影電視工程師協(xié)會.SMPTE 274M-2008[Z].2008.endprint