1. 程式人生 > >h264-運動估計和運動補償理論

h264-運動估計和運動補償理論

定義
運動補償是通過先前的區域性影象來預測、補償當前的區域性影象,它是減少幀序列冗餘資訊的有效方法。

MPEG-4採用I-VOP、P-VOP、B-VOP三種幀格式來表徵不同的運動補償型別。它採用了H.263中的半畫素搜尋(half pixel searching)技術和重疊運動補償(overlapped motion compensation)技術,同時又引入重複填充(repetitive padding)技術和修改的塊(多邊形)匹配(modified block (polygon)matching)技術以支援任意形狀的VOP區域

運動補償包括全域性運動補償分塊運動補償兩類。  運動補償是一種描述相鄰幀(相鄰在這裡表示在編碼關係上相鄰,在播放順序上兩幀未必相鄰) 差別的方法,具體來說是描述前面一幀(相鄰在這裡表示在編碼關係上的前面,在播放順序上未必在當前幀前面)的每個小塊怎樣移動到當前幀中的某個位置去。這種方法經常被視訊壓縮/視訊編解碼器用來減少視訊序列中的空域冗餘。它也可以用來進行去交織(deinterlacing)的操作。  一個視訊序列包含一定數量的圖片--通常稱為幀。相鄰的圖片通常很相似,也就是說,包含了很多冗餘。使用運動補償的目的是通過消除這種冗餘,來提高壓縮比。


每組的第一幀(通常是第一幀)在編碼的時候不使用運動估計的辦法,這種幀稱為幀內編碼幀(Intra frame)或者I幀。該組中的其它幀使用幀間編碼幀(Inter frame),通常是P幀。這種編碼方式通常被稱為IPPPP,表示編碼的時候第一幀是I幀,其它幀是P幀。  在進行預測的時候,不僅僅可以從過去的幀來預測當前幀,還可以使用未來的幀來預測當前幀。當然在編碼的時候,未來的幀必須比當前幀更早的編碼,也就是說,編碼的順序和播放的順序是不同的。通常這樣的當前幀是使用過去和未來的I幀或者P幀同時進行預測,被稱為雙向預測幀,即B幀。這種編碼方式的編碼順序的一個例子為 IBBPBBPBBPBB。

全域性運動補償


  運動模型基本上就是反映攝像機的各種運動,包括平移,旋轉,變焦等等。這種模型特別適合對沒有運動物體的靜止場景的編碼。全域性運動補償有下面的一些優點:  該模型僅僅使用少數的引數對全域性的執行進行描述,引數所佔用的位元速率基本上可以忽略不計。  該方法不對幀進行分割槽編碼,這避免了分割槽造成的塊效應。  在時間方向的一條直線的點如果在空間方向具有相等的間隔,就對應了在實際空間中連續移動的點。其它的運動估計演算法通常會在時間方向引入非連續性。  但是,缺點是,如果場景中有運動物體的話,全域性運動補償就不足以表示了。這時候應該選用其它的方法。
分塊運動補償
  每幀被分為若干畫素塊 (在大多數視訊編碼標準,如MPEG中,是分為16x16的畫素塊)。從參考幀的某個位置的等大小的塊對當前塊進行預測,預測的過程中只有平移,平移的大小被稱為運動向量。  對分塊運動補償來說,運動向量是模型的必要引數,必須一起編碼加入碼流中。由於運動向量之間並不是獨立的(例如屬於同一個運動物體的相鄰兩塊通常運動的相關性很大),通常使用差分編碼來降低位元速率。這意味著在相鄰的運動向量編碼之前對它們作差,只對差分的部分進行編碼。使用熵編碼對運動向量的成分進行編碼可以進一步消除運動向量的統計冗餘(通常運動向量的差分集中於0向量附近)。  運動向量的值可以是非整數的,此時的運動補償被稱為亞畫素精度的運動補償。這是通過對參考幀畫素值進行亞畫素級插值,而後進行運動補償做到的。最簡單的亞畫素精度運動補償使用半畫素精度,也有使用1/4畫素和1/8畫素精度的運動補償演算法。更高的亞畫素精度可以提高運動補償的精確度,但是大量的插值操作大大增加了計算複雜度。

缺點
  分塊運動補償的一個大缺點在於在塊之間引入的非連續性,通常稱為塊效應。當塊效應嚴重時,解碼影象看起來會有像馬賽克一樣的效果,嚴重影響視覺質量。另外一個缺點是,當高頻分量較大時,會引起振鈴效應。關於高頻分量,請參見對運動補償後的殘差進行變換的方法: 變換編碼。

在塊匹配法中,重點研究塊匹配準則搜尋方法

目前有三種常用的匹配準則:

運動估計

兩幀之間的物體運動是平移運動,位移量不是很很大,所以會以塊作為單位分配運動向量,在運動估計中採用了大量的參考幀預測來提高精度,當前的待編碼塊可以在快取內的所有重建幀中尋找最優的匹配塊進行運動補償,以便很好的去除時間域的冗餘度。為每一個塊尋求一個運動向量MV,並進行運動補償預測編碼。在每個分割區域中都有其對應的運動向量,並對運動向量以及塊的選擇方式進行編碼和傳輸。
運動估計ME所表達的運動向量MV,其研究的內容就是如何加速,有效的獲得足夠精確的mv,並且把前一幀所得的運動資訊通過運動補償MC來進行變換,量化編碼,最後輸出。

MV:運動向量,參考幀中相對於當前幀的偏移
MVp:參考運動向量
MVD:兩個向量間的差別

提高運動估計演算法的效率的主要技術有:初始搜尋點的選擇,匹配準則,和運動搜尋策略。
1.運動估計初始點的搜尋:
1)直接選擇參考幀對應塊的中心位置,這種方法簡單,但容易陷入區域性最優點,如果初始的步長太大,而原點(指待搜尋塊的中心點在參考幀中的相同位置的對應點)不是最優點時候,可能使快速搜尋跳出原點周圍的區域,而去搜索較遠的點,導致搜尋方向的不確定性,陷入區域性最優。
2)選擇預測的起點,以預測點作為搜尋的起點,x264採用的將運動估計向量和參考幀的左邊,上邊和右上邊的MB的中值MV作為起點進行ME。
2. 匹配準則,
x264中所採用的匹配準則是SAD,SATD. SAD 

其餘一些準則:

 (1)絕對誤差和(SAD, Sum of Absolute Difference)準則;

 (2)均方誤差(MSE, Mean Square Error)準則;

 (3)歸一化互相關函式(NCCF, Normalized Cross Correlation Function)準則。

即絕對誤差和,僅反映殘差時域差異,影響PSNR值,不能有效反映碼流的大小。SATD即將殘差經哈德曼變換的4×4塊的預測殘差絕對值總和,可以將其看作簡單的時頻變換,其值在一定程度上可以反映生成碼流的大小。因此,不用率失真最優化時,可將其作為模式選擇的依據。
一般幀內要對所有的模式進行檢測,幀內預測選用SATD.在做運動估計時,一般而言,離最優匹配點越遠,匹配誤差值SAD越大,這就是有名的單一平面假設,現有的運動估計快速演算法大都利用該特性。但是,轉換後 SATD值並不滿足該條件,如果在整象素中運用SATD搜尋,容易陷入區域性最優點。而在亞象素中,待搜尋點不多,各點處的SAD差異相對不大,可以用 SATD選擇碼流較少的匹配位置。
3.運動搜尋策略
x264所採用的運動搜尋策略(對應的最後面的程式中有描述):
#define X264_ME_DIA  0 //鑽石搜尋
#define X264_ME_HEX  1 //六邊形所搜
#define X264_ME_UMH  2 //非對稱十字六邊形網路搜尋
#define X264_ME_ESA  3 //全搜尋
#define X264_ME_TESA  4 //hadamard 全搜尋法,這個演算法和ESA相比主要是在搜尋範圍上的變化

運動向量在時空域的預測方式

  如果對每個塊的運動向量進行編碼,那麼將花費相當數目的位元數,特別是如果選擇小尺寸的

  塊的時候。由於一個運動物體會覆蓋多個分塊,所以空間域相鄰塊的運動向量具有很強的相關性,

  因此,每個運動向量可以根據鄰近先前已編碼的塊進行預測,預測得到的運動向量用 MVp 表示,當

  前向量和預測向量之間的差值用 MVD 表示。同時由於物體運動的連續性,運動向量在時間域也存

  在一定相關性,因此也可以用鄰近參考幀的運動向量來預測。

  1) 運動向量空間域預測方式

  a、運動向量中值預測(Median Prediction)

  利用與當前塊 E 相鄰的左邊塊 A,上邊塊 B 和右上方的塊 C 的運動向量,取其中值來作為當前

  塊的預測運動向量。

  設 E 為當前巨集塊、巨集塊分割或者亞巨集塊分割, A 在 E 的左側,B 在 E 的上方、C 在 E 的右上

  方,如果 E 的左側多於一個塊,那麼選擇最上方的塊作為 A,在 E 的上方選擇最左側的塊作為 B。

  圖 3.18 表示所有的塊尺寸相同,圖 3.19 表示鄰近塊尺寸不同時作為預測 E 的運動向量的塊的選擇。

  在預測 E 的過程中遵守以下準則:

  1、對於除了塊尺寸為 16×8和 8×16 的塊來說,MVp是塊 A、B 和 C 的運動向量的中值;

  2、 對於 16×8 塊來說, 上方的 16×8 塊的MVp 根據B預測得到, 下方的 16×8 塊的 MVp 根據 A

  得到;

  3、 對於 8×16 塊來說, 左側的 16×8 塊的MVp 根據 A預測得到, 右側的 16×8 塊的 MVp 根據 C

  得到;

  4、對於不用編碼的可跳過去的巨集塊,16×16 向量MVp 如第一種情況得到。

  2) 運動向量在時間域預測方式

  a、前幀對應塊運動向量預測(Corresponding-block Prediction)

  利用前一幀的與當前塊相同座標位置的塊的運動向量來作為當前塊的預測運動向量

  所示。

  b、時間域的鄰近參考幀運動運動向量預測(Neighboring Reference-frame Prediction)

  由於視訊序列的連續性,當前塊在不同的參考幀中的運動向量也是有一定的的相干性的假設當前塊所在幀的時間為 t,則當在前面的參考幀 t’中搜索當前塊的最優匹配塊時,可

  以利用當前塊在參考幀 t’+1 中的運動向量來估測出當前塊在幀他 t’的運動向量:

  在上述運動向量的四種預測方式中,經過實驗證明,空間域的預測更為準確,其中上層塊預測

  的效能最優,因為其充分利用了不同預測塊模式運動向量之間的相關性。而中值預測效能隨著預測

  塊尺寸的減小而增加,這是因為當前塊尺寸越小,相關性越強。


運動搜尋演算法

  匹配誤差函式,可以用各種優化方法進行最小化,這就需要我們開發出高效的運動搜尋演算法,

  主要的幾種演算法歸納如下:

全域性搜尋演算法

  為當前幀的一個給定塊確定最優位移向量的全域性搜尋演算法方法是:在一個預先定義的搜尋區域

  內,把它與參考幀中所有的候選塊進行比較,並且尋找具有最小匹配誤差的一個。這兩個塊之間的

  位移就是所估計的 MV,這樣做帶來的結果必然導致極大的計算量。

分數精度搜索演算法

  由於在窮盡塊匹配演算法中搜索相應塊的步長不一定是整數,一般來說,為了實現 1/K畫素步長,

  對參考幀必須進行 K倍內插。與整畫素精度搜索相比,半畫素精度搜索在估計精度上有很大提高,特別是對於低清晰度視訊。

  但是,應用分數畫素步長,搜尋演算法的複雜性大大增加,例如,使用半畫素搜尋,搜尋點的總

  數比整數畫素精度搜索大四倍以上。

  那麼,如何確定適合運動估計的搜尋步長,對於視訊編碼的幀間編碼來說,即使得預測誤差最

  小化

 快速搜尋演算法

  快速搜尋演算法和全域性搜尋演算法相比,雖然只能得到次最佳的匹配結果,但在減少運算量方面效

  果顯著。

  1)二維對數搜尋法

  這種演算法的基本思路是採用大菱形搜尋模式和小菱形搜尋模式,從相應

  於零位移的位置開始搜尋,每一步試驗菱形排列的五個搜尋點。下一步,把中心移到前一步找到的

  最佳匹配點並重復菱形搜尋。當最佳匹配點是中心點或是在最大搜索區域的邊界上時,就減小搜尋

  步長(菱形的半徑)。否則步長保持不變。當步長減小到一個畫素時就到達了最後一步,並且在這最

  後一步檢驗九個搜尋點。初始搜尋步長一般設為最大搜索區域的一半。

  其後這類演算法在搜尋模式上又做了比較多的改進,在搜尋模式上採用了矩形模式,還有六

  邊形模式、十字形模式等等。

  2)三步搜尋法

  這種搜尋的步長從等於或者略大於最大搜索範圍的一半開始。第一步,在起始

  點和周圍八個 “1”標出的點上計算匹配誤差,如果最小匹配誤差在起始點出現,則認為沒有運動;

  第二步,以第一步中匹配誤差最小的點(圖中起始點箭頭指向的“1”)為中心,計算以“2”標出的 8

  個點處的匹配誤差。注意,在每一步中搜索步長搜都比上一步長減少一半,以得到更準確的估計;

  在第三步以後就能得到最終的估計結果,這時從搜尋點到中心點的距離為一個畫素。

  但是,上述一些快速演算法更適合用於估計運動幅度比較大的場合,對於部分運動幅度小的場

  合,它們容易落入區域性最小值而導致匹配精度很差,已經有很多各種各樣的視訊流證明了這一點。

  現在,針對這一缺點,國內外諸多專家學者也提出了相應的應對措施,特別是針對H.264編

  碼標準要求的一些快速演算法的改進,並取得卓越的效果。這種演算法通過在每一搜索步驟選擇多個搜尋結果,基於這些搜尋結果之間的

  匹配誤差的不同得到的最佳搜尋點,因而可以很好地解決落入區域性最小值的問題。

  [8]中提到一種適用於H.264的基於自適應搜尋範圍的快速運動估計演算法,經過實驗證明對於

  如salesman等中小運動序列,其速度可接近全域性搜尋演算法的400倍,接近三步搜尋演算法的4倍;而對於

  大運動序列,如table tennis,該演算法則會自動調節搜尋點數以適應複雜的運動。當從總體上考察速度

  方面的效能時,可以看到,該演算法平均速度是全域性搜尋演算法的287.4倍,三步搜尋的2.8倍。

分級搜尋範圍(DSR)演算法

  分級搜尋演算法的基本思想是從最低解析度開始逐級精度的進行不斷優化的運動搜尋策略,首先取得兩個原始圖象幀的金子塔表示,從上到下解析度逐級變細,從頂端開始,選擇一個尺寸比較大的資料塊進行一個比較粗略的運動搜尋過程,對在此基礎上進行亞抽樣(即通過降低資料塊尺寸(或提高抽樣解析度)和減少搜尋範圍的辦法)進行到下一個較細的級來細化運動矢

  量,而一個新的搜尋過程可以在上一級搜尋到的最優運動向量周圍進行。在亞抽樣的過程中也有著

  不同的抽樣方式和抽樣濾波器。這種方法的優點是運算量的下降比例比較大,而且搜尋的比較全面。

  缺點是由於亞抽樣或者濾波器的採用而使記憶體的需求增加,另外如果場景細節過多可能會容易落入

  區域性最小點。

混合搜尋演算法

  由於物體的運動千變萬化,很難用一種簡單的模型去描述,也很難用一種單一的演算法來搜尋最

  佳運動向量,因此實際上大多采用多種搜尋演算法相組合的辦法,可以在很大程度上提高預測的有效

  性和魯棒性。