2.H.265/HEVC —— 幀內預測

在H.265/HEVC中,35種預測模式是在PU的基礎上定義的,而具體幀內預測過程的實現則是以TU爲單位的。編撰規定PU可以以四叉樹的形式劃分TU,且一個PU內所有TU共享同一種預測模式的形式劃分TU,且一個PU內的所有TU共享同一種預測模式。H.265/HEVC幀內預測可分爲以下3個步驟:
**
1.判斷當前TU相鄰參考像素是否可用並做相應的處理
2.對參考像素進行濾波
3.根據濾波後的參考像素計算當前TU的預測像素值
**


1.相鄰參考像素的獲取

如圖,當前的TU大小爲NxN,其參考像素按區域可分爲5部分:左下(A)、左側(B)、左上(C)、上方(D)和右上(E),一共4N+1個點。若當前TU位於圖像邊界,或Slice、Tile的邊界(H.265/HEVC規定在幀內編碼中,相鄰Slice或Tile不能相互參考),則相鄰參考像素可能會不存在或不可用。另外,在某些情形下A或E所在的塊可能尚未進行編碼,此時這些參考像素也是不可用的。

相鄰參考像素位置

當參考像素不存在或不可用時,H.265/HEVC標準會使用最鄰近的像素進行填充。例如,若區域A的參考像素不存在,則區域A所有參考像素都用區域B最下方的像素進行填充;若區域E的參考像素不存在,則區域E所有參考像素都用D最右側的像素進行填充。需要說明的是,若所有參考像素都不可用,則參考像素都用固定值填充,該固定值大小爲

 

                                         R = 1 << (BitDepth -1)

源碼解析:
fillReferenceSamples這個函數,它主要功能是在真正進行幀內預測之前,使用重建後的Yuv圖像對當前PU的相鄰樣點進行賦值,爲接下來進行的角度預測提供參考樣點值。
源碼解析可以參考:http://blog.csdn.net/hevc_cjl/article/details/8175721

幀內預測一個很重要的函數initAdiPattern,它的主要功能有三個,(1)檢測當前PU的相鄰樣點包括左上、上、右上、左、左下鄰域樣點值的可用性,或者說檢查這些點是否存在;(2)參考樣點的替換過程,主要實現的是JCTVC-J1003即draft 8.4.4.2.2的內容,主要由函數fillReferenceSamples來完成;(3)相鄰樣點即參考樣點的平滑濾波,主要實現draft 8.4.4.2.3的內容。
源碼解析可以參考:http://blog.csdn.net/HEVC_CJL/article/details/8184276


2.參考像素的濾波

1.不同大小TU需要進行參考像素濾波的模式
DC模式以及4x4大小的TU都不需要進行參考像素濾波。其他情形介紹如下:
32x32TU:除了模式10(水平)、模式26(垂直)之外的所有角度模式以及Planar模式。
16x16TU:在32x32TU的基礎上進一步出去最接近水平個垂直方向的4個模式——模式9、11、25、27
8x8TU:僅對3個45度傾斜方向的模式(模式2、18、34)以及Planar模式進行參考像素濾波。

2.常規濾波與強濾波方法
這部分就是需要滿足幾個條件進行常規濾波或者強濾波。


2.預測像素的計算

與h.264/avc相比,h.265/hevc增加使用了左下方塊的邊界像素作爲當前塊的參考。這是由於h.264/avc以固定大小的宏塊爲單元進行編碼,在對當前塊進行幀內預測時,其左下方塊很有可能尚未進行編碼,無法用於參考;而h.265/hevc四叉樹形的編碼結構使得這一區域成爲可用像素。此外,這一區域像素的使用也提供了更多可能的預測方向,在某些情形下(如傾斜向上方向的紋理等)能夠大幅度提高預測精度。

h.264 4x4 luma prediction modes

h.265/hevc 幀內參考示意圖


H.265/HEVC亮度分量幀內預測支持5種大小的PU: 4x4, 8x8, 16x16, 32x32, 64x64
每一種大小的PU都有35種預測模式:
1. Planar模式
2. DC 模式
3. 33種角度模式
所有預測模式都使用相同的模板。


1.Planar模式(解決漸變式的平滑紋理區域)

Planar模式是由H.264/AVC中的Plane模式發展而來的,它適用於圖像值緩慢變化的區域。Planar模式使用水平和垂直方向的兩個線性濾波器,並將二者的平均值作爲當前塊像素的預測值。

 

幀內Planar模式預測

a)對應像素的計算公式 b)其計算效果圖


2.DC模式(適用於大面積平坦區域)

DC模式適用於大面積平坦區域,其做法與H.264/AVC基本相同。當前塊預測值可由其左側和上方(注意不包含左上角、左上方和右上方)參考像素的平均值得到。

在4X4的非邊緣塊,即藍色透明部分


3.角度模式

H.264/AVC使用了8中不同的預測方向(4x4大小),H.265/HEVC則進一步細化了這些預測方向,規定了33種角度預測模式,以更好地適應視頻內容種不同方向的紋理。

下圖給出了33種角度模式的具體方向,其中V0(模式26)和H0(模式10)分別表示爲垂直和水平方向,其餘模式的預測方向都可以看成再垂直或水平方向上做了一個偏移,該偏移角的大小可由模式下方的數字計算得出。

33種角度模式的預測方向

 

θ 爲正表示預測方向向左偏移,θ爲負表示預測方向向右偏移;對於水平類模式,θ爲正表示預測方向向上偏移,θ爲負表示預測方向向下偏移。

對於模式1125,當前塊的預測需要同時用到上方和左側的參考像素。爲了能夠使用一種統一的形式來計算預測像素值,H.264/HEVC標準採用了一種“投影像素”的方法,對於模式1825(垂直類模式),須將左側參考像素按給定方向偷影至上方參考像素的左側(水平排列),而對於模式11~17(水平類模式),須將上方參考像素按給定方向投影至左側參考像素的上方(垂直排列)。

 


step:

 

  1. 對於給定垂直類模式M,使用“投影像素”法將其需要用到的參考像素映射爲一維形式,記爲Ref.
    2.計算當前像素對應參考像素的Ref中的位置,記爲pos:
    pos = (y* offset[M]) >> 5
    3.計算當前像素對應參考像素的加權因子w:
    w = (y * offset[M]) & 31
    其中,&表示按位與運算。
    4.計算當前像素的預測值:
    Px,y = ((32-w)Ref[pos]+wRef[pos+1]+16)>>5
    需要注意的是,對於模式26(垂直模式),預測像素值改由下式計算:
    Px,y = Rx,o +((Ro,y - Ro,o) >> 0)

源碼解析:
HM中TComPrediction.cpp文件下有以上模式的函數,具體的解析可以參考:
http://blog.csdn.net/hevc_cjl/article/details/8175721
http://blog.csdn.net/hevc_cjl/article/details/8184276
http://blog.csdn.net/hevc_cjl/article/details/8200793
http://blog.csdn.net/hevc_cjl/article/details/8216065
http://blog.csdn.net/hevc_cjl/article/details/8259844
http://blog.csdn.net/hevc_cjl/article/details/8259844

TComPrediction.cpp



作者:Persistently
鏈接:https://www.jianshu.com/p/d19d7eb3844a
來源:簡書
著作權歸作者所有。商業轉載請聯繫作者獲得授權,非商業轉載請註明出處。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章