在H.265/HEVC中,35種預(yù)測(cè)模式是在PU的基礎(chǔ)上定義的罩锐,而具體幀內(nèi)預(yù)測(cè)過程的實(shí)現(xiàn)則是以TU為單位的。編撰規(guī)定PU可以以四叉樹的形式劃分TU卤唉,且一個(gè)PU內(nèi)所有TU共享同一種預(yù)測(cè)模式的形式劃分TU,且一個(gè)PU內(nèi)的所有TU共享同一種預(yù)測(cè)模式涩惑。H.265/HEVC幀內(nèi)預(yù)測(cè)可分為以下3個(gè)步驟:
**
1.判斷當(dāng)前TU相鄰參考像素是否可用并做相應(yīng)的處理
2.對(duì)參考像素進(jìn)行濾波
3.根據(jù)濾波后的參考像素計(jì)算當(dāng)前TU的預(yù)測(cè)像素值
**
1.相鄰參考像素的獲取
如圖,當(dāng)前的TU大小為NxN桑驱,其參考像素按區(qū)域可分為5部分:左下(A)竭恬、左側(cè)(B)、左上(C)熬的、上方(D)和右上(E),一共4N+1個(gè)點(diǎn)痊硕。若當(dāng)前TU位于圖像邊界,或Slice押框、Tile的邊界(H.265/HEVC規(guī)定在幀內(nèi)編碼中岔绸,相鄰Slice或Tile不能相互參考),則相鄰參考像素可能會(huì)不存在或不可用。另外盒揉,在某些情形下A或E所在的塊可能尚未進(jìn)行編碼晋被,此時(shí)這些參考像素也是不可用的。
當(dāng)參考像素不存在或不可用時(shí)刚盈,H.265/HEVC標(biāo)準(zhǔn)會(huì)使用最鄰近的像素進(jìn)行填充羡洛。例如,若區(qū)域A的參考像素不存在藕漱,則區(qū)域A所有參考像素都用區(qū)域B最下方的像素進(jìn)行填充欲侮;若區(qū)域E的參考像素不存在,則區(qū)域E所有參考像素都用D最右側(cè)的像素進(jìn)行填充肋联。需要說明的是锈麸,若所有參考像素都不可用,則參考像素都用固定值填充牺蹄,該固定值大小為
R = 1 << (BitDepth -1)
源碼解析:
fillReferenceSamples這個(gè)函數(shù)忘伞,它主要功能是在真正進(jìn)行幀內(nèi)預(yù)測(cè)之前,使用重建后的Yuv圖像對(duì)當(dāng)前PU的相鄰樣點(diǎn)進(jìn)行賦值沙兰,為接下來進(jìn)行的角度預(yù)測(cè)提供參考樣點(diǎn)值氓奈。
源碼解析可以參考:http://blog.csdn.net/hevc_cjl/article/details/8175721
幀內(nèi)預(yù)測(cè)一個(gè)很重要的函數(shù)initAdiPattern,它的主要功能有三個(gè)鼎天,(1)檢測(cè)當(dāng)前PU的相鄰樣點(diǎn)包括左上舀奶、上、右上斋射、左育勺、左下鄰域樣點(diǎn)值的可用性,或者說檢查這些點(diǎn)是否存在罗岖;(2)參考樣點(diǎn)的替換過程涧至,主要實(shí)現(xiàn)的是JCTVC-J1003即draft 8.4.4.2.2的內(nèi)容,主要由函數(shù)fillReferenceSamples來完成桑包;(3)相鄰樣點(diǎn)即參考樣點(diǎn)的平滑濾波南蓬,主要實(shí)現(xiàn)draft 8.4.4.2.3的內(nèi)容。
源碼解析可以參考:http://blog.csdn.net/HEVC_CJL/article/details/8184276
2.參考像素的濾波
1.不同大小TU需要進(jìn)行參考像素濾波的模式
DC模式以及4x4大小的TU都不需要進(jìn)行參考像素濾波哑了。其他情形介紹如下:
32x32TU:除了模式10(水平)赘方、模式26(垂直)之外的所有角度模式以及Planar模式。
16x16TU:在32x32TU的基礎(chǔ)上進(jìn)一步出去最接近水平個(gè)垂直方向的4個(gè)模式——模式9弱左、11窄陡、25、27
8x8TU:僅對(duì)3個(gè)45度傾斜方向的模式(模式2拆火、18跳夭、34)以及Planar模式進(jìn)行參考像素濾波鳖悠。
2.常規(guī)濾波與強(qiáng)濾波方法
這部分就是需要滿足幾個(gè)條件進(jìn)行常規(guī)濾波或者強(qiáng)濾波。
2.預(yù)測(cè)像素的計(jì)算
與h.264/avc相比优妙,h.265/hevc增加使用了左下方塊的邊界像素作為當(dāng)前塊的參考乘综。這是由于h.264/avc以固定大小的宏塊為單元進(jìn)行編碼,在對(duì)當(dāng)前塊進(jìn)行幀內(nèi)預(yù)測(cè)時(shí)套硼,其左下方塊很有可能尚未進(jìn)行編碼卡辰,無法用于參考;而h.265/hevc四叉樹形的編碼結(jié)構(gòu)使得這一區(qū)域成為可用像素邪意。此外九妈,這一區(qū)域像素的使用也提供了更多可能的預(yù)測(cè)方向,在某些情形下(如傾斜向上方向的紋理等)能夠大幅度提高預(yù)測(cè)精度雾鬼。
H.265/HEVC亮度分量幀內(nèi)預(yù)測(cè)支持5種大小的PU: 4x4, 8x8, 16x16, 32x32, 64x64
每一種大小的PU都有35種預(yù)測(cè)模式:
1. Planar模式
2. DC 模式
3. 33種角度模式
所有預(yù)測(cè)模式都使用相同的模板萌朱。
1.Planar模式(解決漸變式的平滑紋理區(qū)域)
Planar模式是由H.264/AVC中的Plane模式發(fā)展而來的,它適用于圖像值緩慢變化的區(qū)域策菜。Planar模式使用水平和垂直方向的兩個(gè)線性濾波器晶疼,并將二者的平均值作為當(dāng)前塊像素的預(yù)測(cè)值。
2.DC模式(適用于大面積平坦區(qū)域)
DC模式適用于大面積平坦區(qū)域又憨,其做法與H.264/AVC基本相同翠霍。當(dāng)前塊預(yù)測(cè)值可由其左側(cè)和上方(注意不包含左上角、左上方和右上方)參考像素的平均值得到蠢莺。
3.角度模式
H.264/AVC使用了8中不同的預(yù)測(cè)方向(4x4大小)躏将,H.265/HEVC則進(jìn)一步細(xì)化了這些預(yù)測(cè)方向锄弱,規(guī)定了33種角度預(yù)測(cè)模式,以更好地適應(yīng)視頻內(nèi)容種不同方向的紋理祸憋。
下圖給出了33種角度模式的具體方向会宪,其中V0(模式26)和H0(模式10)分別表示為垂直和水平方向,其余模式的預(yù)測(cè)方向都可以看成再垂直或水平方向上做了一個(gè)偏移夺衍,該偏移角的大小可由模式下方的數(shù)字計(jì)算得出狈谊。
θ 為正表示預(yù)測(cè)方向向左偏移,θ為負(fù)表示預(yù)測(cè)方向向右偏移沟沙;對(duì)于水平類模式,θ為正表示預(yù)測(cè)方向向上偏移壁榕,θ為負(fù)表示預(yù)測(cè)方向向下偏移矛紫。
對(duì)于模式1125,當(dāng)前塊的預(yù)測(cè)需要同時(shí)用到上方和左側(cè)的參考像素牌里。為了能夠使用一種統(tǒng)一的形式來計(jì)算預(yù)測(cè)像素值颊咬,H.264/HEVC標(biāo)準(zhǔn)采用了一種“投影像素”的方法务甥,對(duì)于模式1825(垂直類模式),須將左側(cè)參考像素按給定方向偷影至上方參考像素的左側(cè)(水平排列)喳篇,而對(duì)于模式11~17(水平類模式)敞临,須將上方參考像素按給定方向投影至左側(cè)參考像素的上方(垂直排列)。
step:
- 對(duì)于給定垂直類模式M,使用“投影像素”法將其需要用到的參考像素映射為一維形式麸澜,記為Ref.
2.計(jì)算當(dāng)前像素對(duì)應(yīng)參考像素的Ref中的位置挺尿,記為pos:
pos = (y* offset[M]) >> 5
3.計(jì)算當(dāng)前像素對(duì)應(yīng)參考像素的加權(quán)因子w:
w = (y * offset[M]) & 31
其中,&表示按位與運(yùn)算炊邦。
4.計(jì)算當(dāng)前像素的預(yù)測(cè)值:
Px,y = ((32-w)Ref[pos]+wRef[pos+1]+16)>>5
需要注意的是,對(duì)于模式26(垂直模式)编矾,預(yù)測(cè)像素值改由下式計(jì)算:
Px,y = Rx,o +((Ro,y - Ro,o) >> 0)
源碼解析:
HM中TComPrediction.cpp文件下有以上模式的函數(shù),具體的解析可以參考:
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