李維,任鵬,趙凡,陳亞軍
(1.西安理工大學(xué)印刷包裝與數(shù)字媒體學(xué)院,710048,西安;2.西安電子科技大學(xué)通信工程學(xué)院,710071,西安)
多媒體技術(shù)和各種智能終端產(chǎn)品促使高清/超高清視頻應(yīng)用向高分辨率、高幀率、高像素位深快速發(fā)展。新一代視頻編碼標(biāo)準(zhǔn)(HEVC)[1]由于采用了各種先進(jìn)的編碼工具,如基于大塊的四叉樹(shù)分割結(jié)構(gòu)[2]、先進(jìn)的運(yùn)動(dòng)矢量預(yù)測(cè)技術(shù)、35種幀內(nèi)預(yù)測(cè)技術(shù)、內(nèi)部位深擴(kuò)展技術(shù)、像素自適應(yīng)補(bǔ)償技術(shù)等,其編碼性能有了大幅度提高。憑借高的壓縮率和好的視頻質(zhì)量,HEVC逐步走入人們的視野[3]。實(shí)際中由于視頻內(nèi)容不斷發(fā)生變化,經(jīng)編碼器后得到的碼率會(huì)有較大波動(dòng),極易造成上溢或下溢現(xiàn)象,因此HEVC的碼率控制[4]尤為重要,直接影響著視頻編碼標(biāo)準(zhǔn)的實(shí)用性。編碼器需要碼率控制模塊調(diào)整輸出的碼流大小,以滿足給定的存儲(chǔ)或傳輸帶寬。
碼率控制問(wèn)題實(shí)質(zhì)是一種有約束條件的率失真優(yōu)化問(wèn)題,通過(guò)調(diào)整量化參數(shù)來(lái)保證編碼碼率與給定的目標(biāo)碼率相匹配。為了在碼率和失真之間找到一個(gè)最優(yōu)的折中點(diǎn),率失真模型的建立是至關(guān)重要的。司俊俊等從理論上分析了編碼幀預(yù)測(cè)殘差信號(hào)的分布特性、量化參數(shù)以及拉格朗日因子之間的關(guān)系,提出根據(jù)拉普拉斯分布特性動(dòng)態(tài)調(diào)整量化參數(shù)獲得有效的碼率控制[5]。Choi等假設(shè)信源服從拉普拉斯分布,利用泰勒展開(kāi)式建立了R-Q模型[6],但基于該模型的碼率控制算法在HEVC中的控制精度不高,特別是運(yùn)動(dòng)場(chǎng)景下,模型的性能下降很快。考慮到預(yù)測(cè)殘差經(jīng)過(guò)變換和量化后的系數(shù)中零系數(shù)比例ρ對(duì)編碼碼率有著重要的影響,特別是在碼率比較低的情況下,這種影響更加顯著。Liang等提出用R與ρ之間的關(guān)系代替R與Q之間的關(guān)系,從而建立一種基于R-ρ模型的碼率控制算法[7],該算法利用絕對(duì)差均值來(lái)估計(jì)編碼單元的復(fù)雜度,經(jīng)碼率控制后輸出的編碼碼率上下波動(dòng)較大。隨后,Li等提出碼率和失真之間存在雙曲線函數(shù)關(guān)系,推導(dǎo)出一種基于碼率-拉格朗日因子(R-λ)模型的碼率控制算法[8],并且該算法被國(guó)際標(biāo)準(zhǔn)組織所采納并且加入到HEVC校驗(yàn)?zāi)P汀?/p>
上述方法均是在假設(shè)各個(gè)視頻區(qū)域相互獨(dú)立的情況下,利用率失真優(yōu)化方法指導(dǎo)碼率控制,但對(duì)于超高清視頻以及HEVC編碼器,這種假設(shè)條件下的碼率控制在一定程度上影響了編碼性能。由于幀內(nèi)幀間預(yù)測(cè)技術(shù)的使用,致使區(qū)域之間的碼率和失真具有一定的關(guān)聯(lián)性[9]。Li等研究了時(shí)域編碼塊之間的失真特性,建立了失真模型并提出了相應(yīng)的幀間碼率控制算法[10],Liu等在碼率控制算法中考慮了幀間編碼中的失真漂移特性,以進(jìn)一步提高編碼效率[11],但是都只考慮了幀間編碼的率失真特性,忽略了幀內(nèi)編碼碼率控制中率失真關(guān)聯(lián)特性。Zhou等分析了視頻內(nèi)容的復(fù)雜度,提出了一種新的幀內(nèi)碼率控制算法[12],但該算法也未考慮幀內(nèi)預(yù)測(cè)技術(shù)對(duì)碼率與失真的影響?;趲瑑?nèi)預(yù)測(cè)理論,本文分析了鄰近編碼區(qū)域之間的關(guān)聯(lián)性,并結(jié)合失真漂移現(xiàn)象,提出一種高效視頻編碼(HEVC)幀內(nèi)碼率控制改進(jìn)算法。實(shí)驗(yàn)結(jié)果表明,本文提出的算法可以有效地提高碼率控制的性能,與原始算法相比,在同等碼率的條件下,重構(gòu)視頻質(zhì)量可平均提高0.1 dB。
碼率控制模塊由碼率分配和量化參數(shù)確定兩部分組成[13]。首先,根據(jù)目標(biāo)碼率為圖像(GOP)、幀、編碼樹(shù)單元(CTU)分別確定最優(yōu)的目標(biāo)碼率;然后,根據(jù)R-λ模型計(jì)算相應(yīng)的量化參數(shù)[14]。幀內(nèi)碼率控制算法如下。
(1)GOP層碼率分配。根據(jù)目標(biāo)碼率R、幀率F、GOP的大小SG、已編碼的幀數(shù)Nc和編碼輸出的碼率Rc,計(jì)算GOP的目標(biāo)碼率為
RG=SG(R(Nc-w)-RcF)/(wF)
(1)
式中:參數(shù)w為滑動(dòng)窗口的大小,用于保證視頻質(zhì)量的平滑性。
(2)幀層碼率分配。根據(jù)每一幀在GOP中所占的權(quán)重值進(jìn)行幀層碼率分配,由于幀內(nèi)編碼時(shí)每一個(gè)GOP只包含一幀,因此該幀的目標(biāo)碼率RF可估計(jì)為
RF=RG
(2)
(3)CTU層碼率分配。第i個(gè)CTU的目標(biāo)碼率Bi取決于幀層的目標(biāo)碼率和當(dāng)前CTU的空域復(fù)雜度,其計(jì)算公式為
(3)
(4)
式中:參數(shù)Rr表示當(dāng)前幀剩余的目標(biāo)比特?cái)?shù);A表示已編碼的CTU實(shí)際輸出的編碼比特?cái)?shù)。
(4)量化參數(shù)的確定。為了準(zhǔn)確地獲取量化參數(shù),提出一種R-λ模型,通過(guò)拉格朗日因子λ值來(lái)計(jì)算量化參數(shù),R-λ模型表示為
(5)
式中:NP表示CTU中所含的像素?cái)?shù);τ、β和χ為模型參數(shù)。量化參數(shù)Qi可表示為
Qi=4.200 5ln(λi)+13.712 2
(6)
在碼率控制模塊的指導(dǎo)下,視頻編碼器得以有效地運(yùn)行,在保證一定視頻質(zhì)量的同時(shí),輸出的編碼碼率也滿足給定的目標(biāo)碼率。
幀內(nèi)預(yù)測(cè)將在空域上相鄰的已重構(gòu)的邊界像素作為參考信息進(jìn)行預(yù)測(cè),能夠有效地減少空域冗余,提高視頻編碼的效率。HEVC視頻編碼標(biāo)準(zhǔn)定義了35種幀內(nèi)預(yù)測(cè)模式,包括33種角度模式、DC模式和Planar模式[15],如圖1所示。
圖1 幀內(nèi)預(yù)測(cè)模式
由于當(dāng)前像素與周圍像素之間具有強(qiáng)的相關(guān)性,幀內(nèi)預(yù)測(cè)編碼利用最近的像素作為參考,估計(jì)當(dāng)前像素值,但這種方式會(huì)引起潛在的編碼失真漂移現(xiàn)象[16]。參考像素是原始像素經(jīng)編碼后的重構(gòu)像素,其存在一定的失真,并且會(huì)隨著幀內(nèi)預(yù)測(cè)擴(kuò)散到后續(xù)的像素,從而形成失真帶。圖2給出了參考像素失真?zhèn)鞑サ氖疽鈭D,原始圖像進(jìn)行編碼時(shí),利用重構(gòu)圖像中的參考像素進(jìn)行幀內(nèi)預(yù)測(cè),造成失真沿著預(yù)測(cè)方向傳播,形成失真塊。
圖2 幀內(nèi)失真漂移示意圖
d=p(i,j)-p′(i,j)
(7)
式(7)可以重寫(xiě)為
d=[p(i,j)-pp(i,j)]+[pp(i,j)-p′(i,j)]
(8)
d=do+dp
(9)
通常,這種幀內(nèi)預(yù)測(cè)關(guān)系可以被描述為一維高斯馬爾科夫模型[17]
(10)
式中:θ和η為模型參數(shù)。后半部分失真dp可以表示為
dp=pp(i,j)-p′(i,j)=
(11)
則當(dāng)前待編碼CTU的總失真
D=Do+θDr
(12)
式中:Do和Dr分別表示當(dāng)前待編碼CTU的前半部分總失真和后半部分總失真。
基于2.1節(jié)的分析,可以看出CTU的編碼失真與其參考失真之間存在一種線性關(guān)系。這種關(guān)系是在失真測(cè)度為絕對(duì)誤差和(SAD)條件下得到的。
碼率控制屬于率失真優(yōu)化問(wèn)題,通過(guò)拉格朗日優(yōu)化方法可描述為[18]
(13)
式中:
J和λSAD分別表示率失真代價(jià)和失真測(cè)度為
SAD下的拉格朗日因子;符號(hào)D(i)和R(i)分別表示第i個(gè)CTU經(jīng)編碼后產(chǎn)生的總失真和總碼率。對(duì)于第i個(gè)CTU,它的編碼失真會(huì)傳播到右邊第i+1個(gè)CTU和相鄰下邊第j個(gè)CTU中,因此根據(jù)式(12),可得
?J/?R(i)=?D(i)/?R(i)+?D(i+1)/?R(i)+
?D(j)/?R(i)+λSAD=?D(i)/?R(i)+
?(Do(i+1)+θ(i+1)D(i))/?R(i)+
?(Do(j)+θ(j)D(i))/?R(i)+λSAD=
[1+θ(i+1)+θ(j)]?D(i)/?R(i)+λSAD=
αi?D(i)/?R(i)+λSAD
(14)
所以,式(13)被更新為
(15)
(16)
結(jié)合式(5),可得到改進(jìn)的R-λ模型
(17)
式中:參數(shù)αi可利用前一個(gè)已編碼塊按照式(14)估算得到。圖3給出了改進(jìn)R-λ模型的獲取流程。將改進(jìn)R-λ模型加入到幀內(nèi)碼率控制算法中,可以更準(zhǔn)確地計(jì)算量化參數(shù),保證編碼碼率與目標(biāo)碼率的一致性。
圖3 改進(jìn)R-λ模型的獲取流程圖
為了驗(yàn)證幀內(nèi)碼率控制改進(jìn)算法的有效性,利用HEVC編碼器的參考軟件HM16.0,對(duì)各種標(biāo)準(zhǔn)序列進(jìn)行相關(guān)指標(biāo)測(cè)試。
標(biāo)準(zhǔn)序列使用JCTVC組
織提供的Class B、Class C、Class D、Class E這4類序列,其涵蓋了不同分辨率、不同紋理的視頻。本實(shí)驗(yàn)分別在幀內(nèi)編碼配置Intra_only Main(IM)、Intra_only Main10(IM10)和幀內(nèi)幀間編碼配置RA Main(RM)和RA Main10(RM10)環(huán)境[20]下進(jìn)行測(cè)試。編碼幀數(shù)設(shè)置為300,硬件采用Window7平臺(tái),處理器為Intel Core i5-4590。本文從編碼效率和編碼復(fù)雜度兩方面評(píng)價(jià)改進(jìn)模型的總體性能。
首先本文從編碼效率上來(lái)驗(yàn)證所提算法的性能,評(píng)價(jià)的指標(biāo)是ΔRbit和ΔPSNR[21]。ΔRbit反映編碼輸出碼率的變化情況,值為負(fù),表示編碼比特率Rbit減小;ΔPSNR反映視頻質(zhì)量的變化情況,值為正,表示峰值信噪比PSNR增大。
在幀內(nèi)編碼IM和IM10配置下采用本文改進(jìn)算法和原有算法的性能進(jìn)行對(duì)比,結(jié)果如表1所示。由表1可以看出:在IM配置下本文算法的比特率平均降低了1.4%,峰值信噪比平均提高了0.11 dB;在IM10配置下本文算法的比特率平均降低了1.7%,峰值信噪比平均提高了0.13 dB。由于本文算法是在幀內(nèi)預(yù)測(cè)編碼原理的基礎(chǔ)上結(jié)合率失真優(yōu)化推導(dǎo)出的改進(jìn)算法,因此編碼效率得到了提升。為了證明本文算法對(duì)幀內(nèi)幀間聯(lián)合編碼配置也有貢獻(xiàn),分別在RM和RM10配置下對(duì)本文改進(jìn)算法和原有算法的性能進(jìn)行對(duì)比,結(jié)果見(jiàn)表1。從表1可以看出:在RM配置下本文算法的比特率平均降低了0.5%,峰值信噪比平均提高了0.05 dB;在RM10配置下本文算法的比特率平均降低了0.6%,峰值信噪比平均提高了0.08 dB,說(shuō)明在幀內(nèi)幀間聯(lián)合編碼的情況下,本文算法的編碼效率也有一定提升;因?yàn)閹瑑?nèi)幀間聯(lián)合編碼下的幀內(nèi)塊數(shù)量較少,所以編碼效率提升的幅度沒(méi)有幀內(nèi)編碼下編碼效率提升的高。
表1 本文算法與原有算法性能對(duì)比
注:ΔRbit為本文算法編碼率與原有算法編碼率之間的差值;ΔPSNR為本文算法峰值信噪比與原有算法峰值信噪比之間的差值;ΔT為本文算法編碼時(shí)間與原有算法編碼時(shí)間的差值。
圖4給出了Kimono序列和BQSquare序列的率失真性能曲線,其中Kimono序列的分辨率為1 920×1 080像素,BQSquare序列的分辨率為416×240像素。由圖4可以看出,本文所提算法的率失真性能位于原有算法的率失真性能之上,反映了在給定碼率下,本文改進(jìn)算法具有更高的峰值信噪比值。表2給出了IM10配置下本文改進(jìn)算法與文獻(xiàn)[12]算法的性能對(duì)比結(jié)果。由表2可以看出,由于本文所提算法考慮了幀內(nèi)失真漂移現(xiàn)象,因而在幀內(nèi)碼率控制方面優(yōu)于文獻(xiàn)[12]算法。
(a)IM配置下Kimono序列
(b)IM10配置下Kimono序列
(c)IM配置下BQSquare序列
(d)IM10配置下BQSquare序列圖4 不同配置不同視頻序列的率失真曲線
序列ΔRbit/%ΔPSNR/dBBqsquare_416×240-1.10.08RaceHorses_832×480-1.00.10Vidyo1_1280×720-1.10.09BasketballDrive_1920×1080-1.40.12均值-1.150.10
本文使用編碼時(shí)間差ΔT作為編碼復(fù)雜度的評(píng)價(jià)指標(biāo),ΔT定義為
ΔT=(Tm-To)/To
(18)
式中:Tm表示本文改進(jìn)算法被應(yīng)用到碼率控制中后所耗的編碼時(shí)間;To表示原有算法被應(yīng)用到碼率控制中后所耗的編碼時(shí)間。從表1可以看出,無(wú)論是全幀內(nèi)編碼還是幀內(nèi)幀間編碼,與原有算法相比,本文所提算法的編碼時(shí)間增幅非常小,編碼復(fù)雜度幾乎沒(méi)有大的影響。綜上,本文改進(jìn)算法在提高編碼效率的同時(shí),并未帶來(lái)高的編碼負(fù)擔(dān)。
碼率控制模塊在視頻編碼中起著重要的作用,其率失真模型的好壞直接影響著最終的編碼性能。本文針對(duì)HEVC的率失真模型,提出一種改進(jìn)的幀內(nèi)碼率控制算法。通過(guò)分析幀內(nèi)預(yù)測(cè)編碼技術(shù),找出度量失真漂移的方法,結(jié)合率失真優(yōu)化原理,建立了考慮幀內(nèi)塊關(guān)聯(lián)特性的改進(jìn)R-λ模型。實(shí)驗(yàn)結(jié)果表明,本文所提的改進(jìn)算法具有較高的幀內(nèi)編碼性能,在相同碼率下重構(gòu)視頻質(zhì)量可平均提高0.1 dB。