從硬件實現的角度分析了H.264算法,重點研究了占用最多運算時間的預測部分的優(yōu)化,給出了對幀內預測、哈達馬變換以及運動估計算法的改進,通過簡化運算復雜、效率不高的模塊以及減少模塊間數據相關性等,對硬件進行優(yōu)化。通過對各種測試序列的仿真,證明改進是有效的。
H.264最初是由ITU-T起草的,在未來將成為ITU-T和MPEG的聯合標準。H.264因為提供了很高的編碼壓縮效率、友好的面向網絡的接口,將成為下一代新的視頻編碼標準。但是編碼效率很高的同時,其算法的復雜度也提高了四倍,這在很大程序上限制了它的實現。因此,必須針對硬件的實現做改進和優(yōu)化。
H.264的最初測試模型(JM)是為了取得高的編碼效果而設計的。在這個測試模型中,有很多的算法需要很大的運算量,但是編碼效率的提高卻不多,并且很多模擬之間是數據相關的,這一點限制了用并行處理加速硬件的實現。
以前有文章分析過這種新的視頻編碼的復雜度。但是這些研究都是通過軟件的分析得到H.264算法的復雜度的。這些結果對在軟件中的應用是精確的,但是當涉及硬件設計的并行處理時,就不再適用了。
經過試驗比較可以得出,在H.264硬件實現上的關鍵點是預測部分,因為此模塊所占的計算時間幾乎是總時間的90%。所以改進的重點在預測部分。
1 H.264算法
圖1是關于一幀圖像的幀內預測間預測的算法框圖。如果采用幀內預測,幀間預測部分將不進行判斷。在進行幀間預測時,會使用多幀預測和可變塊大小的運動估計。編碼模式選擇部分在所有的預測模式中選擇一個最佳的預測模式。
預測之后用原始的輸入幀和預測幀相減,得到殘差數據塊。對于亮度殘差塊做4%26;#215;4整數DCT變換,對于色度殘差塊的DC系數則進行2x2的整數DCT變換。對變換后的系數做掃描和量化處理后,再對量化后的系數進行熵編碼,最終成為輸出的碼流。編碼模式通過模式表,也會輸入到熵編碼器中。重建的循環(huán)過程包括反量化、反DCT變換和反塊濾波。最后,將重建幀寫入到幀緩沖器中,準備在以后運動估計中使用。
因為在空間預測和時間預測上幾乎花費了所有的計算能力,所以在JM 4.0上的算法改進主要是在這兩部分上。在實現過程中,這兩部分通過硬件實現,所以要針對硬件進行優(yōu)化。
實現編碼器所用的硬件系統(tǒng)是基于宏塊,也就是說編碼器是對一個個連續(xù)的宏塊進行操作。整個編碼系統(tǒng)可以看作一個宏塊的流水線,所以有可能在開始編碼下一個宏塊時,上一個宏塊重建過程不定期沒有完成,這就影響了流水線的進行。很多基于宏塊的商業(yè)編碼器正是采用這種硬件實現模式,所以處理好這個問題至關重要。
2 幀內預測
圖1中的編碼方框圖與H.261、H.263和MPEG-4中的相似。H.264中包含了4%26;#215;4和16%26;#215;16兩種幀內預測部分。幀內預測需要圖像重建的像素值才能實現。在一個典型的基于宏塊的系統(tǒng)中,只有在完成整個編碼程序后,重建的像素值才能得到。這種數據之間的相關性,會給硬件的實現帶來很大的困難。
2.1 4x4幀內預測
圖2描述了4x4塊幀內預測中數據的相關性。從a到p的像素值是從A到N及Q的像素值預測出來的。用大寫字母表示重建的像素值。因為一個宏塊由16個4x4的塊組成,所以當前塊沒有完成編碼之前是不能得到重建的像素值的。在JM中用了雙通道算法實現這些塊的編碼。為了做一個4x4塊的預測,在JM中需要進行變換、量化、反變換到反量化的過程。這對于一個硬件來說太復雜了。在現有的硬件水平上是不可能實現的。
對這一點,需要對算法做如下改進:所有預測中所有的重建幀像素值用輸入幀的原始值代替。通過這樣的改進,4%26;#215;4的幀內預測和變換可以在宏塊的流水線上順利地實現。
2.2 16x16幀內預測
圖3給出了16x16幀內預測的數據相關性。當前宏塊的預測是基于重建幀中位于當前宏塊位置上方的17個像素和左側的16個像素的。因為對當前宏塊進行預測時左邊宏塊的重建可能并未完全完成,當用到當前宏塊位置左側的那些像素時就用原始像素代替。
2.3 編碼模式選擇
按照前面所給出的改進算法,如果只是簡單地用原始像素代替重建像素的話會造成編碼模式選擇的誤差。圖4給出了幀內編碼的率失真改進的曲線,仿真的序列是“Claire”、10fps。從圖4中可以看出,由編碼模式選擇的誤差引起的PSNR下降是很明顯的。原始像素是屬于同一幀的,而重建像素經過幀間或幀內編碼去除了冗余度,所以與重建像素相比原始像素有更高的相關性。因而用改進后的幀內預測算法產生的誤差要比用原算法大得多。為了減少編碼模式選擇的誤差,還需要對誤差代價函數(error cost function)進行修改?,F在的做法是增加一個誤差項。這個誤差項體現原始像素和重建像素之間的差值。因為量化參數(QP)能夠影響原始像素和重建像素之間的不匹配,所以誤差項的確定與量化參數值有關。在H.264中,隨著量化參數的線性增加,量化對編碼的影響是呈指數增加的。為了符合這種影響的增長趨勢,誤差項的基本形式確定了a/b(51-Qp),其中a和b是待定系數。如何確定a和b是影響誤差消除的關鍵。
在H.264中,每級Qp的增量是12%,所以理論上與之相匹配的參數b應該設置為1.12。但是誤差代價函數的計算是在哈達碼變換域中進行的,對每個系數的加權系數是不同的。而且變換后的系數的概率分布是不定的。所以參數b的設定不能用理論值,應該考慮用經驗值來確定。
通過實驗仿真結果可以得出:對于4%26;#215;4幀內預測,a設為80、b設為1.07。在對不同的序列測試中,這組參數值的效果最好。從圖4中看,改進后的幀內預測基本消除了模式選擇誤差,其PSNR的表現與原幀內預測算法接近。
3 運動估計
在H.264中采用了可變的塊大小、1/4像紗和多參考幀的運動估計。在進行運動估計過程中,全局搜索的起始搜索點根據運動預測因子確定。對于整像素搜索,失真用SAD度量。如果需更好的效果,可以將SAD加上補償項。雖然全局搜索運動估計有各種硬件結構支持,但是從硬件實現角度來看,在H.264中原始的搜索范圍和運動預測因子的選擇是不實用的。以下介紹相應的改進。
3.1 搜索范圍
硬件實現運動估計過程中,一般會通過使用片內存儲彌補片外存儲帶寬的不足。在圖5中給出了一種典型的搜索區(qū)域數據重復使用方法,其中搜索范圍是-16~+15。圖5中左邊的3%26;#215;3塊表示當前宏塊運動估計進行區(qū)域,右邊的3%26;#215;3表示下一個宏塊運動估計進行區(qū)域,
它們的重疊區(qū)域的數據可以在兩次宏塊運動估計中重復使用,新增加的數據是最右側的1x3區(qū)域。
為了配合H.264這種重復使用數據的模式,搜索區(qū)域的起始點應該設置在(0,0)。只有當真正的運動矢量超出搜索范圍時,這種改變才會造成視頻質量的下降。
3.2 運動預測因子
在H.264中, 運動預測因子被用來確定運動矢量數據的比特數和計算運動矢量數據編碼誤差的補償因子。補償因子在整個運動估計過程中都會被參考以進行率失真優(yōu)化。圖6表示運動預測因子的相關情況。其中P1到P4是在當前宏塊之前的宏塊。當前宏塊的運動預測因子通過對P1到P4宏塊的運動矢量計算得到。但是因為在硬件中,以上基于宏塊的處理過程是使用宏塊流水時,P1的運動矢量可能是無效的。解決這個問題需要消除運動預測因子計算過程中相關性。具體就是計算過程中只使用P2到P4宏塊的運動矢量。而改變的只是針對運動估計補償因子的計算,因此改進算法仍然符合H.264標準。
3.3 1/4像素精度的運動估計
在H.264中,半像素運動估計是通過二維6抽頭內插濾波實現的。二維濾波需要使用線路緩存實現轉置運算,而線路緩存的硬件實現相當復雜。不過對編碼環(huán)路中的另一個部分運動補償時,該宏塊的運動矢量已經確定。
為了減少硬件代價,可以使用更簡單的方法來產生1/4像素精度的數據。雖然用于運動估計與用于運動補償的1/4像紗數據沒必要相同,但是它們之間的誤差還是會對編碼效果產生影響。所以不能一味地簡化內插過程。使用雙線性內插代替二維6抽頭內插濾波能夠較好地解決這個問題。
3.4 哈達碼變換
哈達碼變換是用簡單的變換估算變換后產生的比特數。在H.264的運動估計中用哈達碼變換替代SAD,如果要求設計低代價硬件可以將這部分省略。
4 仿真結果
軟件仿真是在“Foreman”、“grandma”、“salesman”和“carphone”序列上進行的,幀率是每秒10幀。出于硬件的考慮,不采用率失真優(yōu)化模式,因為在JM4.0上沒有采用碼率控制,所以率失真曲線是對應Qp的變化產生的。率失真曲線如圖7、圖8。
從仿真結果中可以看出,在改進的幀內預測算法中,PSNR的下降程序是很低的。在慢速運動序列的整像素運動估計中,PSNR幾乎沒有下降。對QME算法的改進會造成大約0.4~0.6dB的PSNR值下降。這種改進在低代價系統(tǒng)中是可以接受的。在64kbps的環(huán)境下,每一個序列的PSNR的下降不超過0.58dB。
在基于宏塊處理的系統(tǒng)中,采用上述的改進算法,就能實現并行處理。通過軟件仿真的結果表明,改進幀內預測和整像素運動估計上的算法后,其PSNR值的下降幾乎可以忽略。對低人代價系統(tǒng)來說,QME和哈達馬變換的改進也量種可以考慮的方法。
責任編輯:gt
-
編碼器
+關注
關注
45文章
3638瀏覽量
134423 -
接口
+關注
關注
33文章
8575瀏覽量
151014 -
仿真
+關注
關注
50文章
4070瀏覽量
133552
發(fā)布評論請先 登錄
相關推薦
評論