運動補償

運動補償是一種描述相鄰幀(相鄰在這裏表示在編碼關系上相鄰,在播放順序上兩幀未必相鄰)差別的方法,具體來說是描述前面一幀(相鄰在這裏表示在編碼關系上的前面,在播放順序上未必在當前幀前面)的每個小塊怎樣移動到當前幀中的某個位置去。這種方法經常被影片壓縮/影片編解碼器用來減少影片序列中的空域冗餘。它也可以用來進行去交織(deinterlacing)的操作。

  • 中文名稱
    運動補償
  • 外文名稱
    Motion Compensation
  • 分類
    2類
  • 屬性
    專業術語

​定義

運動補償是圖像/影片編解碼,以及影片處理中的一個專業術語。

運動補償是通過先前的局部圖像來預測、補償當前的局部圖像,它是減少幀序列冗餘信息的有效方法。

分類

包括 全局運動補償分塊運動補償 兩類。

一個影片序列包含一定數量的圖片--通常稱為幀。相鄰的圖片通常很相似,也就是說,包含了很多冗餘。使用運動補償的目的是通過消除這種冗餘,來提高壓縮比。

運動補償

早期解析

最早的運動補償的設計隻是簡單的從當前幀中減去參考幀,從而得到通常含有較少能量(或者成為信息)的"殘差",從而可以用較低的碼率進行編碼。解碼器可以通過簡單的加法完全恢復編碼幀。

一個稍微復雜一點的設計是估計一下整幀場景的移動和場景中物體的移動,並將這些運動通過一定的參數編碼到碼流中去。這樣預測幀上的像素值就是由參考幀上具有一定位移的相應像素值而生成的。這樣的方法比簡單的相減可以獲得能量更小的殘差,從而獲得更好的壓縮比--當然,用來描述運動的參數不能在碼流中佔據太大的部分,否則就會抵消復雜的運動估計帶來的好處。

通常,圖像幀是一組一組進行處理的。每組的第一幀(通常是第一幀)在編碼的時候不使用運動估計的辦法,這種幀稱為幀內編碼幀(Intra frame)或者I幀。該組中的其它幀使用幀間編碼幀(Inter frame),通常是P幀。這種編碼方式通常被稱為IPPPP,表示編碼的時候第一幀是I幀,其它幀是P幀。

在進行預測的時候,不僅僅可以從過去的幀來預測當前幀,還可以使用未來的幀來預測當前幀。當然在編碼的時候,未來的幀必須比當前幀更早的編碼,也就是說,編碼的順序和播放的順序是不同的。通常這樣的當前幀是使用過去和未來的I幀或者P幀同時進行預測,被稱為雙向預測幀,即B幀。這種編碼方式的編碼順序的一個例子為 IBBPBBPBBPBB。

全局運動補償

運動模型基本上就是反映攝像機的各種運動,包括平移,旋轉,變焦等等。這種模型特別適合對沒有運動物體的靜止場景的編碼。全局運動補償有下面的一些優點:

該模型僅僅使用少數的參數對全局的運行進行描述,參數所佔用的碼率基本上可以忽略不計。

該方法不對幀進行分區編碼,這避免了分區造成的塊效應

在時間方向的一條直線的點如果在空間方向具有相等的間隔,就對應了在實際空間中連續移動的點。其它的運動估計演算法通常會在時間方向引入非連續性。

但是,缺點是,如果場景中有運動物體的話,全局運動補償就不足以表示了。這時候應該選用其它的方法。

分塊運動補償

每幀被分為若幹像素塊 (在大多數影片編碼標準,如MPEG中,是分為16x16的像素塊)。從參考幀的某個位置的等大小的塊對當前塊進行預測,預測的過程中隻有平移,平移的大小被稱為運動矢量。

對分塊運動補償來說,運動矢量是模型的必要參數,必須一起編碼加入碼流中。由于運動矢量之間並不是獨立的(例如屬于同一個運動物體的相鄰兩塊通常運動的相關性很大),通常使用差分編碼來降低碼率。這意味著在相鄰的運動矢量編碼之前對它們作差,隻對差分的部分進行編碼。使用熵編碼對運動矢量的成分進行編碼可以進一步消除運動矢量的統計冗餘(通常運動矢量的差分集中于0矢量附近)。

運動矢量的值可以是非整數的,此時的運動補償被稱為亞像素精度的運動補償。這是通過對參考幀像素值進行亞像素級插值,而後進行運動補償做到的。最簡單的亞像素精度運動補償使用半像素精度,也有使用1/4像素和1/8像素精度的運動補償演算法。更高的亞像素精度可以提高運動補償的精確度,但是大量的插值操作大大增加了計算復雜度

缺點

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