本文想講清楚的問(wèn)題是:HEVC的幀內(nèi)預(yù)測(cè)標(biāo)準(zhǔn)與其背后的原理
HEVC中一共有35種預(yù)測(cè)模式——DC、PLANAR和33種角度預(yù)測(cè)模式,如下表所示
| 模式 | 對(duì)應(yīng)名字 |
|---|---|
| 0 | INTRA_PLANAR |
| 1 | INTRA_DC |
| 2…34 | INTRA_ANGULAR |
其中角度預(yù)測(cè)模式又分為水平模式(2-17)和垂直模式(18-33)(為什么34不算垂直模式?)。
幀內(nèi)預(yù)測(cè)由三個(gè)步驟組成 1. 構(gòu)建參考像素 2. 預(yù)測(cè) 3. 后處理
參考像素構(gòu)建主要包括兩個(gè)部分:參考像素替換(substitution)和對(duì)替換后的參考像素進(jìn)行濾波處理
HEVC中參考像素由當(dāng)前塊的左、左上、左下、上和右上的像素來(lái)構(gòu)成,如圖1所示. 
圖1 幀內(nèi)預(yù)測(cè)的參考像素
但是,其周?chē)膲K并不總是可用的,這時(shí)就需要補(bǔ)充不可用的像素點(diǎn)。 填充方法如下所示: - 步驟1:當(dāng)A塊可用時(shí),該步驟可以略去;當(dāng)A不可用時(shí),按圖2中箭頭方向找到第一個(gè)可用塊,那么將其第一個(gè)像素(按箭頭方向)的值賦給A中所有位置。例如,當(dāng)A不可用而B(niǎo)可用時(shí),A中所有元素都用B中最下面的那個(gè)元素進(jìn)行賦值。 - 步驟2:對(duì)其他位置進(jìn)行賦值時(shí),從B開(kāi)始,當(dāng)其不可用時(shí),則用上一個(gè)塊的最后一個(gè)像素(按箭頭方向)來(lái)對(duì)該塊進(jìn)行賦值。例如,當(dāng)B不可用時(shí),則B中所有元素都用A中最上面的那個(gè)元素進(jìn)行賦值。
該步驟的目的是使得對(duì)于一個(gè)塊來(lái)說(shuō)(如圖1中的塊F),即便在某些參考像素不可用時(shí),使用該像素的預(yù)測(cè)模式仍然可用。
這也是HEVC幀內(nèi)預(yù)測(cè)與AVC(264)的幀內(nèi)預(yù)測(cè)的不同之處:在某些參考像素不可用時(shí),AVC中僅允許使用DC模式,而HEVC中則可以使用全部模式。
進(jìn)行濾波的目的是為了避免使用參考像素預(yù)測(cè)后得到的預(yù)測(cè)塊可能會(huì)產(chǎn)生不希望的定向邊(directional edges)的現(xiàn)象,這樣通過(guò)濾波來(lái)提高視覺(jué)效果。 濾波的選擇是通過(guò)預(yù)測(cè)塊的大小和使用的幀內(nèi)預(yù)測(cè)模式來(lái)定的,具體見(jiàn)表2
表2 參考像素濾波的選擇(0表示不進(jìn)行濾波,1表示進(jìn)行濾波)
| 預(yù)測(cè)塊大小 | 模式-DC | 對(duì)角線模式(2/18/34) | 水平和垂直方向(10/26) | 近水平和垂直方向(9/11/25/27) | 其他模式 |
|---|---|---|---|---|---|
| 4x4 | 0 | 0 | 0 | 0 | 0 |
| 8x8 | 0 | 1 | 0 | 0 | 0 |
| 16x16 | 0 | 1 | 0 | 0 | 1 |
| 32x32 | 0 | 1 | 0 | 1 | 1 |
一共有兩種濾波方法可以選擇
三抽頭[1 2 1]/4平滑濾波器線性插值其中第2個(gè)濾波只有在塊大小為32x32,且參考像素足夠平滑時(shí)才使用(平滑的判定條件見(jiàn)標(biāo)準(zhǔn))
經(jīng)過(guò)濾波后的參考像素即可用于塊預(yù)測(cè)了。
拋去具體的計(jì)算細(xì)節(jié),這兒主要討論三個(gè)問(wèn)題: 1. 幀內(nèi)預(yù)測(cè)的1/32像素是怎么回事 2. 計(jì)算過(guò)程中的intraPRedAngle和invAngle是怎么回事 3. 計(jì)算過(guò)程中的iIdx和iFact是什么

圖2 幀內(nèi)預(yù)測(cè)方向
在圖2中,只有紅框標(biāo)記的為整像素,而其他的點(diǎn)都是1/32像素的線性插值。這就是為什么在預(yù)測(cè)時(shí)會(huì)有( ( 32 ? iFact ) * ref[ x + iIdx + 1 ] + iFact * ref[ x + iIdx + 2 ] + 16 ) >> 5這樣的公式,因?yàn)檫@是在進(jìn)行1/32線性插值。
intraPredAngle定義了角度模式的角度。如圖2中,模式9,水平方向向下偏移了2個(gè)1/32像素,所以其對(duì)應(yīng)的intraPredAngle為2。intraPredAngle其實(shí)是相對(duì)于水平或者垂直方向以1/32像素為單位的偏移(右和下為正)。
參考圖1,對(duì)塊F進(jìn)行預(yù)測(cè),如果模式為26-34,那么只需要參考上方的像素;如果模式為2-10,則只需要參考圖像左邊的像素。 而對(duì)于模式11-25,則需要同時(shí)參考上方和左方的像素。那么就需要將左方或者上方的像素投射到上方或左方。
invAngle定義了投射關(guān)系。
對(duì)于垂直模式來(lái)說(shuō)
ref[ x ] = p[ ?1 ][ ?1 + ( ( x * invAngle + 128 ) >> 8 ) ];以模式23為例, 若要保證平行,那么當(dāng)x=-9時(shí),?1 + ( ( -9 * invAngle + 128 ) >> 8 )應(yīng)該等于31,即
128僅僅是一個(gè)四舍五入的因子
如果x表示圖中所標(biāo)志的角度的話,那么上式可以寫(xiě)為
這就容易理解為什么叫做invAngle了.

新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注