康伏云,陳 磊,許城鋼,陶 曦,劉子豪
(北京郵電大學(xué) 信息與通信工程學(xué)院,北京 100876)
與幀間預(yù)測(cè)消除時(shí)間冗余不同,幀內(nèi)預(yù)測(cè)利用當(dāng)前幀已編碼像素進(jìn)行預(yù)測(cè),從而消除空間冗余。幀內(nèi)預(yù)測(cè)是基于編碼單元進(jìn)一步劃分的預(yù)測(cè)單元,采用有限個(gè)預(yù)測(cè)角度方向,根據(jù)圖像特征選擇出率失真代價(jià)最小的預(yù)測(cè)模式作為最佳預(yù)測(cè)方向。
為了更加精細(xì)化地劃分,得到更準(zhǔn)確的預(yù)測(cè)值,AVS3在AVS2所采用的基于四叉樹(shù)(QT)的塊劃分結(jié)構(gòu)基礎(chǔ)上,引入了二叉樹(shù)(BT)和擴(kuò)展四叉樹(shù)(EQT)劃分方式,因此編碼單元、預(yù)測(cè)單元會(huì)出現(xiàn)非方形,如圖1所示。
圖1 塊劃分方式
圖1 從左至右的劃分方式依次為QT、水平BT、垂直BT、水平EQT、垂直EQT。
在此塊劃分基礎(chǔ)上,幀內(nèi)預(yù)測(cè)的尺寸有:4×4、4×8、4×16、4×32、8×4、8×16、8×32及8×64等。最小塊為4×4,最大塊64×64。
多叉樹(shù)的劃分方式與非方形的編碼、預(yù)測(cè)單元可以更好地匹配各種不同紋理的圖像,但是劃分種類的增多大大增加了預(yù)測(cè)時(shí)判斷最終劃分和預(yù)測(cè)模式所需的時(shí)間。
1.2.1 幀內(nèi)預(yù)測(cè)角度
為了更好地去除幀內(nèi)冗余,AVS3在AVS2的33種角度模式基礎(chǔ)上提供了更豐富、細(xì)致的幀內(nèi)預(yù)測(cè)模式。AVS3亮度預(yù)測(cè)塊幀內(nèi)預(yù)測(cè)編碼采用像素插值技術(shù),一共有66種模式,包括DC預(yù)測(cè)模式、Plane預(yù)測(cè)模式、Bilinear預(yù)測(cè)模式以及63種角度預(yù)測(cè)模式[1],如圖2所示。其中,預(yù)測(cè)模式12和24分別為垂直模式、水平模式。垂直模式是直接使用最上方的相鄰像素點(diǎn)的值作為PU中整列像素點(diǎn)的預(yù)測(cè)值。同理,水平模式作為整行像素點(diǎn)的預(yù)測(cè)值,使用的是最左側(cè)相鄰像素點(diǎn)的值。其中,Plane模式和DC模式適用于逐漸變化和平滑的內(nèi)容塊。對(duì)于角度預(yù)測(cè)模式,預(yù)測(cè)值由給定方向的預(yù)測(cè)函數(shù)通過(guò)參考像素計(jì)算得到。
圖2 AVS3幀內(nèi)預(yù)測(cè)模式
1.2.2 AVS3幀內(nèi)預(yù)測(cè)角度選擇算法
隨著標(biāo)準(zhǔn)的不斷發(fā)展,預(yù)測(cè)角度越來(lái)越精細(xì)和復(fù)雜,為了降低遍歷的復(fù)雜度,編碼器中往往會(huì)加入針對(duì)幀內(nèi)角度預(yù)測(cè)的選擇算法。以最新的AVS3為例,選擇算法主要分為3部分。
(1)粗 選 擇(Rough Mode Decision,RMD)。RMD具體步驟為先從非角度預(yù)測(cè)模式和4倍角模式(如表1所示)組成初始粗選模式候選列表作為輸入,粗選出最優(yōu)的10個(gè)角度;然后對(duì)這10個(gè)角度計(jì)算左右相鄰的2倍角,更新得到最優(yōu)6個(gè)角度;對(duì)6個(gè)角度計(jì)算左和右的1倍角,更新得到最終進(jìn)入率失真優(yōu)化(Rate Distortion Optimization,RDO)的角度。
表1 AVS3幀內(nèi)預(yù)測(cè)模式分類
(2)最可 能編碼 模 式(Most Probable Mode,MPM)。由于預(yù)測(cè)單元在空間上具有預(yù)測(cè)模式的相關(guān)性,不必每次都進(jìn)行獨(dú)立編碼,可以按照一定規(guī)則確定候選模式集,這樣對(duì)于很多命中候選模式的PU,在編碼時(shí)只需傳輸模式集中的索引值即可,減少獨(dú)立編碼的冗余。
(3)率失真優(yōu)化(Rate Distortion Optimization,RDO)過(guò)程。對(duì)候選模式集計(jì)算率失真優(yōu)化,RD cost最小的預(yù)測(cè)模式作為最佳角度預(yù)測(cè)模式[2]。
該選擇算法大大減少了幀內(nèi)預(yù)測(cè)時(shí)間復(fù)雜度,其基本思想是先進(jìn)行粗選后細(xì)選。但其RMD過(guò)程需要遍歷18個(gè)角度,粗選的范圍仍然較大。本文提出的算法利用頻域DCT系數(shù)計(jì)算預(yù)測(cè)得到預(yù)測(cè)塊的紋理方向,更進(jìn)一步地縮小粗選的遍歷 范圍。
幀內(nèi)預(yù)測(cè)的基本思想是使用一幀圖像中相鄰像素的相關(guān)性來(lái)消除空間上的冗余,它主要分為塊劃分和模式判決兩個(gè)部分。不做任何加速處理的幀內(nèi)預(yù)測(cè)需要對(duì)劃分進(jìn)行遞歸,對(duì)模式進(jìn)行窮舉,是一個(gè)非常耗時(shí)的過(guò)程。
視頻編碼中,對(duì)預(yù)測(cè)殘差進(jìn)行二維DCT,可以將時(shí)域圖像轉(zhuǎn)為頻域能量分布圖,實(shí)現(xiàn)能量集中,從而去除空間冗余。DCT系數(shù)除了有能量集中的特性外,還可以反映原始圖像的紋理方向信息[3]。
式中:Fu,v代表DCT系數(shù),f(i, j)表示像素值,N表示所做DCT變換塊的大小。
由式(1)~式(3)可得,每個(gè)DCT系數(shù)Fu,v都是塊內(nèi)所有像素值的線性組合。DCT系數(shù)矩陣F0,0左上角的系數(shù)為直流系數(shù),它表示塊的平均亮度。其余的系數(shù)都稱為交流系數(shù),每個(gè)交流系數(shù)的值以一定的強(qiáng)度反映了一定方向上灰度值的變化。以8×8DCT系數(shù)的F1,0為例:
因?yàn)閏os(π-θ)=cosθ,故:
F1,0的值取決于輸入塊的上下部分之間的垂直方向上的強(qiáng)度差。對(duì)于每個(gè)塊中的DCT系數(shù)來(lái)說(shuō),不同位置的系數(shù)反映了原始圖像中不同的方向信息,如果圖像塊在水平、垂直、對(duì)角方向具有明顯的邊緣特征,那么其變換后的DCT系數(shù)將相應(yīng)地在水平、垂直、對(duì)角方向上的值較大。
基于以上推導(dǎo),第1行DCT系數(shù)絕對(duì)值的大小代表了圖像垂直的紋理的強(qiáng)度,第1列的DCT系數(shù)代表了圖像水平紋理特性的強(qiáng)度。
有研究使用Energyv、Energyh分別表示原始待預(yù)測(cè)塊具有垂直或水平紋理特征的可能性。從而推導(dǎo)出圖像紋理方向?yàn)椋?/p>
式中:變量θ表示圖像紋理方向與水平軸正向間角度值。
由以上理論基礎(chǔ)可知,DCT系數(shù)矩陣水平絕對(duì)值和與垂直絕對(duì)值和的反正切可以得到圖像的基本紋理角度。本文算法的基本思想是,根據(jù)預(yù)測(cè)塊DCT系數(shù)計(jì)算得到當(dāng)前預(yù)測(cè)塊的紋理角度,從而在AVS3現(xiàn)有幀內(nèi)預(yù)測(cè)角度選擇算法基礎(chǔ)上,減少進(jìn)入粗選遍歷的角度模式數(shù)目,從而在盡可能小的性能損失情況下達(dá)到降低時(shí)間復(fù)雜度的目的。結(jié)合AVS3預(yù)測(cè)塊存在非方形的特點(diǎn),需要利用方形小塊DCT系數(shù)特征組合得到預(yù)測(cè)塊的預(yù)測(cè)角度[4]。故算法需考慮DCT系數(shù)計(jì)算復(fù)雜度、DCT基礎(chǔ)塊大小以及組合方式。
算法需要計(jì)算圖像的DCT系數(shù),需要盡可能地降低因計(jì)算DCT而引入的復(fù)雜度。AVS3塊劃分過(guò)程包含幀內(nèi)預(yù)測(cè),其塊劃分過(guò)程為一個(gè)自上而下的嘗試過(guò)程,若選擇在每次進(jìn)入幀內(nèi)預(yù)測(cè)前針對(duì)當(dāng)前預(yù)測(cè)塊進(jìn)行DCT計(jì)算,則會(huì)引入大量重復(fù)計(jì)算[5]。如圖3所示,對(duì)于一個(gè)8×4大小的塊,當(dāng)嘗試不劃分即預(yù)測(cè)塊大小也為8×4時(shí),需要將其劃分為a、b兩塊分別進(jìn)行DCT計(jì)算,再進(jìn)行組合得到當(dāng)前8×4大小塊的預(yù)測(cè)角度。當(dāng)下一次嘗試劃分時(shí),a將作為一個(gè)獨(dú)立的4×4塊進(jìn)入角度預(yù)測(cè)流程,將再次被計(jì)算一次DCT,b塊同理。相反,如果可以自下而上,先算出小塊的結(jié)果并保留,當(dāng)遇到大塊時(shí),讀取大塊范圍內(nèi)的小塊結(jié)果,則會(huì)減少許多重復(fù)計(jì)算。
圖3 8×4塊劃分過(guò)程
定義a、b為基礎(chǔ)塊,將一幀圖像以基塊劃分計(jì)算所有基塊的DCT系數(shù),并依據(jù)式(8)計(jì)算每個(gè)基塊的紋理角度保存于數(shù)組Angle[]中。
實(shí)驗(yàn)證明,式(8)只適用于簡(jiǎn)單、單一紋理。當(dāng)圖像內(nèi)紋理為一條或多條為同一個(gè)方向時(shí),根據(jù)式(8)所得到的值能夠準(zhǔn)確反映圖像塊的紋理方向。當(dāng)圖像紋理方向比較復(fù)雜,塊內(nèi)紋理方向有多個(gè)角度時(shí),計(jì)算所得的角度并不能夠準(zhǔn)確地反映紋理 方向。
現(xiàn)實(shí)生活中,視頻圖像的紋理復(fù)雜度也并非簡(jiǎn)單的一個(gè)方向,但是當(dāng)圖像塊盡可能小時(shí),小塊內(nèi)的紋理復(fù)雜度較低的概率會(huì)增大,故本算法選用AVS3幀內(nèi)預(yù)測(cè)所支持的最小塊4×4塊為基礎(chǔ)塊做DCT變換,并以此組合得到大塊的角度,提升預(yù)測(cè)的準(zhǔn)確度。
同時(shí),AVS3支持的最小預(yù)測(cè)塊為4×4且所有預(yù)測(cè)塊寬高都是4的倍數(shù),若使用非4×4塊為基礎(chǔ)塊,則會(huì)出現(xiàn)不可組合或不可使用的情況。
綜上以上分析,本文算法選擇使用4×4大小為基塊進(jìn)行DCT計(jì)算。
當(dāng)前預(yù)測(cè)塊大小為4×4時(shí),可直接根據(jù)其DCT系數(shù)得到一個(gè)角度;當(dāng)預(yù)測(cè)塊大小大于4×4時(shí),使用加權(quán)平均的組合方式得到其預(yù)測(cè)角度。由式(8)計(jì)算出的角度在0到90之間,將此區(qū)間等分為6等份,統(tǒng)計(jì)落入每個(gè)區(qū)間的個(gè)數(shù)記錄為Interval[i],并由以下算法計(jì)算得到其紋理角度值:
angle_mid[i]=7.5*(2*i+1)
num_sum=cu_width/4*cu_height/4;
for(int i=0;i<6;i++){
s=interval[i]/num_sum*angle_mid[i];
angle+=s;}
其中,angle_mid[i]表示每個(gè)區(qū)間的中間值,num_sum表示當(dāng)前預(yù)測(cè)塊內(nèi)4×4塊個(gè)數(shù),angle即為當(dāng)前預(yù)測(cè)塊的紋理角度。
AVS3預(yù)測(cè)模式角度非0~180°內(nèi)分布,基于上述得到的預(yù)測(cè)塊的紋理角度與AVS3的幀內(nèi)預(yù)測(cè)RMD中模式的映射關(guān)系如表2所示。
表2 紋理角度與預(yù)測(cè)模式映射關(guān)系
上述算法原理的實(shí)現(xiàn)步驟如下:
(1)對(duì)當(dāng)前幀以4×4為基本單位做DCT變換,根據(jù)式(8)計(jì)算其紋理角度,保存于數(shù)組angle[];
(2)對(duì)當(dāng)前預(yù)測(cè)塊讀取其范圍內(nèi)基塊角度,按照算法計(jì)算得到其加權(quán)平均角度angle;
(3)根據(jù)angle大小依據(jù)表2初始化其RMD過(guò)程中的rmd_search_step[];
(4)遍歷rmd_search_step[],選擇出最優(yōu)的5個(gè)角度;
(5)對(duì)這5個(gè)角度計(jì)算左右相鄰的2倍角,更新得到3個(gè)最優(yōu)角度,對(duì)3個(gè)角度計(jì)算左和右的1倍角,更新得到最終進(jìn)入RDO的角度。
在AVS3參考軟件HPM6.0基礎(chǔ)上加入本算法進(jìn)行測(cè)試,并與HPM6.0標(biāo)注算法(開(kāi)啟內(nèi)置的快速選擇算法)進(jìn)行比較,實(shí)驗(yàn)條件如表3所示。分析性能損失采用BD-rate來(lái)評(píng)價(jià)編碼質(zhì)量好壞。BDrate由編碼比特率和Y、U、V分量的峰值信噪比(Peak Signal to Noise Ratio,PSNR)決定。若BDrate的數(shù)值為正值,說(shuō)明編碼比特率有上升或者PSNR下降,編碼性能相比參考軟件下降;反之,則說(shuō)明編碼性能有提升。編碼時(shí)間ΔT同理。實(shí)驗(yàn)結(jié)果如表4、表5所示。
表3 測(cè)試條件
表4 本文算法與標(biāo)準(zhǔn)算法實(shí)驗(yàn)對(duì)比結(jié)果
表5 本文算法與標(biāo)準(zhǔn)算法實(shí)驗(yàn)對(duì)比平均結(jié)果
從表5、表6可以看出,本文提出的基于圖像頻域紋理特征的幀內(nèi)預(yù)測(cè)模式快速選擇算法可顯著降低幀內(nèi)編碼時(shí)間,且編碼性能只有極小的損失。針對(duì)不同分辨率,平均編碼時(shí)間都有超過(guò)30%的下降,分辨率越高,時(shí)間復(fù)雜度降的越多。特別地,對(duì)于紋理較為豐富清晰的序列,本算法的性能損失會(huì)更少,如720 P的City、1 080 P的MarketPlace及 2 160 P的ParkRunning3。因?yàn)樵撍惴ú捎?×4基塊進(jìn)行組合得到預(yù)測(cè)塊的紋理角度,所以紋理越復(fù)雜,其被最終被劃分為小塊的可行性越高,小塊組合預(yù)測(cè)也就越準(zhǔn)確。同時(shí),分辨率越高,其紋理方向越分明,預(yù)測(cè)也就越準(zhǔn)確。
本文針對(duì)AVS3幀內(nèi)預(yù)測(cè)模式細(xì)分帶來(lái)的編碼復(fù)雜度增加問(wèn)題,利用頻域DCT系數(shù)提取出圖像的紋理角度信息,縮小幀內(nèi)角度預(yù)測(cè)RMD過(guò)程中遍歷的角度模式范圍,達(dá)到降低編碼時(shí)間復(fù)雜度的目的。實(shí)驗(yàn)結(jié)果表明,本文算法在參考軟件 HPM6.0開(kāi)啟快速選擇算法的基礎(chǔ)上,能降低編碼時(shí)間平均約39%,而Y分量的編碼性能只損失平均約1.09%,U、V性能損失更小。且高分辨率性能損失更小,編碼時(shí)間復(fù)雜度降得更低,這有助于AVS3的實(shí)時(shí)編碼及在高清超高清領(lǐng)域的應(yīng)用。