H.264 像素塊預測與運動補償

關鍵詞:像素塊預測 運動補償 信源編碼

一、像素塊預測

H.264/ AVC標準中的基本預測技術是基於塊,而不是基於對象的。它的編碼器是利用混合的編碼方案來提高編碼效率,這些方案包括高級的預測技術和有效熵編碼技術。在運動預測中它使用不同的塊的大小進行預測,以樹結構的方式來組織預測模式。其主要的特點也包含在多參考幀預測方式和通用B幀的概念上。H.264像素塊預測編碼包括幀內塊預測和幀間塊預測,而幀內塊預測在H.264中佔有極重要的地位。在圖像信號壓縮編碼中,由於亮度信號和色差信號是分別進行處理的,因此,預測又可分亮度信號預測和色差信號預測。下面就兩種不同預測方式分別加以討論。

1. 幀內預測

在H.264/AVC中採用的預測編碼方法與在14496-2標準的MPEG-4視頻編碼規範不同,幀內預測是在變換編碼之前進行的。在 H.264/AVC標準的幀內預測中,當前塊的抽樣值總是利用鄰塊的抽樣值來獲取。這樣也許會因爲在相鄰的幀間編碼的宏塊的運動補償誤差而引起圖像誤差的擴散。因此,在圖像編碼過程中還有一種限制幀內編碼模式,此時只允許相鄰的幀內預測宏塊爲已知纔可以作爲其他當前宏塊的參考宏塊。

H.264根據相鄰像素可能有相同的性質,利用相鄰像素的相關性,採用了新的幀內(Intra)預測模式。通過當前像素塊的左邊和上邊的像素(已編碼重建的像素)進行預測。只對實際值和預測值的差值進行編碼,這樣就能用較少的比特數來表達幀內編碼的像素塊信息。在H.264標準中,亮度塊可以有9種4×4塊和4種16×16塊的幀內預測模式,而色度8×8塊的4種模式與亮度的4種16×16塊的模式相同。對於每個4×4塊(除了邊緣塊特別處置以外),每個像素都可用17個最接近的先前已編碼的像素的不同加權和(有的權值可爲0)來預測,即此像素所在塊的左上角的17個像素。顯然,這種幀內預測不是在時間上,而是在空間域上進行的預測編碼算法,可以除去相鄰塊之間的空間冗餘度,取得更爲有效的壓縮。如圖1所示,4×4方塊中a、b、…、p 爲16個待預測的像素點,而A、B、…、P是已編碼的像素。按照所選取的預測參考的點不同,亮度共有9類不同的模式,但色度的幀內預測只有1類模式。

4×4幀內預測方法用於對圖像細節部分進行編碼,它的基本思路是從不同的方向計算、比較塊中各個像素之間的亮度差值,即梯度值。通過選擇具有最小預測誤差的方向作爲最佳的預測方向。下面對其中的預測模式舉例說明。如圖1所示,其中4×4塊中16個抽樣值(a~p)是由先前解碼鄰近宏塊抽樣值(A~Q)利用各種預測模式預測得來。這種預測模式共有8個方向,加上各像素作平均計算共9種模式。

2. 4×4幀內預測模式編碼過程

每個4×4塊的幀內預測模式的選擇一定會告知解碼器,這可能需要很多比特。然而,附近的4×4塊的幀內模式是非常相關的。舉例來說,如果圖 2裏的先前編碼的4×4塊A和B是使用模式2預測的,塊C(當前塊)的最佳模式很有可能也是模式2。對於每個當前塊C,編碼器和解碼器計算最合適的模式 most_probable_mode。如果A和C都在4×4幀內模式中編碼,且都在當前的slice層中,最合適的模式(most_probable_mode)是A和C預測模式的最小量;否則most_probable_mode 被設定成模式2(直流預測)。

編碼器爲每個4×4塊發送一個flag標誌,使用最合適的模式use_most_probable_mode。如果flag是“1”,採用參數most_probable_mode。如果flag是“0”,發送另外的一個參數remaining_mode_selector,來指出模式變化。如果remaining_mode_selector比當前的most_probable_mode小,那麼預測模式被設定爲 remaining_mode_selector;否則預測模式被設定爲 remaining_mode_selector+1。這樣,remaining_mode_selector只需用8個數值(0到7)表示目前的幀內模式(0到8)。

3. 亮度信號16×16幀內預測

16×16預測方式是基於在16×16塊的基礎上,用於對圖像中的相對不變的部分進行編碼。它只有四種預測方式,分別爲垂直預測方式、水平預測方式,直流預測方式和平面預測方式。用一個4×4亮度分量的可選模式,可預測一個宏塊的整個16×16亮度分量,有4種模式。

模式0:(垂直預測)由上面的抽樣值插補(H);

模式1:(水平預測)由左邊的抽樣值插補(V);

模式2:(直流預測)由上面的和左側的抽樣值平均數插補(H+V);

模式4:(平面預測)由上面的和左側的抽樣值插補。

線性“平面”可設置由上面和左側的抽樣值H和V插補, 這在平滑的亮度區域效果較好。

4. 色度信號的幀內預測

一個宏塊的每個8×8色度分量藉助於上面的和左面的已被編碼、重建的色度分量抽樣值進行預測。由於色度在圖像中是相對平坦的,其預測方法與 16×16亮度信號幀內預測相似方式進行。因此也有四種幀內預測模式:垂直預測(模式0),水平預測(模式1),直流預測(模式2)和平面預測(模式 3)。

5. 幀間預測

幀間預測是利用先前已編碼幀的圖像作爲參考圖像對當前圖像進行預測的一種方式。它把參考圖像的抽樣點通過運動矢量的補償作爲當前圖像抽樣值的參考值。H.264/AVC標準中使用了從H.261標準以來主要標準中使用的塊結構運動補償。然而,它與早期標準最大區別在於:①支持多種塊結構的預測;②運算精度能精確到1/4像素。

在H.264/AVC標準中還使用了H.263標準中曾使用過的多幀預測的方法,主要思想是增加運動矢量中時間軸的估計參考幀數。在宏塊的級別上,允許選擇一個或幾個前面視頻幀作爲參考幀。用於運動補償的多幀預測方式在大多數情況下會明顯改善預測增益。

下面我們就以在兩種不同類型的片(slice)中使用的幀間預測方式進行討論。在說明它們之前我們首先介紹樹結構的運動補償,其中主要簡述了宏塊的分塊。

幀間預測用於降低圖像的時域相關性,通過採用多幀參考和更小運動預測區域等方法,對下一幀精確預測,從而減少傳輸的數據量。每個亮度宏塊被劃分成形狀不等的區域,作爲運動描述區域。如圖4所示,其劃分方法有16×16,16×8,8×16,8×8 共4種。當選用8×8方式時,可以進一步劃分成8×8,8×4,4×8和4×4共4個子區域。每個區域包含自己的運動向量,每個運動向量和區域選取信息必須通過編碼傳輸。因此,當選用較大區域時,用於表示運動向量和區域選取的數據量減少,但運動補償後的殘差會增大;當選用小區域時,殘差減少,預測更精確,但用於表示運動向量和區域選取的數據量增大。大區域適合反映幀間同質部分,小區域適合表現幀間的細節部分。

在H.264中,運動預測的精度也有所改進,對QCIF(144×176像素)格式的圖像,使用1/4像素精度;對CIF(288× 352 像素)格式的圖像,使用1/8 像素精度。其中,1/4 像素插值是先使用一個6抽頭濾波器進行水平和垂直濾波得到半像素插值點,然後對其進行線性插值;而1/8 像素插值是直接使用一個8抽頭濾波器進行水平和垂直濾波。

在幀內編碼模式下,H.264 對空間係數進行雙向預測,而不是對變換後的係數進行預測(見H.263+的先進幀內預測模式)。另外,與H.263+的附錄N類似,H.264支持參考幀可選模式,即在編碼後續圖像時,可以從編碼緩存中選擇使用前面的參考幀(多於一幀)進行運動估值。

H.264 除了支持I 幀、P 幀和B 幀外,還提出了一種新的圖像類型SP 幀,SP幀也是預測編碼幀,根據需要可以改變用於該幀預測的圖像。SP幀可用於信道速率的改變、視頻比特流的切換和碼流隨機接入等操作,在時變無線信道上的視頻通信和流媒體傳輸中有廣泛的應用前景。

二、運動補償

1. 樹結構的運動補償

H.264採用了不同大小和形狀的宏塊分割與亞分割的方法。一個宏塊的16×16亮度值可以按照16×16、16×8、8×16或8×8進行分割;而如果選擇了8×8分割,還可以按照8×8、8×4、4×8或4×4進行亞分割,如圖5所示。這些宏塊分割與亞分割的方法將會使得每個宏塊中包含有許多不同大小塊。利用各種大小的塊進行運動補償的方法我們將稱爲樹結構的運動補償(tree structured motion compensation)。宏塊分割與亞分割所產生的每一個亮度塊都有自己獨立的運動矢量。對於宏塊中色度值,分割方法是和亮度一樣的,但是由於 4∶2∶0採樣的關係,色度分割塊的大小是亮度分割塊的一半,而且當色度塊在利用運動矢量時,必須要將它各個分量除以2。其次,H.264可以達到1/4 像素的運動精度,這是通過利用整像素點的亮度值進行內插得到的。內插過程先是通過6抽頭的濾波器來獲得半像素精度,然後用線性濾波器來獲得1/4像素的精度。又由於4∶2∶0採樣的關係,色度的運動精度就達到1/8像素,這也是通過線性濾波器插值得到的。由於運動矢量之間也有一定的相關性,所以H.264 就利用已經編碼塊的運動矢量對當前未編碼塊的運動矢量進行預測,最後只需要編碼和傳輸實際運動矢量與預測值的差值即可。

再次,H.264還可以採用多參考圖像(最多前向和後向各5幀)來進行運動預測,這樣可以對週期性運動,平移封閉運動和不斷在兩個場景間切換的視頻流有效果非常好的運動預測。使用了多參考圖像,H.264不僅能夠提高編碼效率,同時也能實現更好的碼流誤碼恢復,但需要增加額外的時延和存儲容量。

最後,H.264也在B圖像中利用後向運動預測,這和以前的標準是一致的,但不同的是B圖像通過加權也能作爲其他圖像的參考圖像。

在H.264/AVC標準中獲得運動補償的塊結構大小不再侷限於在宏塊的基礎上,可以從宏塊的分塊或子分塊中獲取運動矢量。

每個運動矢量都將會被編碼、傳送,另外分塊方式也必須被編碼在數據流中。選擇大的分塊方式(16×16、16×8或8×16)也許只需要傳送很少的比特用於說明運動矢量和分塊方式,但是運動補償後抽樣點差值也許將會比較大。選擇小的分塊方式(8×4或4×4)也許能得到很小運動補償後抽樣點差值,但是要花費很多比特去傳輸運動矢量和分塊方式。因此對於分塊的選擇將會對壓縮效果有着重大的影響。通常,大的分塊方式用於幀內均勻的部分,而小的分塊方式將有利於圖像中細節描述,每個色度塊將按照亮度的分塊方式進行分塊。由於宏塊中色度分辨率是亮度分辨率的一半,因此色度塊的大小不管在水平還是垂直方向上都只是亮度塊的一半。同時,色度塊上垂直運動向量和水平運動向量也只是亮度塊的一半。

2. 在P類型片中的幀間預測

以往,一般的視頻壓縮的最高運動估計精度爲半像素(half pixel),比如在14496-2標準(即MPEG-4視頻編碼部分)中的基本補償技術就是採用半像素精度,採用的內插方法也是簡單的雙線性內插法,其補償的質量也是相對於較低的。與上述不同的是,在H.264/AVC標準中的運動估計精度要求達到1/4(quarter pixel)精度。

在H.264/AVC標準中,對於P類型的片編碼時可以採用多幀運動補償預測,也就是超過一個先前編碼幀可作爲當前幀運動補償的參考幀。

多幀預測需要解碼器和編碼器在緩衝中存貯多幀圖像作爲參考幀。解碼器則利用比特流中參數設置信息內存管理控制操作(memory management control operation)去複製編碼器相同的多幀緩衝。同時對於每個運動補償的16×16、16×8、8×16或8×8塊及其子塊需傳送參考索引參數,用於確定該塊或子塊參考幀在緩存中的位置。P類型片預測方式是與宏塊中塊相對應的,也即是與前面所介紹宏塊中分塊相對的。在P類型片中預測模式不僅僅只有表中所描述6種類型,還可以包括幀內預測模式。另外對於P_8×8類型預測方式,它是對應於8×8塊的預測,還可以有子分塊上預測模式。

對於P幀中不同預測模式分類可見JM中函數interpret_mb_mode_P,在其中它把當前宏塊的分塊方式及其模式存入到 currMB數據結構中,以便在函數readMotionInfoFromNAL獲取當前塊的運動矢量,在 readCBPandCoeffsFromNAL函數中獲得預測差值。

3. 在B類型的片中幀間預測

與先前圖像編碼標準相比,在H.264/AVC標準中B類型片的概念得到推廣,最大特點是由B類型片所組成B幀可以作爲其他圖像的參考幀。 B類型片與P類型片最本質的區別是在B類型片中宏塊或其子塊的預測值是通過兩個不同運動補償值加權平均後取得的。B類型片使用兩組不同參考圖像,分別爲 list0(前向參考圖像集)和list1(後向參考圖像集)。

在B類型片中,四組不同的宏塊預測方式將支持下面四種模式:①直接方式(direct mode):這種方式不需要傳送運動矢量等附加信息(side information)。②單向預測方式(inter mode):只需傳送1個宏塊預測信息。③多假設預測方式(multihypothesis mode):需傳送兩個宏塊預測信息。④幀內預測方式(intra mode)。下面我們分別具體介紹直接預測方式和多假設預測方式。

(1)直接預測方式(direct mode)

直接方式使用雙向預測方式,傳送預測差值。這種方式前向和後向運動矢量(mv0,mv1)是通過隨後的參考圖像(RL1)上公共確定宏塊(co-located macroblock)的運動矢量(mvc)計算得到的。使用直接預測方式的宏塊與公共確定宏塊應具有相同的分塊。

其中MV0爲前向運動矢量,MV1爲後向運動矢量,MVC代表着隨後幀間圖像公共確定塊運動矢量。對於先前B幀概念而言,TDD爲當前幀前一幀與後一幀相差的時間。TDB爲當前B幀圖像與前一幀的時差。當使用多幀預測後,這種概念發生變化。TDB爲當前幀與其前向參考幀RL0之間的時差,而TDD爲前向參考幀RL0與後向參考幀RL1之間的時差。在H.264/AVC標準中,直接預測方式因對預測信號進行混合加權運算,比先前標準中使用平均加權方式得到改善。這種技術最適合音樂電視和電影結尾的使用,它們通常是場景慢慢衰弱的。特別是在電影的結尾,場景逐漸衰弱成黑幕。在先前標準中沒有好的壓縮方式這種情況很難編碼。如果把這種現象編碼成PBBB模式,由於平均加權將使得第一和第三個B幀相對於周圍的幀內、幀間幀及第二個B幀有較大的圖像惡化,而基於幀間相對距離的混合加權方式卻可以大大改善。

其中c爲當前B幀中宏塊或塊中抽樣值,cp爲前向參考圖像預測宏塊或塊中抽樣值,cs爲後向參考圖像預測宏塊或塊中抽樣值。

(2)多假設預測方式(multihypothesis mode)

多假設預測方式需要疊加由兩個運動矢量所預測兩個宏塊預測值。我們把每個塊預測值稱爲假設(hypotheses)。最後預測塊通過兩個假設的運動矢量得到的預測值平均後得到。多假設預測與雙向預測方式不同。雙向預測方式只允許前後向預測對線性組合而成。見圖8。而多假設預測方式取消這種限制,它可以一個方向上預測對來獲取最終的預測值。可以(前向,前向)或(後向,後向)進行預測。

當第一個假設來源於先前參考圖像而第二個假設來源於後向參考圖像時,多假設預測方式也可以成爲雙向預測方式。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章