王艷營
(黑龍江科技學(xué)院 電氣與信息工程學(xué)院,黑龍江 哈爾濱 150027)
隨著計(jì)算機(jī)網(wǎng)絡(luò)和數(shù)字視頻通信技術(shù)的不斷發(fā)展,面向網(wǎng)絡(luò)的視頻編碼技術(shù)成為了研究熱點(diǎn),SVC(可伸縮視頻編碼)作為H.264/AVC視頻編碼標(biāo)準(zhǔn)的可伸縮擴(kuò)展[1],成為研究這一問題的有利工具。
SVC可以實(shí)現(xiàn)視頻流空間、時(shí)間和信噪比的完全伸縮,但是信道誤碼在時(shí)域和空域會(huì)有擴(kuò)散,導(dǎo)致傳輸過程中宏塊數(shù)據(jù)丟失,出現(xiàn)丟包現(xiàn)象,嚴(yán)重影響重建視頻的質(zhì)量[2]。在丟包信道中,誤差擴(kuò)散對(duì)重建視頻質(zhì)量的影響最為嚴(yán)重,為此,在分析空域和時(shí)域可伸縮視頻流率失真的基礎(chǔ)上,針對(duì)時(shí)域的誤差擴(kuò)散失真進(jìn)行了改進(jìn),改進(jìn)后的算法具有較好的靈活性和魯棒性。
H.264/SVC使用了位平面編碼技術(shù)和分層編碼技術(shù)來支持時(shí)間、空間和SNR的可伸縮性,空間可伸縮是利用分層來實(shí)現(xiàn)的,采用多層的編碼結(jié)構(gòu),在每一分層中,幀間預(yù)測(cè)和幀內(nèi)預(yù)測(cè)單獨(dú)編碼,并可以跨空間層進(jìn)行,即預(yù)測(cè)參考值可以是低空間層,也就是層間預(yù)測(cè),具體包括層間幀內(nèi)預(yù)測(cè)、層間運(yùn)動(dòng)預(yù)測(cè)和層間殘差預(yù)測(cè)[3]。
時(shí)間可伸縮利用分級(jí)的B幀結(jié)構(gòu)來實(shí)現(xiàn),以三級(jí)時(shí)間分解為例,其編碼結(jié)構(gòu)如圖1所示。
{T0,T1,T2}是三級(jí)的時(shí)間級(jí),T0是時(shí)間級(jí)的基本層,由幀內(nèi)預(yù)測(cè)的 I幀或幀間前向預(yù)測(cè)的 P幀構(gòu)成,T1、T2是時(shí)間級(jí)的增強(qiáng)層,由雙向預(yù)測(cè)的B幀構(gòu)成。GOP是圖像組,它由兩個(gè)連續(xù)T0層之間的所有增強(qiáng)層圖像幀加上后一個(gè)T0圖像幀組成。以圖1中的第1個(gè)GOP為例,首先編碼時(shí)間級(jí)T0的第 5幀(關(guān)鍵幀),然后編碼時(shí)間級(jí) T1的第3幀,最后編碼時(shí)間級(jí)T2的第2幀和第4幀。
在H.264/SVC的每一個(gè)空間分層中,SNR可伸縮分為CGS和FGS。CGS通過反復(fù)減小量化步長(zhǎng)來形成CGS的碼流,但它的質(zhì)量分級(jí)和抗誤碼率不高。FGS通過位平面編碼方法來實(shí)現(xiàn),將視頻碼流壓縮成基本層碼流和嵌入式增強(qiáng)層碼流,適應(yīng)網(wǎng)絡(luò)帶寬波動(dòng)變化的情況[4]。
空間域分層編碼包含空間基本層編碼和空間增強(qiáng)層編碼增強(qiáng)層。編碼不僅使用了空間基本層編碼時(shí)的幀內(nèi)預(yù)測(cè)、單向幀間預(yù)測(cè)和雙向幀間預(yù)測(cè),還使用了層間預(yù)測(cè)模式。
H.264/SVC的率失真最優(yōu)宏塊編碼模式為:
其中:o為可選擇的宏塊編碼選項(xiàng),λ是拉格朗日參數(shù);J(n,m,o)表示在模式o下第n幀的第m個(gè)宏塊編碼時(shí)的率失真;D(n,m,o)表示在模式(1)下,重建視頻的端到端失真,若不考慮信道傳輸?shù)挠绊懀扔谛旁淳幋a的量化失真;R(n,m,o)表示在模式o下的視頻流碼率。
在丟包信道下,當(dāng)宏塊丟失時(shí),第n幀的第m個(gè)宏塊的編碼選項(xiàng)o的重建視頻的端到端的率失真為:
其中:pl是丟包率,Ds(n,m,o)是信源編碼的量化失真,Dep_ref(n,m,o)是誤差擴(kuò)散失真,Dec(n,m)是空間差錯(cuò)隱藏失真,它的值與宏塊的編碼模式無關(guān)。
誤差擴(kuò)散Dep_ref(n,m,o)的計(jì)算方法為:
根據(jù)編碼幀的不同,Dep(n,m,k,o)的計(jì)算方法也不同。若編碼幀為I幀和P幀,誤差擴(kuò)散失真為:
其中:Dep_ref(n,m,k,o*)表示預(yù)測(cè)參考值的擴(kuò)散誤差失真,Dec(n,m,k,o*)表示丟包后的差錯(cuò)隱藏失真。對(duì)于I幀的第1幀的第1個(gè)塊來說,Dep_ref(1,1,k,o*)=0,則:
若編碼幀為B幀,誤差擴(kuò)散失真為:
其中:Dep_ref_r0(n,k,m,o*)和 Dep_ref_r1(n,k,m,o*)是雙向預(yù)測(cè)的兩個(gè)參考幀,wr0和wr1是計(jì)算預(yù)測(cè)參考值的加權(quán)系數(shù)。
空間差錯(cuò)隱藏失真Dec(n,m,k,o*)的計(jì)算方法為:
其中:Dec_rec(n,m,k,o*)是當(dāng)前像素值與重構(gòu)像素值的誤差失真,Dec_ep(n,m,k)是當(dāng)前像素值的累積誤差擴(kuò)散失真[5]。
對(duì)于拉格朗日參數(shù)λ的計(jì)算方法為:
其中:λef為無損傳輸中的拉格朗日參數(shù)值。
在時(shí)域分層編碼中,高時(shí)間級(jí)的圖像以低時(shí)間級(jí)的圖像作為預(yù)測(cè)參考幀,如果低時(shí)間級(jí)的圖像存在誤差就會(huì)傳到高時(shí)間級(jí)的圖像中,由此可見,誤差擴(kuò)散失真對(duì)編碼圖像的影響與時(shí)間級(jí)位置有關(guān),時(shí)間級(jí)越低,誤差擴(kuò)散的影響越大,因此,時(shí)域分層編碼的率失真表示為:
其中:α(t)是時(shí)間級(jí) t的函數(shù),pl是丟包率,Ds(n,m,o)是信源編碼的量化失真,Dep_ref(n,m,o)是誤差擴(kuò)散失真,Dec(n,m)是時(shí)間差錯(cuò)隱藏失真。
本文主要針對(duì)時(shí)域分層編碼率失真中的碼率分配和時(shí)間級(jí)函數(shù)的設(shè)定來進(jìn)行改進(jìn)。
在碼率分配方面,采用非均勻分配的方法,即對(duì)低時(shí)間級(jí)的圖像幀多分配一些碼率,對(duì)高時(shí)間級(jí)的圖像幀少分配一些碼率。
時(shí)間級(jí)函數(shù)是影響誤差擴(kuò)散失真的因子,因此,時(shí)間級(jí)函數(shù)的取值分配很重要。以GOP=8的等級(jí)B圖像誤差擴(kuò)散影響為例來說明時(shí)間函數(shù)的設(shè)定,誤差擴(kuò)散區(qū)域如圖2所示。
圖2中的圖像組的大小為8,時(shí)間級(jí)為3,因?yàn)閘og28=3,所以若圖像組的大小為 N,則時(shí)間級(jí) T=log2N。圖2中時(shí)間級(jí)3包含4個(gè)圖像,時(shí)間級(jí)2包含2個(gè)圖像,時(shí)間級(jí)1包含1個(gè)圖像,由此看出,時(shí)間級(jí)包含的圖像數(shù)與時(shí)間級(jí)是以2為底數(shù)的指數(shù)關(guān)系,所以若時(shí)間級(jí)為 t,則圖像數(shù) n=2t-1。
從圖2中看出,時(shí)間級(jí)越高包含的圖像數(shù)越多,但是誤差擴(kuò)散的影響越小,這樣,時(shí)間級(jí)與圖像數(shù)的冪指數(shù)關(guān)系,時(shí)間級(jí)t的時(shí)間級(jí)函數(shù)為:
式中:pi(i)(i=1,2,3,…,t)為各時(shí)域分層圖像的丟包率,C1為尺度因子。
從圖2中看出,當(dāng)時(shí)間級(jí)t=T時(shí),誤差擴(kuò)散影響最小,不會(huì)繼續(xù)傳播,所以率失真中不存在誤差擴(kuò)散,時(shí)間級(jí)函數(shù)為:
從圖2中看出,當(dāng)時(shí)間級(jí)t=0時(shí),誤差擴(kuò)散影響最大,影響了整個(gè)圖像組,所以率失真中誤差擴(kuò)散最大,時(shí)間級(jí)函數(shù)為:
由以上對(duì)時(shí)間級(jí)函數(shù)的確定,率失真函數(shù)分別為:
為了驗(yàn)證該改進(jìn)算法,采用了參考軟件 JSVM[6],對(duì)QCIF格式的Foreman視頻序列進(jìn)行測(cè)試,其中圖像組的大小為8,第 1幀為I幀,空間基本層的幀率為 15 f/s,空間增強(qiáng)層的幀率為 30 f/s,丟包率為 3%、5%和 10%,量化參數(shù)分別為 20、24、28、32、36和 40。 分別對(duì)不使用率失真優(yōu)化(NO-RDO)、傳統(tǒng)的IP丟包率的率失真優(yōu)化(TP-RDO)和改進(jìn)的算法(IP-RDO)進(jìn)行了測(cè)試驗(yàn)證,測(cè)試所得數(shù)據(jù)如表1、表2和表3所示。
從表中看出,丟包率為 3%時(shí),與 NO-RDO相比,TPRDO的碼率平均增加了333.76%,IP-RDO的碼率平均增加了8.04%;丟包率為5%時(shí),與NO-RDO相比,TPRDO的碼率平均增加了41.29%,IP-RDO的碼率平均增加了10.01%;丟包率為 10%時(shí),與NO-RDO相比,TPRDO的碼率平均增加了50.65%,IP-RDO的碼率平均增加了11.25%。由此看出,與NO-RDO相比,TP-RDO的碼率增加得快,而IP-RDO的碼率增加得不是很快。
表1丟包率為3%的比特率和PSNR值
表2丟包率為5%的比特率和PSNR值
表3丟包率為10%的比特率和PSNR值
為了更好地說明測(cè)試結(jié)果,對(duì) NO-RDO、TP-RDO和IP-RDO的RD曲線進(jìn)行了仿真,仿真圖如圖3所示。
從圖3可以看出,在丟包率為3%時(shí),TP-RDO的率失真性能比NO-RDO差,而丟包率為5%和10%時(shí),TPRDO的率失真性能比NO-RDO好。由此說明,TP-RDO在低丟包率時(shí)率失真性能下降,而IP-RDO在丟包率為3%、5%和10%時(shí),率失真性能均比NO-RDO和 TPRDO的好。
該改進(jìn)算法充分考慮了碼率的分配和時(shí)間級(jí)函數(shù)對(duì)時(shí)域分層編碼中誤差擴(kuò)散的影響,改進(jìn)后的算法有效地抑制了誤差擴(kuò)散的影響,提高了視頻流的魯棒性,特別適用于IP網(wǎng)絡(luò)的視頻流傳輸。
[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]唐浩漾,史浩山,趙洪鋼.基于可伸縮視頻編碼的率失真優(yōu)化編碼算法[J].計(jì)算機(jī)應(yīng)用研究,2009,26(9):3584-3586.
[3]鄧兵.可伸縮性視頻編碼中的碼率控制算法研究[D].杭州:浙江大學(xué),2010.
[4]程宏,楊先一.一種基于漏預(yù)測(cè)技術(shù)的FGS視頻編碼框架[J].計(jì)算機(jī)應(yīng)用研究,2009,26(7):2484-2486.
[5]郭宜.可伸縮視頻編碼的差錯(cuò)控制方法研究[D].合肥:中國科學(xué)技術(shù)大學(xué),2009.
[6]REICHEL J,SCHWARD H,WIENT M.JVT-T202 joint scalable video model JSVM-7[S].2006.