# 預測編碼之幀間預測(Inter-Picture?Prediction)
? ? ? 幀間預測是指利用視頻時間域相關性,使用臨近已編碼圖像像素預測當前圖像的像素,以達到有效去除視頻時域冗余的目的。由于視頻序列通常包括較強的時域相關性,因此預測殘差值接近于0,將殘差信號作為后續模塊的輸入進行變換、量化、掃描及熵編碼,可實現對視頻信號的高效壓縮。
### 一、幀間預測編碼原理
? ? ? 目前主要的視頻編碼標準幀間預測部分都采用了基于塊的運動補償技術,如下圖所示,其基本原理為:當前圖像的每個像素塊在之前已編碼圖像中尋找一個最佳匹配塊,該過程稱為運動估計ME(Motion?Estimation)。其中用于預測的圖像稱為參考圖像,參考塊到當前像素塊的位移稱為運動向量MV(Motion?Vector),當前像素塊與參考塊的差值稱為預測殘差(Prediction?Residual)。將殘差信號作為后續模塊的輸入進行變換、量化、掃描及熵編碼,可實現對視頻信號的高效壓縮。根據運動矢量MV,將前一幀(或前幾幀、后幾幀)的運動位移塊圖像做相應的位移得到當前幀當前塊的運動預測估計值,這樣就可以得到當前幀的幀間預測幀,這一過程稱為運動補償MC(Motion?Compensation)。
? ? ? 需要注意的是:運動估計得到的運動矢量不只用于運動補償,而且還被傳送至解碼器中,解碼器根據運動矢量經過運動補償可以得到和編碼端完全相同的預測圖像,從而實現正確圖像解碼。

? ? ? 其實,幀內預測和幀間預測有很多類似的地方,只不過幀內預測所采用的參考像素來源于當前幀已編碼的像素值,而幀間預測的參考像素來源于已編碼的前一幀(或前幾幀、后幾幀)。類似于幀間預測中編碼器需要將運動矢量MV傳給解碼端,解碼端根據運動矢量可以獲取和編碼端完全相同的預測塊;在幀內編碼模式下,編碼器需要把實際采用的幀內預測模式信息傳給解碼器,解碼端可以根據這個預測模式信息獲得與編碼器完全相同的幀內預測塊。由此可見,運動矢量和幀內預測模式有著完全相同的重要性,它們都在宏塊頭中用特定的語法元素表示。
### 二、幀間預測編碼的關鍵技術
? ? ? 在幀間預測編碼過程中,最重要的操作就是運動估計、MV預測以及多參考幀和加權預測,下面對它們一一進行分析。
### 1、運動估計
? ? ? 所謂運動估計ME就是指提取當前圖像運動信息的過程。在運動估計中,常見的運動表示法主要包括:基于像素的運動表示法、基于區域的運動表示法和基于塊的運動表示法。
(1)、基于像素的運動表示法:直接為每個像素指定一個運動向量。此法普遍適用,但是需要估計出大量的未知量,而且其解通常不能反映場景中物體真實的運動情況,此外,該方法需要為每一個像素附加傳送一個MV,數據量很高。
(2)、基于區域的運動表示法:把一幅圖像分為多個區域,使得每個區域恰好表征了一個完整的運動物體。此法默認每個區域中的像素具有相同的運動形式,適用于包含多個運動物體的場景,然而,運動物體的形狀往往是不規則的,因此區域劃分需要大量的信息來表征,而且準確的劃分方式需要大量的計算才能確定,因而基于區域的表示法在實際中較少使用。
(3)、基于塊的運動表示法:將圖像分成不同大小的像素塊,只要塊大小合適,則各個塊的運動形式可以看成是統一的,同時每個塊的運動參數可以獨立地進行估計。此法兼顧了運動估計精度和復雜度,在二者之間進行了一個折中,因此該方法是視頻編碼國際標準中的核心技術。
? ? ? 基于塊的運動估計方法有三個核心問題需要特別注意。一是運動估計的準則;二是搜索算法;三是亞像素精度運動估計。
#### 1.1、運動估計準則
? ? ? 運動估計的目的是為當前塊在參考圖像中尋找一個最佳匹配塊,因此需要一個準則來判定兩個塊的匹配程度。常用的匹配準則主要有最小均方誤差MSE(Mean?Square?Error)、最小平均絕對誤差MAD(Mean?Absolute?Difference)和最大匹配像素數MPC(Matching-Pixel?Count)等。
? ? ? 為了簡化計算,一般用絕對誤差和SAD(Sum?of?Absolute?Difference)來代替MAD。此外,最小變換域絕對誤差和SATD(Sum?of?Absolute?Transformed?Difference)也是一種性能優異的匹配準則。
#### 1.2、搜索算法
? ? ? 在某些應用環境下,視頻編碼傳輸對實時性要求較高,而運動估計的運算復雜度通常較高,因此高性能、低復雜度的運動搜索算法顯得尤為重要。
? ? ? 常用的搜索算法有:全搜索算法、二維對數搜索算法、三步搜索算法等。全搜索算法是指對搜索窗內所有可能的位置計算兩個塊的匹配誤差,所得的最小匹配誤差對應的MV一定是全局最優的MV。
? ? ? 然而,全搜索算法復雜度極高,無法滿足實時編碼。除全搜索算法外,其余算法統稱為快速搜索算法,快速搜索算法具有速度快的優點,但是其搜索過程容易落入局部最優點,從而無法找到全局最優點。為了避免這一現象的發生,需要在搜索算法中的每一個步驟盡量搜索更多的點,相關的算法有JM中的UMHexagonS算法以及HM中的TZSearch算法。
#### 1.3、亞像素精度運動估計
? ? ? 由于自然界物體運動具有連續性,因此相鄰兩幅圖像之間的運動不一定以整像素為基本單位,而有可能以半像素、1/4像素甚至是1/8像素為單位。此時若僅僅使用整像素精度運動估計會出現匹配不準確的問題,導致運動補償殘差幅度較大,影響編碼效率。
? ? ? 為了解決上述問題,應將運動估計的精度提升到亞像素級別,這可以通過對參考圖像像素點進行插值來實現。1/4像素精度相比于1/2像素精度時的編碼效率有明顯地提高,但是1/8像素精度相比于1/4像素精度時的編碼效率除了高碼率情況以外并沒有明顯地提升且1/8像素精度運動估計更為復雜。因此現有標準H.264以及HEVC都使用了1/4像素精度進行運動估計。
### 2、MV預測技術
? ? ? 在大多數圖像和視頻中,一個運動物體可能會覆蓋多個運動補償塊,因此空間域相鄰塊的運動向量具有較強的相關性。若使用相鄰已編碼塊對當前塊MV進行預測,將二者差值進行編碼,則會大幅度節省編碼MV所需的比特數。同時,由于物體運動具有連續性,因此相鄰圖像同一位置的MV也具有一定的相關性。在H.264中就使用了空域和時域兩種MV預測方式。
? ? ?在HEVC中,為了充分利用空域和時域相鄰塊的MV對當前塊的MV進行預測以便節省MV的編碼比特數,HEVC在MV的預測方面提出了兩種新技術:Merge技術和AMVP(Advanced?Motion?Vector?Prediction)技術。
? ? ?Merge技術和AMVP技術都使用了空域和時域MV預測的思想,通過建立候選MV列表,選取性能最優的一個作為當前PU的預測MV,二者的區別主要表現在以下兩個方面。
(1)、Merge可以看出是一種編碼模式,在該模式下,當前PU的MV直接由空域或時域上臨近的PU預測得到,不存在MVD;而AMVP可以看成一種MV預測技術,編碼器只需要對實際MV與預測MV的差值進行編碼,因此是存在MVD的;
(2)、二者候選MV列表長度不同,構建候選MV列表的方式也有區別。
#### 2.1、Merge技術
? ? ? Merge模式會為當前PU建立一個MV候選列表,列表中存在5個候選MV及其對應的參考圖像。通過遍歷這5個候選MV,并進行率失真代價的計算,最終選取率失真代價最小的一個作為該Merge模式的最優MV。若邊解碼端依照相同的方式建立該候選列表,則編碼器只需要傳輸最優MV在候選列表中的索引即可,這樣大幅度節省了運動信息的編碼比特數。Merge模式建立的MV候選列表中包含了空域和時域兩種情形,而對于B?Slice則包含組合列表的方式。
#### 2.2、AMVP(Advanced?Motion?Vector?Prediction)技術
? ? ? AMVP利用空域、時域上運動矢量的相關性,為當前PU建立了候選預測MV列表。編碼器從中選出最優的預測MV,并對MV進行差分編碼;解碼端通過建立相同的列表,僅需要運動矢量殘差(MVD)與預測MV在該列表中的序號即可算出當前PU的MV。
? ? ? 類似于Merge模式,AMVP候選MV列表也包含空域和時域兩種情形,不同的是AMVP列表長度僅為2。
### 3、多參考圖像及加權預測
? ? ? 對于某些場景,如物體周期性變化等,多參考幀可以大幅提高預測精度。早期的視頻編碼標準只支持單個參考圖像,H.263+開始支持多參考圖像預測技術,而H.264最多支持15個參考圖像,隨著參考數目的增加,編碼性能也隨之提高,但是提高的速度日益緩慢,因此為了權衡編碼效率和編碼時間,一般采用4~6個參考圖像。
? ? ?此外,H.264還使用了加權預測技術。加權預測表示預測像素可以用一個(適用于P?Slice情形)或兩個(適用于B?Slice)參考圖像中的像素通過與加權系數相乘得出。HEVC沿用了H.264中的加權預測技術并做了進一步的發展。
- 前言
- HEVC算法和體系結構:資源獲取和章節安排
- HEVC算法和體系結構:HEVC概括性介紹
- HEVC算法和體系結構:環路濾波技術
- HEVC算法和體系結構:編碼框架
- HEVC算法和體系結構:編碼結構之編碼時的分層處理架構
- HEVC算法和體系結構:編碼結構之編碼完后碼流的語法架構
- HEVC算法和體系結構:預測編碼之幀內預測
- HEVC算法和體系結構:預測編碼之幀間預測
- x265探索與研究(一):x265下載安裝與配置
- x265探索與研究(二):x265使用基本方法
- x265探索與研究(三):如何播放*.265格式的視頻或解碼視頻流
- x265探索與研究(四):如何編碼視頻?
- x265探索與研究(五):如何用VS調試x265?