基于FPGA的視頻格式轉(zhuǎn)換系統(tǒng)設(shè)計
2. 3. 3 幀率轉(zhuǎn)換和隔行逐行轉(zhuǎn)換模塊
隔行轉(zhuǎn)逐行的方法可以分為空域和時域兩個方面。空域算法簡單,易于硬件實現(xiàn),常見有直接重復(fù)行和在垂直方向上進行插值得到缺失的行。時域方法涉及到相鄰場之間的運算,常見方法有場混合、運動自適應(yīng)去隔行算法以及復(fù)雜度最高的運動補償去隔行算法。本文折衷考慮使用場混合方法,即將場數(shù)據(jù)相鄰場兩兩合成為逐行的幀數(shù)據(jù),如圖8所示。
圖8 場混合法實現(xiàn)隔行逐行變換
PAL和SECAM 制式的場頻為50 Hz,而NTSC 為60H z,當需要進行不同場頻信號的疊加就需要進行場頻轉(zhuǎn)換。大多視頻設(shè)備使用的幀頻為60 H z,因此本文只涉及50~ 60 H z的幀率轉(zhuǎn)換。常用方法有場重復(fù)、場插值、運動補償法,其中場插值算法如圖9所示。
圖9 50 Hz轉(zhuǎn)60 Hz的場插值方法
對于PAL制式從上面兩圖可知,只要能同時讀取3行場數(shù)據(jù)即可以實現(xiàn)隔行逐行變換和幀率轉(zhuǎn)換一次完成。如輸出的第1幀由輸入的第1,2 場數(shù)據(jù)決定,而輸出的第2 幀由輸入的第1,2,3場數(shù)據(jù)決定,而輸出的第3幀由輸入的第2,3,4 場數(shù)據(jù)決定,依次類推。
系統(tǒng)使用位寬為48的DDR2存儲器作為場存儲器,而在FPGA 內(nèi)部DDR2控制器端數(shù)據(jù)寬度為96。如產(chǎn)生第2 幀輸出的處理過程為,在第1場存入時,把高64bit屏蔽掉不寫入,而低32 b it寫入場數(shù)據(jù)(實際只利用30 b it)。在第2場存入時,把高32 位和低32 b it屏蔽掉不寫入,而中間32 bit寫入場數(shù)據(jù)。在第3 場存入時,把低64 b it屏蔽掉不寫入,而高32 bit寫入場數(shù)據(jù)。這樣在數(shù)據(jù)讀取的時候可以順序同時讀出3場數(shù)據(jù),然后進行上述的組合插值運算,即可得到輸出。場存儲器數(shù)據(jù)內(nèi)格式如圖10所示。
圖10 可以實現(xiàn)同時去隔行和幀率轉(zhuǎn)換的場存儲器
注意新的輸入場數(shù)據(jù)不能覆蓋掉相鄰的數(shù)據(jù),因此在數(shù)據(jù)存入時屏蔽位是在不斷跳動的,并以5 場為一個周期。雖然這樣降低了寫入的效率,但由于所有數(shù)據(jù)讀寫都是順序操作,因此從整體上來說仍然提高了DDR2 的存取效率,并且使操作變得簡單。對于NTSC 制式,由于幀率轉(zhuǎn)換部分可不用考慮,可以將只使用低64位部分進行兩場存儲。
2. 3. 4 縮放模塊
視頻縮放包括放大( up scaling ) 和縮小( downsca ling )兩個方面,而進行縮放的基本方法為空間插值。下式為對圖像進行插值的一般數(shù)學(xué)表達式,其中g(shù) ( i,j)為縮放圖像中待插值點的像素值,f ( k,l)為原始圖像中坐標( k,l)處的像素值,h( i- k,j - l)為插值基函數(shù)。
插值基函數(shù)的選擇可以有很多種,通常有二維的矩形函數(shù)、線性函數(shù)、三次函數(shù)及S inc 函數(shù)等,它們分別對應(yīng)于最近鄰插值、線性插值、三次插值以及理想插值(實際中利用S inc函數(shù)截斷后插值) ,其插值效果為從差到好排列,但實現(xiàn)難度也依次提高。在實際處理中是利用濾波器來實現(xiàn)插值基函數(shù),而且由于這些插值的對稱性,可以將其分解為橫向和縱向插值兩部分分開進行,如二維線性插值函數(shù)對應(yīng)雙線性插值( Bilinear Interpo lation),三次函數(shù)對應(yīng)雙三次插值( B icub ic Interpo lation) ,對于Sinc 插值函數(shù)實際中為多相位插值( Po lyphase Interpo lation)。本文使用多相位插值法實現(xiàn)圖像縮放,實際上在4 ? 4領(lǐng)域大小內(nèi)進行多相位插值和三次插值幾乎是一樣的,只是對應(yīng)插值函數(shù)值略微不同。多相位插值法是通過對輸出點對應(yīng)原圖中的領(lǐng)域進行Lanczos2 函數(shù)移相插值來產(chǎn)生輸出點的。如圖11所示。
圖11 Lanczos2 函數(shù)
評論