余東航,李強(qiáng),聶駿
(重慶郵電大學(xué) 通信與信息工程學(xué)院,重慶 400065)
多功能視頻編碼(Versatile Video Coding,VVC)是由ISO/IEC 的MPEG和ITU-T 的VCEG 聯(lián)合制定,于2020年7 月正式發(fā)布的新一代視頻編碼標(biāo)準(zhǔn)。與以前標(biāo)準(zhǔn)相比,VVC 具有更高的壓縮性能和通用性,可應(yīng)用于高清和超高清視頻、360°全向視頻、高動(dòng)態(tài)視頻范圍和廣色域、沉浸式媒體等多種應(yīng)用場景。
VVC 碼率控制算法仍沿用了高效視頻編碼(High Efficiency Video Coding,HEVC)中的R-λ 模型[1]?;?該模型的碼率控制算法具有控制效果好、比特波動(dòng)小的優(yōu)點(diǎn),但對局部紋理復(fù)雜邊緣輪廓顯著的視頻,最大編碼單元(Largest Coding Unit,LCU)層的比特分配并不準(zhǔn)確,導(dǎo)致峰值信噪比有所損失。針對該模型碼率控制算法的不足,文獻(xiàn)[2]和[3]以LCU 層的梯度值衡量編碼區(qū)域的復(fù)雜度,用于指導(dǎo)R-λ 模型中LCU 的比特分配,提升了R-λ 模型的性能;文獻(xiàn)[4]對LCU 層編碼模型參數(shù)做偏差修正處理,重新計(jì)算更新待編碼LCU 的權(quán)重分配,提升了LCU 層的比特精確度;文獻(xiàn)[5]根據(jù)視頻幀間相關(guān)性,參考前一幀R-λ 模型更新后計(jì)算得到的比特?cái)?shù)預(yù)測待編碼幀的復(fù)雜度,提高了視頻編碼質(zhì)量;文獻(xiàn)[6]將I 幀消耗大量比特的影響分?jǐn)偟秸麄€(gè)序列,從而改進(jìn)了前幾個(gè)圖像組(Group of Pictures,GOP)比特分配量,并在GOP 編碼過程中根據(jù)實(shí)際消耗的比特不斷更新幀層的λ 參數(shù),提高了后續(xù)幀的比特分配精確度。
基于R-λ 模型的VVC 碼率控制算法在模型參數(shù)更新過程中雖然考慮了編碼實(shí)際結(jié)果的失真值,并以R-λ模型為推導(dǎo)基準(zhǔn)修正參數(shù)更新公式,提高了參數(shù)更新的準(zhǔn)確性,但在視頻編碼過程中,VVC 碼率控制算法未充分考慮編碼幀的內(nèi)容特性,如編碼幀的紋理復(fù)雜度、空域相關(guān)性等,因此其編碼率失真性能和視覺體驗(yàn)還有待提高。為了實(shí)現(xiàn)更準(zhǔn)確的碼率控制,提高視頻質(zhì)量,本文提出了一種基于視頻內(nèi)容相關(guān)特征值的碼率控制算法,通過引入灰度共生矩陣,得到能有效反映編碼幀紋理特征的相關(guān)值,對GOP 中同一層級圖像的權(quán)重重新調(diào)整,并對R-λ 模型中的λ 值進(jìn)行重新求解,提升LCU 層比特權(quán)重分配的精度,從而提升視頻編碼質(zhì)量。
雙曲率函數(shù)型率失真函數(shù)廣泛應(yīng)用在碼率控制模型中[7],其計(jì)算公式如式(1)所示。
其中,D 代表編碼的實(shí)際失真,采用均方誤差來表示;R為編碼比特,用每像素比特表示;C和K 是與序列內(nèi)容特性相關(guān)的模型參數(shù)值[8]。拉格朗日乘子λ 由R-D 曲線的斜率表示,其計(jì)算公式如式(2)所示,式中的α和β是與序列內(nèi)容特性相關(guān)的兩個(gè)參數(shù)[9]。
幀層的目標(biāo)比特是在編碼前根據(jù)R-λ 模型按每幀圖像的權(quán)重進(jìn)行分配的。在GOP 中,屬于同一層級的圖像具有相等的權(quán)重。當(dāng)前幀的比特分配計(jì)算公式如下:
其中,Tpic為當(dāng)前幀的目標(biāo)比特;TGOP和CodedGOP分別為當(dāng)前GOP 目標(biāo)比特和已編碼幀的實(shí)際消耗比特;ωPi和ωcurpic分別表示第i 幀的權(quán)重與當(dāng)前幀的權(quán)重。
LCU 層的目標(biāo)比特是在編碼前根據(jù)R-λ 模型對所有LCU 按權(quán)重進(jìn)行分配的。對于所有的LCU,其拉格朗日乘子為當(dāng)前幀計(jì)算得到的估計(jì)值λestimate,因此每個(gè)LCU權(quán)重和表示如下[10]:
其中,ΩPIC表示當(dāng)前幀所有LCU 權(quán)重和;Nlcu為當(dāng)前幀所含的LCU 數(shù)量;表示第i 個(gè)LCU 權(quán)重大小。
對于GOP 中的幀層目標(biāo)比特分配,若能考慮每幀的實(shí)際紋理復(fù)雜度,對紋理復(fù)雜度較高的幀分配較多的目標(biāo)比特?cái)?shù),就能提高視頻編碼的主觀質(zhì)量?;叶裙采仃嘯11](Gray-Level Co-occurrence Matrix,GLCM)能反映出圖像灰度的方向、相鄰間隔和變化幅度等信息。如果通過像素灰度在空間位置上反復(fù)出現(xiàn)的關(guān)系和頻率生成編碼幀的灰度共生矩陣,進(jìn)而可得到反映編碼幀紋理復(fù)雜度的相關(guān)特征值,如能量、熵、對比度、逆差分矩、最大相關(guān)系數(shù)等,再綜合考慮這些相關(guān)特征值對編碼幀進(jìn)行紋理復(fù)雜度分級,即能實(shí)現(xiàn)有效的碼率控制目的。
本文以編碼幀原始灰度圖的反差、熵、能量和逆差矩作為描述圖像紋理復(fù)雜度的相關(guān)特征值。在得到編碼幀的灰度共生矩陣后,通過式(6)~式(9)計(jì)算出原始灰度圖的反差σi、熵ζi、能量τi及逆差矩υi。
其中,x、y 分別表示GLCM 對應(yīng)的橫縱坐標(biāo),P(x,y)是GLCM 中位于坐標(biāo)(x、y)位置處的值。
在GOP 中,同一層級[12]的幀由于權(quán)重計(jì)算公式中的參數(shù)相同,目標(biāo)比特分配沒有考慮當(dāng)前幀的實(shí)際紋理特性及復(fù)雜度,在比特分配上存在不合理的情況[13]。為了更準(zhǔn)確地對每一幀進(jìn)行合理的比特分配,以當(dāng)前幀經(jīng)歸一化處理后的反差、熵、能量及逆差矩作為描述圖像紋理復(fù)雜度的指標(biāo),對同一層級每幀的目標(biāo)比特進(jìn)行重新分配。
首先通過式(10)和式(11)對同一GOP 中不同層級的目標(biāo)比特分級求和。
圖1 GOP 幀的層次分布圖
然后,根據(jù)當(dāng)前幀灰度共生矩陣求出的特征值σi、ζi、τi和υi,對GOP 層所有幀按同一層級進(jìn)行比特重分配。
在對LCU 進(jìn)行編碼前,碼率控制算法會(huì)對當(dāng)前幀的每個(gè)LCU 進(jìn)行權(quán)重分配,以R-λ 模型為基礎(chǔ),LCU 的權(quán)重和比特分配方法如下[14]:
式中,ΩBi和TBi分別表示第i 個(gè)LCU 的權(quán)重大小和目標(biāo)比特;RP表示當(dāng)前幀的目標(biāo)比特;BitHeader為該幀的頭信息比特值;Nlcu為該幀LCU 的總數(shù);和均與視頻內(nèi)容特性有關(guān),為R-λ 模型中的參數(shù)值;λest為當(dāng)前幀模型參數(shù)所求得的預(yù)估值。
由于所求得的λest是根據(jù)編碼幀模型參數(shù)更新后的預(yù)估值,用于實(shí)際LCU 的權(quán)重和目標(biāo)比特求解存在一定的誤差,為了以更加準(zhǔn)確的λ 值來進(jìn)行LCU 層的權(quán)重估計(jì),需根據(jù)編碼幀實(shí)際的目標(biāo)比特與模型參數(shù)值和對λest的值進(jìn)行重新求解,得到最佳的模型參數(shù)值λnew,從而達(dá)到LCU 層更加準(zhǔn)確的權(quán)重分配。將LCU 層優(yōu)化后的拉格朗日乘子λnew代入式(16)可得到當(dāng)前幀的目標(biāo)比特RP。
其中,i和N 分別表示第i 個(gè)LCU和當(dāng)前幀所含總LCU的數(shù)量;由第i個(gè)LCU 的模型參數(shù)求得,其值與視頻內(nèi)容的特性相關(guān)。
由于上式除λnew以外其余參數(shù)都是已知的,因此根據(jù)等式求出最佳拉格朗日乘子λnew后,通過如下公式對LCU 重新進(jìn)行權(quán)重分配:
式中,ΩnewBi和TnewBi分別表示代入最佳拉格朗日乘子λnew后第i 個(gè)LCU 的權(quán)重和目標(biāo)比特;Nlcu表示當(dāng)前幀LCU的總個(gè)數(shù)。
根據(jù)此λ 更新思路,在后續(xù)的編碼過程中,根據(jù)編碼幀的目標(biāo)比特和已編碼LCU 的實(shí)際消耗值計(jì)算得到當(dāng)前編碼幀的剩余目標(biāo)比特Rleft,對待編碼LCU 的權(quán)重和目標(biāo)比特不斷進(jìn)行更新。
式中,Rleft表示當(dāng)前編碼幀剩余的目標(biāo)比特;RcodedLCU表示實(shí)際已編碼LCU 所消耗的比特?cái)?shù);λupdated表示編碼過程中待求解的最佳拉格朗日乘子,仍可由式(17)和式(18)對編碼幀中待編碼LCU 重新進(jìn)行權(quán)重分配和目標(biāo)比特分配。
式中,ΩupdatedBi和TupdatedBi分別表示編碼過程中更新拉格朗日乘子λupdated后重新計(jì)算得到的第i 個(gè)LCU 的權(quán)重和目標(biāo)比特。編碼過程中通過不斷地更新λ 值,對待編碼LCU進(jìn)行權(quán)重和目標(biāo)比特的重新計(jì)算,從而達(dá)到更加準(zhǔn)確的比特分配目的。
本文所提算法分為幀層和LCU 層比特控制策略以及模型參數(shù)更新,整體算法流程描述如下:
(1)碼率控制參數(shù)初始化。
(2)視頻序列I 幀的幀內(nèi)編碼。
(3)根據(jù)2.1 節(jié)得到GOP 各幀的GLCM,由GLCM 得到各幀經(jīng)過歸一化處理后的權(quán)重值。
(4)根據(jù)步驟(3)所得到的權(quán)重值,對同層級各幀進(jìn)行權(quán)重和目標(biāo)比特重分配。
(5)求得LCU 層最優(yōu)拉格朗日乘子λnew。在編碼過程中,根據(jù)式(19)~式(21)對待編碼的LCU 權(quán)重和目標(biāo)比特不斷進(jìn)行更新。
(6)判斷已編碼的GOP 是否為最后一個(gè)GOP,若是則跳轉(zhuǎn)至步驟(7);若不是則跳轉(zhuǎn)至步驟(3)。
(7)視頻序列編碼完成。
在上述視頻編碼過程中,為降低生成GLCM 的時(shí)間復(fù)雜度,本文對其進(jìn)行了灰度級壓縮,將256×256 的矩陣壓縮至64×64,減少了計(jì)算復(fù)雜度。
為驗(yàn)證所提算法的有效性,本文算法在VTM10.0 上進(jìn)行了實(shí)現(xiàn)。以未開啟碼率控制為對比基準(zhǔn),測試平臺(tái)的碼率控制算法采用自適應(yīng)比特分配的方式。選取官方所提供的B 類測試序列MarketPlace、RitualDance、Cactus和BQTerrace,C 類測試序列BasketballDrill、BQMall、Race-Horses和PartyScene,D 類測試序列BQSquare、Blowing-Bubbles、RaceHorses和RaceHorses,以及E 類測試序列FourPeople、Johnny和KristenAndSara。每個(gè)測試序列分別在QP為22、27、32和37 情況下進(jìn)行編解碼,編碼幀數(shù)為該序列所有幀數(shù)。本文所用電腦配置為Inter?CoreTMi7-9700@3.00 GHz 處理器、16 GB 內(nèi)存和64 位操作系統(tǒng)。
率失真性能是評判碼率控制效果的重要指標(biāo),BDBR(Bj?ntegaard Delta Bit Rate)[15]表示在相同客觀質(zhì)量下,測試算法相對基準(zhǔn)算法碼率節(jié)省百分比。在相同的比較條件下,BDBR 值越小,表示算法的率失真性能越好。本文分別計(jì)算出VTM10.0 自適應(yīng)碼率控制情況下的BDBR和本文算法下的BDBR 值,相減得到的比較值用于評價(jià)RD 性能的提升量。
從表1 可以看出,相比于自適應(yīng)碼率控制算法,本文算法的BDBR 值平均改善了0.86%,有效提升了率失真性能。對于PartyScene 序列,相對自適應(yīng)碼率控制算法,本文算法的RD 性能降低了0.05%,這是因?yàn)樵撔蛄戌R頭進(jìn)行了拉伸,導(dǎo)致GOP 層同層級幀間相關(guān)性下降。對于其他序列,本文算法的率失真性能都優(yōu)于自適應(yīng)碼率控制下的性能指標(biāo)。E 類序列的RD 性能提升最為明顯,平均BDBR 值改善了2.71%,這是因?yàn)閷τ诒尘跋鄬潭ǖ膱鼍扒覉D像多為局部變化的視頻序列,GOP 層同層級的比特重分配策略會(huì)更加準(zhǔn)確,從而改善編碼幀的質(zhì)量,提高率失真性能。
表1 LDP 配置下BDBR-Y 實(shí)驗(yàn)結(jié)果(%)
本文采用碼率控制精度Δerror 的對比來評估本文算法的性能。Δerror 越小,表示編碼器的實(shí)際輸出碼率越接近目標(biāo)碼率,控制精度越高。Δerror 的計(jì)算公式如下,Rtar和Ract分別表示目標(biāo)碼率與實(shí)際碼率。
表2 是VTM10.0 自帶的自適應(yīng)比特分配算法和本文算法在LDP 配置下碼率控制精度的對比數(shù)據(jù)。Δerror值為測試序列在4 個(gè)不同QP 值下所得的平均誤差值。VTM10.0 算法表示平臺(tái)在自適應(yīng)設(shè)置情況下的碼率相對誤差結(jié)果。由數(shù)據(jù)分析可知,本文算法總平均碼率的相對誤差值Δerror為0.434%,碼率控制精度優(yōu)于自適應(yīng)設(shè)置下的0.435%。對于E 類中的FourPeople和Johnny序列,本文算法碼率在精度控制上并沒有自適應(yīng)碼率控制得好,這是由于這兩個(gè)序列鏡頭比較平穩(wěn)且僅有局部內(nèi)容輕微變化,因此導(dǎo)致本文所提算法在GOP 層中同級圖像權(quán)重分配計(jì)算差別不大。對于B、C、D 類序列,本文算法的碼率控制精度均有提升,說明無論對于B、C類高分辨率序列或是D 類低分辨率序列,本文算法碼率控制精度都有所改善。
表2 LDP 配置下的碼率控制精度比較(%)
圖2(a)和圖2(b)為VVC 官方提供的測試序列Jonny在LDP 配置和QP 值為37 情況下,采用自適應(yīng)碼率控制和本文算法所得到的第62 幀解碼后的對比圖,測試時(shí)的目標(biāo)碼率為75.002 4 kb/s。從圖像可以觀察到,通過本文算法所得到的人臉特征相比于自適應(yīng)碼率控制算法要更清晰,對右側(cè)衣服進(jìn)行局部放大之后,采用本文算法解碼出來圖像仍可觀察到衣服上的條紋,本文算法重構(gòu)出的視頻主觀質(zhì)量要優(yōu)于自適應(yīng)碼率控制算法。
圖2 VVC 官方提供的測試序列Johnny(1280×720)在QP=37 下的主觀質(zhì)量對比
為了提高VVC 碼率控制算法的編碼性能,本文提出了一種基于視頻內(nèi)容相關(guān)特征值的碼率控制算法。首先通過生成編碼幀的灰度共生矩陣,得到能有效反映編碼幀紋理復(fù)雜度的相關(guān)特征值,用這些相關(guān)特征值調(diào)整GOP 中同一層圖像的目標(biāo)比特分配;然后基于R-λ 模型,對LCU 層的λ 參數(shù)進(jìn)行重新計(jì)算,提高LCU 層比特分配的精度。通過在VTM10.0 測試平臺(tái)上進(jìn)行實(shí)現(xiàn)和性能測試,實(shí)驗(yàn)結(jié)果表明,本文算法提升了率失真性能和控制精度,視頻編碼質(zhì)量有明顯改善。下一步將根據(jù)LCU 的紋理復(fù)雜度,并結(jié)合模型參數(shù)估計(jì)進(jìn)行最優(yōu)比特分配,進(jìn)一步提升視頻編碼的比特分配精度,適應(yīng)更加復(fù)雜的應(yīng)用場景。