王艷營
(黑龍江科技學院 電氣與信息工程學院,黑龍江 哈爾濱 150027)
隨著計算機網絡和數字視頻通信技術的不斷發展,面向網絡的視頻編碼技術成為了研究熱點,SVC(可伸縮視頻編碼)作為H.264/AVC視頻編碼標準的可伸縮擴展[1],成為研究這一問題的有利工具。
SVC可以實現視頻流空間、時間和信噪比的完全伸縮,但是信道誤碼在時域和空域會有擴散,導致傳輸過程中宏塊數據丟失,出現丟包現象,嚴重影響重建視頻的質量[2]。在丟包信道中,誤差擴散對重建視頻質量的影響最為嚴重,為此,在分析空域和時域可伸縮視頻流率失真的基礎上,針對時域的誤差擴散失真進行了改進,改進后的算法具有較好的靈活性和魯棒性。
H.264/SVC使用了位平面編碼技術和分層編碼技術來支持時間、空間和SNR的可伸縮性,空間可伸縮是利用分層來實現的,采用多層的編碼結構,在每一分層中,幀間預測和幀內預測單獨編碼,并可以跨空間層進行,即預測參考值可以是低空間層,也就是層間預測,具體包括層間幀內預測、層間運動預測和層間殘差預測[3]。
時間可伸縮利用分級的B幀結構來實現,以三級時間分解為例,其編碼結構如圖1所示。

{T0,T1,T2}是三級的時間級,T0是時間級的基本層,由幀內預測的 I幀或幀間前向預測的 P幀構成,T1、T2是時間級的增強層,由雙向預測的B幀構成。GOP是圖像組,它由兩個連續T0層之間的所有增強層圖像幀加上后一個T0圖像幀組成。以圖1中的第1個GOP為例,首先編碼時間級T0的第 5幀(關鍵幀),然后編碼時間級 T1的第3幀,最后編碼時間級T2的第2幀和第4幀。
在H.264/SVC的每一個空間分層中,SNR可伸縮分為CGS和FGS。CGS通過反復減小量化步長來形成CGS的碼流,但它的質量分級和抗誤碼率不高。FGS通過位平面編碼方法來實現,將視頻碼流壓縮成基本層碼流和嵌入式增強層碼流,適應網絡帶寬波動變化的情況[4]。
空間域分層編碼包含空間基本層編碼和空間增強層編碼增強層。編碼不僅使用了空間基本層編碼時的幀內預測、單向幀間預測和雙向幀間預測,還使用了層間預測模式。
H.264/SVC的率失真最優宏塊編碼模式為:

其中:o為可選擇的宏塊編碼選項,λ是拉格朗日參數;J(n,m,o)表示在模式o下第n幀的第m個宏塊編碼時的率失真;D(n,m,o)表示在模式(1)下,重建視頻的端到端失真,若不考慮信道傳輸的影響,它等于信源編碼的量化失真;R(n,m,o)表示在模式o下的視頻流碼率。
在丟包信道下,當宏塊丟失時,第n幀的第m個宏塊的編碼選項o的重建視頻的端到端的率失真為:

其中:pl是丟包率,Ds(n,m,o)是信源編碼的量化失真,Dep_ref(n,m,o)是誤差擴散失真,Dec(n,m)是空間差錯隱藏失真,它的值與宏塊的編碼模式無關。
誤差擴散Dep_ref(n,m,o)的計算方法為:

根據編碼幀的不同,Dep(n,m,k,o)的計算方法也不同。若編碼幀為I幀和P幀,誤差擴散失真為:

其中:Dep_ref(n,m,k,o*)表示預測參考值的擴散誤差失真,Dec(n,m,k,o*)表示丟包后的差錯隱藏失真。對于I幀的第1幀的第1個塊來說,Dep_ref(1,1,k,o*)=0,則:

若編碼幀為B幀,誤差擴散失真為:

其中:Dep_ref_r0(n,k,m,o*)和 Dep_ref_r1(n,k,m,o*)是雙向預測的兩個參考幀,wr0和wr1是計算預測參考值的加權系數。
空間差錯隱藏失真Dec(n,m,k,o*)的計算方法為:

其中:Dec_rec(n,m,k,o*)是當前像素值與重構像素值的誤差失真,Dec_ep(n,m,k)是當前像素值的累積誤差擴散失真[5]。
對于拉格朗日參數λ的計算方法為:

其中:λef為無損傳輸中的拉格朗日參數值。
在時域分層編碼中,高時間級的圖像以低時間級的圖像作為預測參考幀,如果低時間級的圖像存在誤差就會傳到高時間級的圖像中,由此可見,誤差擴散失真對編碼圖像的影響與時間級位置有關,時間級越低,誤差擴散的影響越大,因此,時域分層編碼的率失真表示為:

其中:α(t)是時間級 t的函數,pl是丟包率,Ds(n,m,o)是信源編碼的量化失真,Dep_ref(n,m,o)是誤差擴散失真,Dec(n,m)是時間差錯隱藏失真。
本文主要針對時域分層編碼率失真中的碼率分配和時間級函數的設定來進行改進。
在碼率分配方面,采用非均勻分配的方法,即對低時間級的圖像幀多分配一些碼率,對高時間級的圖像幀少分配一些碼率。
時間級函數是影響誤差擴散失真的因子,因此,時間級函數的取值分配很重要。以GOP=8的等級B圖像誤差擴散影響為例來說明時間函數的設定,誤差擴散區域如圖2所示。

圖2中的圖像組的大小為8,時間級為3,因為log28=3,所以若圖像組的大小為 N,則時間級 T=log2N。圖2中時間級3包含4個圖像,時間級2包含2個圖像,時間級1包含1個圖像,由此看出,時間級包含的圖像數與時間級是以2為底數的指數關系,所以若時間級為 t,則圖像數 n=2t-1。
從圖2中看出,時間級越高包含的圖像數越多,但是誤差擴散的影響越小,這樣,時間級與圖像數的冪指數關系,時間級t的時間級函數為:

式中:pi(i)(i=1,2,3,…,t)為各時域分層圖像的丟包率,C1為尺度因子。
從圖2中看出,當時間級t=T時,誤差擴散影響最小,不會繼續傳播,所以率失真中不存在誤差擴散,時間級函數為:

從圖2中看出,當時間級t=0時,誤差擴散影響最大,影響了整個圖像組,所以率失真中誤差擴散最大,時間級函數為:

由以上對時間級函數的確定,率失真函數分別為:

為了驗證該改進算法,采用了參考軟件 JSVM[6],對QCIF格式的Foreman視頻序列進行測試,其中圖像組的大小為8,第 1幀為I幀,空間基本層的幀率為 15 f/s,空間增強層的幀率為 30 f/s,丟包率為 3%、5%和 10%,量化參數分別為 20、24、28、32、36和 40。 分別對不使用率失真優化(NO-RDO)、傳統的IP丟包率的率失真優化(TP-RDO)和改進的算法(IP-RDO)進行了測試驗證,測試所得數據如表1、表2和表3所示。
從表中看出,丟包率為 3%時,與 NO-RDO相比,TPRDO的碼率平均增加了333.76%,IP-RDO的碼率平均增加了8.04%;丟包率為5%時,與NO-RDO相比,TPRDO的碼率平均增加了41.29%,IP-RDO的碼率平均增加了10.01%;丟包率為 10%時,與NO-RDO相比,TPRDO的碼率平均增加了50.65%,IP-RDO的碼率平均增加了11.25%。由此看出,與NO-RDO相比,TP-RDO的碼率增加得快,而IP-RDO的碼率增加得不是很快。

表1丟包率為3%的比特率和PSNR值

表2丟包率為5%的比特率和PSNR值

表3丟包率為10%的比特率和PSNR值
為了更好地說明測試結果,對 NO-RDO、TP-RDO和IP-RDO的RD曲線進行了仿真,仿真圖如圖3所示。
從圖3可以看出,在丟包率為3%時,TP-RDO的率失真性能比NO-RDO差,而丟包率為5%和10%時,TPRDO的率失真性能比NO-RDO好。由此說明,TP-RDO在低丟包率時率失真性能下降,而IP-RDO在丟包率為3%、5%和10%時,率失真性能均比NO-RDO和 TPRDO的好。

該改進算法充分考慮了碼率的分配和時間級函數對時域分層編碼中誤差擴散的影響,改進后的算法有效地抑制了誤差擴散的影響,提高了視頻流的魯棒性,特別適用于IP網絡的視頻流傳輸。
[1]SHCHWARZ H,MARPE D,WIEGAND T.Overview of the scalable video coding extension of the H.274/AVC standard[J].IEEE Trans On Circuits System Video Technology,2007,17(9):1103-1120.
[2]唐浩漾,史浩山,趙洪鋼.基于可伸縮視頻編碼的率失真優化編碼算法[J].計算機應用研究,2009,26(9):3584-3586.
[3]鄧兵.可伸縮性視頻編碼中的碼率控制算法研究[D].杭州:浙江大學,2010.
[4]程宏,楊先一.一種基于漏預測技術的FGS視頻編碼框架[J].計算機應用研究,2009,26(7):2484-2486.
[5]郭宜.可伸縮視頻編碼的差錯控制方法研究[D].合肥:中國科學技術大學,2009.
[6]REICHEL J,SCHWARD H,WIENT M.JVT-T202 joint scalable video model JSVM-7[S].2006.