主要內容:
-
幀內預測、幀間預測
-
運動補償
-
運動估計
一、H.264的塊、幀內預測、幀間預測
H.264/ AVC標准中的基本預測技術是基於塊,像素塊預測編碼包括幀內(intra)塊預測和幀間(inter)塊預測,在圖像信號壓縮編碼中,由於亮度信號和色差信號是分別進行處理的,因此,預測又可分亮度信號預測和色差信號預測。
幀內塊預測是利用相鄰像素的相關性,通過當前像素塊的左邊和上邊的像素進行預測,只需對實際值和預測值的差值進行編碼。
幀間預測是利用先前已編碼幀的圖像作為參考圖像對當前圖像進行預測的一種方式。它把參考圖像的抽樣點通過運動矢量的補償作為當前圖像抽樣值的參考值。
二、運動補償與運動估計
幀間預測中所需要的兩個主要技術就是運動估計和運動補償。
1、運動補償
1.1 基本概念:
運動補償是通過先前的局部圖像來預測、補償當前的局部圖像,它是減少幀序列冗余信息的有效方法。包括全局運動補償和分塊運動補償兩類。
運動補償是一種描述相鄰幀(相鄰在這里表示在編碼關系上相鄰,在播放順序上兩幀未必相鄰) 差別的方法,具體來說是描述前面一幀(相鄰在這里表示在編碼關系上的前面,在播放順序上未必在當前幀前面)的每個小塊怎樣移動到當前幀中的某個位置去。這種方法經常被視頻壓縮/視頻編解碼器用來減少視頻序列中的空域冗余。它也可以用來進行去交織(deinterlacing)的操作。
最早的運動補償的設計只是簡單的從當前幀中減去參考幀,從而得到通常含有較少能量(或者成為信息)的"殘差",從而可以用較低的碼率進行編碼。
稍微復雜一點的設計是估計一下整幀場景的移動和場景中物體的移動,並將這些運動通過一定的參數編碼到碼流中去。這樣預測幀上的像素值就是由參考幀上具有一定位移的相應像素值而生成的。這樣的方法比簡單的相減可以獲得能量更小的殘差,從而獲得更好的壓縮比。
1.2 I幀、P幀、B幀的運動補償:
通常,圖像幀是一組一組進行處理的。每組的第一幀(通常是第一幀)在編碼的時候不使用運動估計的辦法,這種幀稱為幀內編碼幀(Intra frame)或者I幀。該組中的其它幀使用幀間編碼幀(Inter frame),通常是P幀。這種編碼方式通常被稱為IPPPP,表示編碼的時候第一幀是I幀,其它幀是P幀。
在進行預測的時候,不僅僅可以從過去的幀來預測當前幀,還可以使用未來的幀來預測當前幀。當然在編碼的時候,未來的幀必須比當前幀更早的編碼,也就是說,編碼的順序和播放的順序是不同的。通常這樣的當前幀是使用過去和未來的I幀或者P幀同時進行預測,被稱為雙向預測幀,即B幀。這種編碼方式的編碼順序的一個例子為 IBBPBBPBBPBB。
1.3 全局運動補償
在全局運動補償中,運動模型基本上就是反映攝像機的各種運動,包括平移,旋轉,變焦等等。這種模型特別適合對沒有運動物體的靜止場景的編碼。全局運動補償有下面的一些優點: 1)該模型僅僅使用少數的參數對全局的運行進行描述,參數所占用的碼率基本上可以忽略不計。 2)該方法不對幀進行分區編碼,這避免了分區造成的塊效應。 3)在時間方向的一條直線的點如果在空間方向具有相等的間隔,就對應了在實際空間中連續移動的點。其它的運動估計算法通常會在時間方向引入非連續性。
但缺點是,如果場景中有運動物體的話,全局運動補償就不足以表示了。這時候應該選用其它的方法。
1.4 分塊運動補償
在分塊運動補償中,每幀被分為若干像素塊 (在大多數視頻編碼標准,如MPEG中,是分為16x16的像素塊)。從參考幀的某個位置的等大小的塊對當前塊進行預測,預測的過程中只有平移,平移的大小被稱為運動矢量。
對分塊運動補償來說,運動矢量是模型的必要參數,必須一起編碼加入碼流中。由於運動矢量之間並不是獨立的(例如屬於同一個運動物體的相鄰兩塊通常運動的相關性很大),通常使用差分編碼來降低碼率。這意味着在相鄰的運動矢量編碼之前對它們作差,只對差分的部分進行編碼。使用熵編碼對運動矢量的成分進行編碼可以進一步消除運動矢量的統計冗余(通常運動矢量的差分集中於0矢量附近)。
運動矢量的值可以是非整數的,此時的運動補償被稱為亞像素精度的運動補償。這是通過對參考幀像素值進行亞像素級插值,而后進行運動補償做到的。最簡單的亞像素精度運動補償使用半像素精度,也有使用1/4像素和1/8像素精度的運動補償算法。更高的亞像素精度可以提高運動補償的精確度,但是大量的插值操作大大增加了計算復雜度。
分塊運動補償的一個大缺點在於在塊之間引入的非連續性,通常稱為塊效應。當塊效應嚴重時,解碼圖像看起來會有像馬賽克一樣的效果,嚴重影響視覺質量。另外一個缺點是,當高頻分量較大時,會引起振鈴效應。關於高頻分量,請參見對運動補償后的殘差進行變換的方法: 變換編碼。http://www.51cto.com/art/200804/70266.htm
1.5 運動補償的原理與步驟
運動補償的基本原理是,當編碼器對圖像序列中地第N幀進行處理時,利用運動補償中地核心技術-運動估值ME(Motion Estimation),得到第N幀得預測幀N´。在實際編碼傳輸時,並不總時傳輸第N幀,而是第N幀和其預測幀N´得差值△。如果運動估計十分有效,△中得概率基本上分布在零附近,從而導致△比原始圖像第N幀得能量小得多,編碼傳輸△所需得比特數也就少得多。
運動補償的步驟如下:
(1)圖像分割為靜止得和運動的兩部分,估計物體得位移向量(位移值)。
(2)按照估計得到的位移向量取得前一幀的圖像數據。
(3)通過使用預測濾波器,得到前一幀圖像數據的預測像素。
2、運動估計
2.1 基本思想
運動估計的基本思想是將圖像序列的每一幀分成許多互不重疊的宏塊,並認為宏塊內所有象素的位移量都相同,然后對每個宏塊到參考幀某一給定特定搜索范圍內根據一定的匹配准則找出與當前塊最相似的塊,即匹配塊,匹配塊與當前塊的相對位移即為運動矢量。視頻壓縮的時候,只需保存運動矢量和殘差數據就可以完全恢復出當前塊。得到運動矢量的過程被稱為運動估計。
運動矢量和經過運動匹配后得到的預測誤差共同發送到解碼端,在解碼端按照運動矢量指明的位置,從已經解碼的鄰近參考幀圖像中找到相應的塊或宏塊,和預測誤差相加后就得到了塊或宏塊在當前幀中的位置。
實際應用時,只將運動矢量及最佳匹配塊與當前塊之間的差值塊一起編碼傳輸。在接收端,通過運動矢量在已經恢復的相鄰幀中找到當前塊的最佳匹配塊,並與接收到的差值塊相加恢復出當前塊,這就是運動補償基本過程。
2.2 運動估計算法
運動估計算法是視頻壓縮編碼的核心算法之一。高質量的運動估計算法是高效視頻編碼的前提和基礎。其中塊匹配法(BMA, Block Match Algorithm)由於算法簡單和易於硬件實現,被廣泛應用於各視頻編碼標准中。塊匹配法的基本思想是先將圖像划分為許多子塊,然后對當前幀中的每一塊根據一定的匹配准則在相鄰幀中找出當前塊的匹配塊,由此得到兩者的相對位移,即當前塊的運動矢量。在H.264標准的搜索算法中,圖像序列的當前幀被划分成互不重疊16×16大小的子塊,而每個子塊又可划分成更小的子塊,當前子塊按一定的塊匹配准則在參考幀中對應位置的一定搜索范圍內尋找最佳匹配塊,由此得到運動矢量和匹配誤差。運動估計的估計精度和運算復雜度取決於搜索策略和塊匹配准則。這里使用H.264推薦算法UMHexagonS(Unsymmetrical-cross Multi-Hexagon-grid Search)作為DSP實現的算法參考,與FS算法比較,它在保證可靠搜索精度的前提下大幅降低搜索復雜度。同時使用絕對差和(SAD, the Sum of Absolute Difference)標准作為匹配准則,它具有便於硬件實現的優點。
三、參考文獻: