余東航,李強,聶駿
(重慶郵電大學 通信與信息工程學院,重慶 400065)
多功能視頻編碼(Versatile Video Coding,VVC)是由ISO/IEC 的MPEG和ITU-T 的VCEG 聯合制定,于2020年7 月正式發布的新一代視頻編碼標準。與以前標準相比,VVC 具有更高的壓縮性能和通用性,可應用于高清和超高清視頻、360°全向視頻、高動態視頻范圍和廣色域、沉浸式媒體等多種應用場景。
VVC 碼率控制算法仍沿用了高效視頻編碼(High Efficiency Video Coding,HEVC)中的R-λ 模型[1]。基于 該模型的碼率控制算法具有控制效果好、比特波動小的優點,但對局部紋理復雜邊緣輪廓顯著的視頻,最大編碼單元(Largest Coding Unit,LCU)層的比特分配并不準確,導致峰值信噪比有所損失。針對該模型碼率控制算法的不足,文獻[2]和[3]以LCU 層的梯度值衡量編碼區域的復雜度,用于指導R-λ 模型中LCU 的比特分配,提升了R-λ 模型的性能;文獻[4]對LCU 層編碼模型參數做偏差修正處理,重新計算更新待編碼LCU 的權重分配,提升了LCU 層的比特精確度;文獻[5]根據視頻幀間相關性,參考前一幀R-λ 模型更新后計算得到的比特數預測待編碼幀的復雜度,提高了視頻編碼質量;文獻[6]將I 幀消耗大量比特的影響分攤到整個序列,從而改進了前幾個圖像組(Group of Pictures,GOP)比特分配量,并在GOP 編碼過程中根據實際消耗的比特不斷更新幀層的λ 參數,提高了后續幀的比特分配精確度。
基于R-λ 模型的VVC 碼率控制算法在模型參數更新過程中雖然考慮了編碼實際結果的失真值,并以R-λ模型為推導基準修正參數更新公式,提高了參數更新的準確性,但在視頻編碼過程中,VVC 碼率控制算法未充分考慮編碼幀的內容特性,如編碼幀的紋理復雜度、空域相關性等,因此其編碼率失真性能和視覺體驗還有待提高。為了實現更準確的碼率控制,提高視頻質量,本文提出了一種基于視頻內容相關特征值的碼率控制算法,通過引入灰度共生矩陣,得到能有效反映編碼幀紋理特征的相關值,對GOP 中同一層級圖像的權重重新調整,并對R-λ 模型中的λ 值進行重新求解,提升LCU 層比特權重分配的精度,從而提升視頻編碼質量。
雙曲率函數型率失真函數廣泛應用在碼率控制模型中[7],其計算公式如式(1)所示。

其中,D 代表編碼的實際失真,采用均方誤差來表示;R為編碼比特,用每像素比特表示;C和K 是與序列內容特性相關的模型參數值[8]。拉格朗日乘子λ 由R-D 曲線的斜率表示,其計算公式如式(2)所示,式中的α和β是與序列內容特性相關的兩個參數[9]。

幀層的目標比特是在編碼前根據R-λ 模型按每幀圖像的權重進行分配的。在GOP 中,屬于同一層級的圖像具有相等的權重。當前幀的比特分配計算公式如下:

其中,Tpic為當前幀的目標比特;TGOP和CodedGOP分別為當前GOP 目標比特和已編碼幀的實際消耗比特;ωPi和ωcurpic分別表示第i 幀的權重與當前幀的權重。
LCU 層的目標比特是在編碼前根據R-λ 模型對所有LCU 按權重進行分配的。對于所有的LCU,其拉格朗日乘子為當前幀計算得到的估計值λestimate,因此每個LCU權重和表示如下[10]:

其中,ΩPIC表示當前幀所有LCU 權重和;Nlcu為當前幀所含的LCU 數量;表示第i 個LCU 權重大小。

對于GOP 中的幀層目標比特分配,若能考慮每幀的實際紋理復雜度,對紋理復雜度較高的幀分配較多的目標比特數,就能提高視頻編碼的主觀質量。灰度共生矩陣[11](Gray-Level Co-occurrence Matrix,GLCM)能反映出圖像灰度的方向、相鄰間隔和變化幅度等信息。如果通過像素灰度在空間位置上反復出現的關系和頻率生成編碼幀的灰度共生矩陣,進而可得到反映編碼幀紋理復雜度的相關特征值,如能量、熵、對比度、逆差分矩、最大相關系數等,再綜合考慮這些相關特征值對編碼幀進行紋理復雜度分級,即能實現有效的碼率控制目的。
本文以編碼幀原始灰度圖的反差、熵、能量和逆差矩作為描述圖像紋理復雜度的相關特征值。在得到編碼幀的灰度共生矩陣后,通過式(6)~式(9)計算出原始灰度圖的反差σi、熵ζi、能量τi及逆差矩υi。

其中,x、y 分別表示GLCM 對應的橫縱坐標,P(x,y)是GLCM 中位于坐標(x、y)位置處的值。
在GOP 中,同一層級[12]的幀由于權重計算公式中的參數相同,目標比特分配沒有考慮當前幀的實際紋理特性及復雜度,在比特分配上存在不合理的情況[13]。為了更準確地對每一幀進行合理的比特分配,以當前幀經歸一化處理后的反差、熵、能量及逆差矩作為描述圖像紋理復雜度的指標,對同一層級每幀的目標比特進行重新分配。
首先通過式(10)和式(11)對同一GOP 中不同層級的目標比特分級求和。


圖1 GOP 幀的層次分布圖
然后,根據當前幀灰度共生矩陣求出的特征值σi、ζi、τi和υi,對GOP 層所有幀按同一層級進行比特重分配。


在對LCU 進行編碼前,碼率控制算法會對當前幀的每個LCU 進行權重分配,以R-λ 模型為基礎,LCU 的權重和比特分配方法如下[14]:

式中,ΩBi和TBi分別表示第i 個LCU 的權重大小和目標比特;RP表示當前幀的目標比特;BitHeader為該幀的頭信息比特值;Nlcu為該幀LCU 的總數;和均與視頻內容特性有關,為R-λ 模型中的參數值;λest為當前幀模型參數所求得的預估值。
由于所求得的λest是根據編碼幀模型參數更新后的預估值,用于實際LCU 的權重和目標比特求解存在一定的誤差,為了以更加準確的λ 值來進行LCU 層的權重估計,需根據編碼幀實際的目標比特與模型參數值和對λest的值進行重新求解,得到最佳的模型參數值λnew,從而達到LCU 層更加準確的權重分配。將LCU 層優化后的拉格朗日乘子λnew代入式(16)可得到當前幀的目標比特RP。

其中,i和N 分別表示第i 個LCU和當前幀所含總LCU的數量;由第i個LCU 的模型參數求得,其值與視頻內容的特性相關。
由于上式除λnew以外其余參數都是已知的,因此根據等式求出最佳拉格朗日乘子λnew后,通過如下公式對LCU 重新進行權重分配:

式中,ΩnewBi和TnewBi分別表示代入最佳拉格朗日乘子λnew后第i 個LCU 的權重和目標比特;Nlcu表示當前幀LCU的總個數。
根據此λ 更新思路,在后續的編碼過程中,根據編碼幀的目標比特和已編碼LCU 的實際消耗值計算得到當前編碼幀的剩余目標比特Rleft,對待編碼LCU 的權重和目標比特不斷進行更新。

式中,Rleft表示當前編碼幀剩余的目標比特;RcodedLCU表示實際已編碼LCU 所消耗的比特數;λupdated表示編碼過程中待求解的最佳拉格朗日乘子,仍可由式(17)和式(18)對編碼幀中待編碼LCU 重新進行權重分配和目標比特分配。

式中,ΩupdatedBi和TupdatedBi分別表示編碼過程中更新拉格朗日乘子λupdated后重新計算得到的第i 個LCU 的權重和目標比特。編碼過程中通過不斷地更新λ 值,對待編碼LCU進行權重和目標比特的重新計算,從而達到更加準確的比特分配目的。
本文所提算法分為幀層和LCU 層比特控制策略以及模型參數更新,整體算法流程描述如下:
(1)碼率控制參數初始化。
(2)視頻序列I 幀的幀內編碼。
(3)根據2.1 節得到GOP 各幀的GLCM,由GLCM 得到各幀經過歸一化處理后的權重值。
(4)根據步驟(3)所得到的權重值,對同層級各幀進行權重和目標比特重分配。
(5)求得LCU 層最優拉格朗日乘子λnew。在編碼過程中,根據式(19)~式(21)對待編碼的LCU 權重和目標比特不斷進行更新。
(6)判斷已編碼的GOP 是否為最后一個GOP,若是則跳轉至步驟(7);若不是則跳轉至步驟(3)。
(7)視頻序列編碼完成。
在上述視頻編碼過程中,為降低生成GLCM 的時間復雜度,本文對其進行了灰度級壓縮,將256×256 的矩陣壓縮至64×64,減少了計算復雜度。
為驗證所提算法的有效性,本文算法在VTM10.0 上進行了實現。以未開啟碼率控制為對比基準,測試平臺的碼率控制算法采用自適應比特分配的方式。選取官方所提供的B 類測試序列MarketPlace、RitualDance、Cactus和BQTerrace,C 類測試序列BasketballDrill、BQMall、Race-Horses和PartyScene,D 類測試序列BQSquare、Blowing-Bubbles、RaceHorses和RaceHorses,以及E 類測試序列FourPeople、Johnny和KristenAndSara。每個測試序列分別在QP為22、27、32和37 情況下進行編解碼,編碼幀數為該序列所有幀數。本文所用電腦配置為Inter?CoreTMi7-9700@3.00 GHz 處理器、16 GB 內存和64 位操作系統。
率失真性能是評判碼率控制效果的重要指標,BDBR(Bj?ntegaard Delta Bit Rate)[15]表示在相同客觀質量下,測試算法相對基準算法碼率節省百分比。在相同的比較條件下,BDBR 值越小,表示算法的率失真性能越好。本文分別計算出VTM10.0 自適應碼率控制情況下的BDBR和本文算法下的BDBR 值,相減得到的比較值用于評價RD 性能的提升量。
從表1 可以看出,相比于自適應碼率控制算法,本文算法的BDBR 值平均改善了0.86%,有效提升了率失真性能。對于PartyScene 序列,相對自適應碼率控制算法,本文算法的RD 性能降低了0.05%,這是因為該序列鏡頭進行了拉伸,導致GOP 層同層級幀間相關性下降。對于其他序列,本文算法的率失真性能都優于自適應碼率控制下的性能指標。E 類序列的RD 性能提升最為明顯,平均BDBR 值改善了2.71%,這是因為對于背景相對固定的場景且圖像多為局部變化的視頻序列,GOP 層同層級的比特重分配策略會更加準確,從而改善編碼幀的質量,提高率失真性能。

表1 LDP 配置下BDBR-Y 實驗結果(%)
本文采用碼率控制精度Δerror 的對比來評估本文算法的性能。Δerror 越小,表示編碼器的實際輸出碼率越接近目標碼率,控制精度越高。Δerror 的計算公式如下,Rtar和Ract分別表示目標碼率與實際碼率。

表2 是VTM10.0 自帶的自適應比特分配算法和本文算法在LDP 配置下碼率控制精度的對比數據。Δerror值為測試序列在4 個不同QP 值下所得的平均誤差值。VTM10.0 算法表示平臺在自適應設置情況下的碼率相對誤差結果。由數據分析可知,本文算法總平均碼率的相對誤差值Δerror為0.434%,碼率控制精度優于自適應設置下的0.435%。對于E 類中的FourPeople和Johnny序列,本文算法碼率在精度控制上并沒有自適應碼率控制得好,這是由于這兩個序列鏡頭比較平穩且僅有局部內容輕微變化,因此導致本文所提算法在GOP 層中同級圖像權重分配計算差別不大。對于B、C、D 類序列,本文算法的碼率控制精度均有提升,說明無論對于B、C類高分辨率序列或是D 類低分辨率序列,本文算法碼率控制精度都有所改善。

表2 LDP 配置下的碼率控制精度比較(%)
圖2(a)和圖2(b)為VVC 官方提供的測試序列Jonny在LDP 配置和QP 值為37 情況下,采用自適應碼率控制和本文算法所得到的第62 幀解碼后的對比圖,測試時的目標碼率為75.002 4 kb/s。從圖像可以觀察到,通過本文算法所得到的人臉特征相比于自適應碼率控制算法要更清晰,對右側衣服進行局部放大之后,采用本文算法解碼出來圖像仍可觀察到衣服上的條紋,本文算法重構出的視頻主觀質量要優于自適應碼率控制算法。

圖2 VVC 官方提供的測試序列Johnny(1280×720)在QP=37 下的主觀質量對比
為了提高VVC 碼率控制算法的編碼性能,本文提出了一種基于視頻內容相關特征值的碼率控制算法。首先通過生成編碼幀的灰度共生矩陣,得到能有效反映編碼幀紋理復雜度的相關特征值,用這些相關特征值調整GOP 中同一層圖像的目標比特分配;然后基于R-λ 模型,對LCU 層的λ 參數進行重新計算,提高LCU 層比特分配的精度。通過在VTM10.0 測試平臺上進行實現和性能測試,實驗結果表明,本文算法提升了率失真性能和控制精度,視頻編碼質量有明顯改善。下一步將根據LCU 的紋理復雜度,并結合模型參數估計進行最優比特分配,進一步提升視頻編碼的比特分配精度,適應更加復雜的應用場景。