亢潤龍
(洛陽職業(yè)技術(shù)學(xué)院 信息工程學(xué)院,河南 洛陽 471000)
隨著移動互聯(lián)網(wǎng)和芯片技術(shù)的蓬勃發(fā)展,各式各樣的高清、超高清視頻應(yīng)用不斷涌現(xiàn)。視頻應(yīng)用的多樣化和高清化趨勢對視頻壓縮性能提出了更高的要求。為了應(yīng)對視頻傳輸和存儲帶來的更大挑戰(zhàn),由運動圖像專家組(Moving Pictures Experts Group,MPEG)和視頻編碼專家組(Video Coding Experts Group,VCEG)聯(lián)合成立的視頻編碼聯(lián)合協(xié)作團隊(Joint Collaborative Team on Video Coding,JCTVC)制定并頒布了最新一代視頻編碼國際標(biāo)準(zhǔn)——H.265/HEVC。高效率視頻編碼(High Efficiency Video Coding,HEVC)是面向更高清晰度、更高幀率、更高壓縮率的視頻壓縮標(biāo)準(zhǔn),相對于上一代視頻編碼國際標(biāo)準(zhǔn)H.264/AVC,在保證相同視頻質(zhì)量的前提下,其壓縮效率提升50%[1]。
碼率控制(Rate Control,RC)是編碼器的重要組成部分。它的作用是在有限的傳輸帶寬和時延限制的情況下,盡可能傳輸更好質(zhì)量的視頻,提高帶寬利用率。碼率控制不是視頻編碼標(biāo)準(zhǔn)規(guī)定的標(biāo)準(zhǔn)內(nèi)容,相對于標(biāo)準(zhǔn)技術(shù)有著更大的靈活性。碼率控制模塊通常分為碼率分配和碼率控制兩部分。其中,碼率分配又分為圖片組(Group Of Picture,GOP)級、幀級、最大編碼單元(Largest Coding Unit,LCU)級比特分配,如圖1 所示,其每一次分配的準(zhǔn)確程度直接影響著后續(xù)編碼的性能。本文重點研究的是LCU 級碼率分配算法。
圖1 碼率控制流程圖
LCU 級碼率分配算法一直都是碼率控制的熱點研究方向。LCU 級碼率控制可以有效提升碼率精度,更加細顆粒度地調(diào)整局部圖像質(zhì)量,對于編碼效率提升起著至關(guān)重要的作用。利用圖像復(fù)雜度進行目標(biāo)比特分配的研究有很多,如文獻[2]在考慮平均絕對差(Mean Absolute Differences,MAD)計算復(fù)雜度的基礎(chǔ)上,增加幀與幀之間的時域相關(guān)性來指導(dǎo)比特分配。文獻[3]提出一種基于結(jié)構(gòu)相似性(Structural Similarity,SSIM)的LCU 級碼率控制算法,但沒有考慮時域相關(guān)性的特征。文獻[4]提出基于梯度算子的時空復(fù)雜度,用于指導(dǎo)每個LCU的比特分配。圖像越復(fù)雜,分配的比特數(shù)越多。但是,MAD、絕對誤差和(Sum of Absolute Transformed Difference,SATD)、梯度算子等方法存在一定缺陷,不能有效地表征圖像復(fù)雜度。
基于此,本文提出一種新的基于時空域復(fù)雜度特征的LCU 級碼率分配方法。針對視頻原始圖像和預(yù)測圖像,計算SSIM、運動向量(Motion Vector,MV)、失真度D。其中,SSIM 用于衡量視頻序列中每幀各LCU 的空域復(fù)雜度,失真度D 用于衡量視頻中每幀各LCU 的時域復(fù)雜度。通過大量實驗發(fā)現(xiàn),實際編碼比特數(shù)與SSIM、實際編碼比特數(shù)與失真度D 都存在近似線性關(guān)系。因此,借助SPSS 工具進行數(shù)學(xué)建模,擬合出LCU 級目標(biāo)比特分配的權(quán)重系數(shù)ω 與SSIM、失真度D 的二元線性回歸方程式。在上述算法的基礎(chǔ)上,增加比特分配的調(diào)節(jié)機制。已編碼幀的MV 信息可以很好地描述圖像的運動劇烈程度。比如,靜止區(qū)域,紋理復(fù)雜度低的LCU 應(yīng)該減少比特分配;劇烈運動區(qū)域,紋理復(fù)雜度高的LCU 應(yīng)該增加比特分配?;诖?,本文利用MV 信息對LCU 級目標(biāo)比特數(shù)做進一步調(diào)整和限制。在有限的傳輸帶寬下,本文所提算法能夠有效提高圖像編碼效率。
碼率控制的目標(biāo)是在碼率失真最小的情況下,選擇一組最佳的編碼參數(shù),使得編碼消耗更接近給定的目標(biāo)碼率。碼率分配的目的是為每個編碼單元分配最優(yōu)的目標(biāo)比特數(shù),使得視頻編碼后總的失真最小,即利用率失真優(yōu)化技術(shù)為每個編碼單元分配目標(biāo)比特數(shù)[5],此過程可以描述為
式中:n為該GOP 包含的幀數(shù),Di為第i幅圖像的失真,Ri為第i幅圖像的編碼比特數(shù),Rc為總編碼比特數(shù)的限制。
當(dāng)每個編碼單元的目標(biāo)比特數(shù)確定后,根據(jù)目標(biāo)比特數(shù)獨立確定其量化參數(shù)(Quantization Parameter,QP),從而使實際編碼比特數(shù)盡可能等于預(yù)先分配的目標(biāo)比特數(shù),編碼失真最小。
HEVC 算法的碼率控制分為兩步:
(1)由碼率分配算法確定目標(biāo)碼率R;
(2)由R-λ 模型根據(jù)目標(biāo)碼率R確定λ,由λ-Q 模型根據(jù)λ確定QP。使用QP 和λ完成編碼后,更新模型參數(shù)α與β,如圖2 所示。
圖2 碼率分配流程圖
碼率分配過程分為GOP 級、幀級和LCU 級,如下所示。
(1)GOP 級。根據(jù)總碼率、幀率、GOP 長度及已編碼幀的比特消耗,預(yù)分配GOP 級的比特。GOP級比特分配的計算公式為
式中:RPicAvg是每幀的理論目標(biāo)比特數(shù);Ncoded是視頻序列已經(jīng)編碼的總幀數(shù);Rcoded是已編碼幀的實際編碼比特數(shù);SW是平滑比特分配的滑動窗口,用于使比特消耗和編碼圖像的質(zhì)量更加平緩,通常設(shè)置為40。
(2)幀級。根據(jù)GOP 級剩余比特數(shù),為每幀圖像按權(quán)重分配幀級目標(biāo)比特數(shù)。在幀級碼率分配中,每一幀依照自身權(quán)重與未編碼內(nèi)容的總權(quán)重之比在剩余的比特數(shù)中分配比特。幀級比特分配的計算公式為
式中:權(quán)重參數(shù)ω根據(jù)幀的編碼結(jié)構(gòu)。bpp 查表確定。
(3)LCU 級。根據(jù)幀級剩余比特數(shù),為每個LCU 按權(quán)重分配目標(biāo)比特數(shù)。JCTVC-K0103 提案采用平均絕對誤差(Mean Absolute Difference,MAD)作為一幀中每個編碼單元的權(quán)重。MAD 是由前一幀相同位置的MAD 線性估計而來。LCU 級比特分配的計算公式為
式中:權(quán)重參數(shù)ω是根據(jù)前一已編碼圖像中的同級LCU 的MAD 計算,見式(6)。
目前,HEVC 標(biāo)準(zhǔn)采用R-λ 碼控模型。該模型已被證明要優(yōu)于R-Q、R-ρ 模型,其表達式為
由于率失真優(yōu)化過程所獲得的QP 的編碼復(fù)雜度較高,為了降低編碼復(fù)雜度,李斌等人通過大量實驗證明了lnλ與QP 之間存在線性關(guān)系,計算公式為
量化參數(shù)確定后,即可對當(dāng)前圖像進行編碼。該圖像編碼完成后,得到實際編碼比特bpp。利用bpp更新參數(shù)α和β,以便后續(xù)圖像碼率控制時使用。參數(shù)具體更新方法:
式中:λreal表示編碼中實際的拉格朗日乘子;Rreal表示編碼中實際的編碼比特;δα和δβ是與bpp 相關(guān)的常量,用于調(diào)節(jié)公式的收斂速度。
為了提升LCU 級碼率分配算法的編碼效率,考慮加入更準(zhǔn)確的圖像特征算子,以指導(dǎo)比特分配。有很多學(xué)者在研究圖像復(fù)雜度特征的計算方法,針對灰度、紋理和彩色圖像信息,采用不同的特征組合來量化評價圖像復(fù)雜度[6]。現(xiàn)有的圖像復(fù)雜度評估指標(biāo)能夠很好地衡量視頻特征,但它們不適用于視頻編碼過程。由于均方誤差(Mean Square Error,MSE)、絕對誤差和(Sum of Absolute Difference,SAD)、峰值信噪比(Peak Signal to Noise Ratio,PSNR)等方法已被證明與人眼主觀感知不符,因此本文采用結(jié)構(gòu)相似性評價指標(biāo)結(jié)構(gòu)相似性,以及已編碼圖像的運動信息、失真度來衡量每個LCU 的時空域復(fù)雜度特征。
對于空域復(fù)雜度,將SDCLCU(Spatial Domain Complexity)作為每個LCU 的空域特征評價指標(biāo),其定義為
SDCLCU的值越大,則SSIMLCU越小,表明編碼LCU與預(yù)測LCU 之間存在較大差異,需要分配更多的編碼比特數(shù)。
SSIMLCU從亮度、對比度和結(jié)構(gòu)相似性三個方面來衡量圖像特征[7],特別適合于判斷壓縮后圖像的質(zhì)量,其計算公式為
式中:C1=(K1L)2,C2=(K2L)2,K1、K2均為常數(shù),通常K1=0.01,K2=0.03;L表示灰度范圍,通常L=255。
視頻序列的圖像特征、圖像編碼失真在空域中的分布是不均勻的。因此,本文采用64×64 塊求解SSIMLCU,可以更好地體現(xiàn)局部圖像特征,更準(zhǔn)確地指導(dǎo)LCU 級碼率分配。同時,借鑒FFmpeg 編碼器中overlapped 8×8 block 的計算方式,不僅可以減少塊效應(yīng)的產(chǎn)生,還可以降低計算復(fù)雜度,加快運算速度。
對于時域復(fù)雜度,將TDCLCU(Temporal Domain Complexity)作為每個LCU 的時域特征評價指標(biāo),其定義為
使用經(jīng)過幀間預(yù)測、變換、量化后計算的率失真代價J來評估幀與幀之間的時域相關(guān)性,計算公式為
式中:DMotion、RMotion分別表示采用不同運動模式時的失真和比特數(shù),λMode為拉格朗日因子。最優(yōu)的預(yù)測模式為率失真代價最小的運動模式。
選取最小的率失真代價J,作為當(dāng)前LCU 的時域復(fù)雜度特征。失真度D的計算公式為
為了更好地使不同特征具有可比性,提升數(shù)學(xué)建模的收斂速度和準(zhǔn)確度,將SDCLCU、TDCLCU歸一化到[0,1],歸一化方式為
大量實驗數(shù)據(jù)分析顯示,SDCLCU、TDCLCU與實際編碼比特數(shù)Tactual(經(jīng)過歸一化處理)之間存在近似線性關(guān)系,如圖3、圖4 所示。
圖3 實際編碼比特數(shù)與SSIM 關(guān)系的散點圖
圖4 實際編碼比特數(shù)與失真度D 關(guān)系的散點圖
參考概率統(tǒng)計學(xué)中多元線性回歸模型,如式(18)所示,進行數(shù)學(xué)建模。
針對每個LCU,提出時空域復(fù)雜度特征因子(Spatial-temporal Domain Complexity characteristics Factor,STCC),通過SDCLCU和TDCLCU進行線性回歸來定義,整個幀的STCCF通過對每個LCU 的STCCLCU求和得到
式中:K0、K1、K2是線性回歸方程式的系數(shù)。
將SDCLCU和TDCLCU作為自變量,STCCLCU作為因變量,通過采樣多組數(shù)據(jù),借助SPSS 工具,對數(shù)據(jù)采用線性回歸法進行擬合,擬合精度用相關(guān)系數(shù)的平方R2衡量,R2取值范圍在0~1 之間,R2值越大表示擬合越好。擬合曲線模型如式(19)所示。經(jīng)擬合R2=0.793,其中模型參數(shù)K0、K1、K2分別取值為-0.005、0.047、0.783.
經(jīng)線性回歸SPSS 擬合后,得
之后,根據(jù)計算的STCCLCU作為碼率分配權(quán)重ω,代入LCU 級比特分配公式(5),計算每個LCU 的目標(biāo)比特數(shù)TCurrLCU。
針對MV 信息,經(jīng)過大量實驗測試發(fā)現(xiàn),其與實際編碼比特數(shù)不存在線性關(guān)系。圖像紋理越復(fù)雜的LCU,若MV 越大,就會越容易感知到圖像質(zhì)量降低,因而需要分配更多的比特數(shù)。反之,平坦區(qū)域的LCU,MV 越小,需要分配的比特數(shù)就越少??紤]到MV 信息對比特數(shù)分配起到重要作用,本文結(jié)合時空域復(fù)雜度特征信息,設(shè)計了基于MV 信息的比特分配調(diào)節(jié)機制。
通過幀間預(yù)測獲取每一個LCU 率失真代價最小的MV 信息,然后對Mv取模,即
當(dāng)|Mv|等于0,表示當(dāng)前LCU 處于靜止?fàn)顟B(tài);并且,STCCLCU小于某一閾值T1時,可以在保證不降低圖像質(zhì)量的情況下,減少比特數(shù)分配,限制比特數(shù)范圍在[1,5],將多余的比特數(shù)留到更需要的LCU 上。當(dāng)|Mv|大于某一閾值T2,表示當(dāng)前LCU處于劇烈運動狀態(tài);并且STCCLCU大于某一閾值T3時,可以為圖像分配更多比特數(shù),這樣有利于提升圖像質(zhì)量,限制比特數(shù)范圍在[20,1 000]。經(jīng)過實驗測試,設(shè)置閾值T1=0.004,T2=200,T3=0.007。
最終,計算得到LCU 級目標(biāo)比特數(shù)。之后根據(jù)式(7)、式(8)計算出λ、QP 等模型參數(shù)用于視頻編碼。
本文提出的碼率控制算法流程步驟如下。
(1)根據(jù)式(2)、式(3)獲得GOP 級目標(biāo)比特數(shù)TGOP。
(2)由式(4)計算幀級目標(biāo)比特TCurrPic。
(3)LCU 級的空域復(fù)雜度SDCLCU由式(12)獲得,時域復(fù)雜度TDCLCU由式(14)獲得。
(4)使用步驟(3)計算的SDCLCU和TDCLCU代入式(21),獲得LCU 級的時空域復(fù)雜度特征因子STCCLCU。
(5)由式(5)計算每個LCU 的目標(biāo)比特數(shù)TCurrLCU。
(6)基于MV 信息的比特分配調(diào)節(jié)機制,由式(23)對TCurrLCU進行限制,獲得最終目標(biāo)比特數(shù)的。
(7)分別由式(7)、式(8)得到LCU 級的λCurrLCU、QPCurrLCU用于編碼。
(8)當(dāng)一個LCU 編碼完成后,R-λ 模型參數(shù)根據(jù)式(9)—式(11)更新,然后返回步驟(3),直到編碼完當(dāng)前幀后執(zhí)行下一步。
(9)當(dāng)一幀編碼完成后,返回步驟(2),直到編碼完當(dāng)前GOP 后執(zhí)行下一步。
(10)返回步驟(1),直到整個序列編碼完成。
整個編碼過程如圖5 所示。
圖5 新碼控算法的編碼過程
將本文提出的算法添加到HEVC 的標(biāo)準(zhǔn)測試模型HM12.0 中,以HM12.0 的方法為基準(zhǔn),從碼率控制精度誤差、率失真性能等角度測試本文算法的性能。采用的配置文件為“encoder_lowdelay_P_main.cfg”。測試選用的視頻序列如表1 所示。
表1 測試序列
一般用德爾塔碼率(Bj?ntegaard-Delta Rate,BD-Rate)來衡量碼率控制算法的率失真性能。為了方便計算BD-Rate,對于每個序列,本文只使用4 個目標(biāo)碼率值。具體的目標(biāo)碼率值設(shè)定如表2 所示。
碼率精確性體現(xiàn)了算法對輸出碼率的控制能力。目標(biāo)碼率與實際編碼碼率之間的誤差越小,說明算法的碼率控制能力越好,精確性越高。目標(biāo)碼率與編碼實際輸出碼率之間的誤差定義為Rerror,計算公式為
式中:Rtarget為初始設(shè)置的目標(biāo)碼率,Ractual為編碼后實際的輸出碼率。
測試結(jié)果表3 所示。本文所提算法的實際輸出碼率與目標(biāo)碼率之間的誤差很小,幾乎可以忽略,平均值在0.37%。
表3 實際碼率與目標(biāo)碼率結(jié)果對比
從率失真R-D 曲線圖6 可以看出,在相同編碼條件下,對于選定的視頻序列BasketballPass,本文提出的新算法的性能比HM12.0 方法要好。
圖6 率失真R-D 曲線
率失真性能比較(以BD-Rate 形式)是視頻壓縮中使用的客觀度量指標(biāo),用于在目標(biāo)比特率下比較兩種不同視頻編碼器或同一視頻編解碼器的不同算法的碼率失真性能或壓縮效率,是一種常用的視頻編碼器評價方法。表4、表5 顯示了HM12.0 算法與本文提出的新算法的測試結(jié)果以及率失真性能比較結(jié)果。
表5 HM12.0 算法與本文算法的率失真性能比較
從實驗結(jié)果看,本文提出的碼率控制算法的率失真性能比HM12.0 中碼率控制算法的率失真性能要更好,Y、U、V三分量的性能均有提升,平均值分別為1.25%、1.01%、0.30%。
綜合實驗結(jié)果可以看出,本文提出的算法能夠準(zhǔn)確地控制輸出碼率,雖然相比HM12.0 算法碼率準(zhǔn)確性略有下降,但是可以忽略不計,輸出碼率與目標(biāo)碼率基本一致。由于LCU 級比特分配時考慮了時空域復(fù)雜度特征的影響,提出的算法相比于HM12.0 中的算法,表現(xiàn)出了更好的率失真性能。
本文提出了一種新的LCU 級碼率分配算法,選擇更符合人眼視覺特性的SSIM 圖像評價算法來衡量每個LCU 的空域復(fù)雜度,通過已編碼幀的失真度D 來衡量每個LCU 的時域復(fù)雜度,借助SPSS 工具擬合時空域復(fù)雜度特征與實際編碼比特數(shù)的線性回歸方程式,計算出時空域復(fù)雜度特征因子作為指導(dǎo)編碼幀中每個LCU 分配目標(biāo)碼率的權(quán)重系數(shù)。實驗結(jié)果證明,相比HM12.0 方法,在保證碼率精確性的情況下,本文所提的LCU 級碼率分配算法具有較高的編碼效率。