H.264預測編碼之幀間預測
預測編碼是視訊壓縮中最基本的編碼工具,常見的預測編碼為幀間預測和幀內預測。
視訊編碼中,主要的冗餘資訊是時間冗餘,其次是空間冗餘,視訊編碼通過幀間預測消除時間冗餘,通過幀內預測消除空間冗餘。接下來說說幀間預測。
幀間預測就是時域預測,旨在消除時域冗餘資訊,簡單點說就是利用之前編碼過的影象來預測要編碼的影象。
先說下幀間預測的兩個概念:
1、運動估計。
運動估計是尋找當前編碼的塊在已編碼的影象(參考幀)中的最佳對應塊,並且計算出對應塊的偏移(運動向量)。
圖1
P為當前幀,Pr為參考幀,B為當前碼塊,Br是Pr中與B塊相減殘差最小的塊,Br稱為B的最佳匹配塊。
B*與B在影象中的座標位置相同,Br座標為(Xr,Yr),B*座標為(Xr,Yr)。Br座標減去B*的座標就是運動向量MV。
2、運動補償。
運動補償是根據運動向量和幀間預測方法,求得當前幀的估計值過程。其實說白了就是將運動向量引數貼到參考幀上獲取當前幀。另外運動補償是一個過程。
幀間預測工作流程圖如下:
圖2
圖3
圖2為幀間預測編碼過程,圖3是解碼過程。
幀間預測包括前向預測,後向預測和雙向預測。後向預測和雙向預測一般不會在實時應用中使用,例如視訊會議,視訊電話,比方說有第一幀,第二幀,第三幀,這時如果對第二幀進行後向預測或者雙向預測的話,必須先編碼第三幀,這樣的話勢必會產生編碼延時,所以實時性不OK。對實時性要求不高的應用可以使用,比如網路視訊中就使用了大量的雙向預測編碼。
運動估計準則:
在運動搜尋尋找最佳匹配塊的過程中,對於兩個塊是否匹配得有一個規則判斷。目前有以下幾種:
1、絕對誤差和(SAD)。
2、最小變化域絕對誤差和(SATD)。
3、差值平和和(SSD)。
4、平均絕對差值(MAD)。
5、平均平方誤差(MSD)。
由於SAD的計算最為簡單,只有加減法和絕對值運算,便於硬體實現,該函式在實際中使用最多。
運動搜尋演算法:
在搜尋允許範圍內,查詢最佳匹配塊的過程。
1、全搜尋演算法。
全域性搜尋就是把運動搜尋範圍內的每個可能位置都搜尋一遍,此演算法複雜度太高,效率低。
2、快速搜尋演算法。
快速搜尋就是避開不太可能的位置,找到最佳匹配塊。搜尋大致流程為:
a、確定初始搜尋點。
b、搜尋到某點確定是否是最佳匹配位置若不是繼續按照規則遞迴搜尋。
最後說下亞畫素預測和重疊塊運動補償(OBMC,Overlapped Block Motion Compensation)
在上面提到的搜尋過程中,都是以整畫素為但是進行的,為了提高搜尋精度,在運動搜尋過程中用到了1/2,1/4,1/8畫素步長進行搜尋。
視訊中只包含整數畫素點,亞畫素點則需要通過插值計算出來,1/2畫素由整數點插值得到,1/4畫素點由1/2畫素點和整畫素點通過插值得到。
OBMC主要是為了提高預測精度和降低編碼的塊效應。塊效應的產生主要是由於相鄰塊編碼損傷程度不同,從而產生灰度的跳躍性變化,人眼對灰度的階躍比較敏感。
在OBMC中,當前編碼塊包含多個運動向量,除了自身的,還包含周圍的。通過引入一組加權係數,對每個候選的運動預測塊加權得到最終的運動預測。另外不是每個巨集塊採用OBMC都有增益,在編碼時給編碼塊一個是否採用OBMC的標誌,可以進一步增加編碼的靈活性。