摘 要: 針對JVT-H017碼率控制算法中跳幀策略沒有很好地考慮圖像的運動復雜程度,仍采用類似于MPEG-4 Q2中的簡單方法的問題,提出了一種基于運動復雜度的跳幀算法。此方法充分利用了序列的運動程度,較好地緩解了由于物體劇烈運動所帶來的緩存上溢現象,優化了圖像的質量。
關鍵詞: JTV-H017;碼率控制;運動復雜度;跳幀
H.264[1]是最新的國際視頻編碼標準,它不僅使視頻壓縮比以往標準有明顯提高,而且具有良好的網絡親和性,特別是對 IP互聯網、無線移動網等易誤碼、易阻塞、QoS不易保證的網絡視頻傳輸性能有明顯的改善。因此,H.264已成為現今圖像壓縮研究的一個熱點。同時,碼率控制作為視頻壓縮算法的一個重要方面,也引起了研究者的很大重視。
在H.264碼率控制經典算法里,JVT-H017[2]因對實際碼率和PSNR的控制更加準確,并能更好地逼近限制的碼率,而與JVT-G012[3]一起成為目前最常用的H.264碼率控制算法。但JVT-H017算法仍然存在明顯的不足[4]: 同時引用率失真(R-D)模型和MAD線性模型會增加編碼的計算量;算法中圖像組GOP(Group of Pictures)碼率的分配方法和HRD機制限制了前后質量平緩度的進一步提高;編碼后的跳幀策略仍然采用類似于MPEG-4 Q2中的簡單方法,嚴重影響了運動劇烈圖像的質量。本文在介紹JVT-H017碼率控制算法的基礎上,提出了一種利用運動復雜度作為跳幀判別的算法,合理地分配緩存空間給運動劇烈的幀,較好地保留了圖像的細節,進一步提高了圖像的質量。
1 JVT-H017碼率控制算法
JVT-H017碼率控制策略包含3個層次:GOP層、幀層和基本單元層。其中基本單元層指的是同一幀中一組連續的宏塊,每個基本單元層至少包含一個宏塊。
1.1 GOP層碼率控制
GOP層碼率控制主要任務是計算當前GOP 中剩余圖像幀的比特數,初始化即時解碼刷新(IDR)和第一個存儲幀的量化參數。當第i個GOP的第j幀被編碼時,當前GOP中剩余幀的比特數計算如下:
1.2 幀層碼率控制
幀層的碼率控制包括編碼前和編碼后兩個階段。
1.2.1 編碼前階段
編碼階段是計算每一幀的量化參數。對于存儲幀和非存儲幀,方法是不一樣的。本文介紹的是只有存儲幀的情況。這一過程分兩個步驟完成:
(1)確定每個幀的目標碼率
①確定當前GOP中每個存儲幀的目標碼率
每一個存儲幀的目標緩沖由第一個IDR或存儲幀的編碼比特和平均復雜度得到。在編碼完第i個GOP的第1個存儲幀后,目標緩沖的初始值為:
(2)計算量化參數和執行率失真優化(RDO)
首先采用式(9)計算與目標比特關聯的量化步長,相應的量化參數QPi(j)由量化步長和高級視頻編碼(AVC)的量化參數計算得到:
1.2.2 編碼后階段
編碼一幀以后,系數a1、a2及c1、c2采用類似MPEG-4 Q2部分的線性回歸模型進行更新。在此過程中,實際編碼產生的比特加入到緩存中。為保證更新后的緩存占用率不要過高,采用類似MPEG-4 Q2部分的跳幀策略進行調整。
1.3 基本單元碼率控制
基本單元碼率控制和幀層碼率控制的方法類似,為每個基本單元預測MAD,計算目標比特,用二次R-D 模型計算基本單元層的QP時需考慮:(1)對當前幀的第一個基本單元,QP需設為前一幀所有基本單元量化參數的平均值;(2)當前幀中還有未編碼的基本單元,而分配給它們的剩余比特數卻小于零。這時,當前基本單元的QP應相應地增大;(3)其他情況下,通過二次R-D模型來獲得QP。
2 改進的跳幀算法
在實際的編碼中,如果每個GOP都超過了預先分配給它的比特數,這時緩沖就會溢出,從而導致跳幀現象,使得圖像的質量下降[4]。JVT-H017碼率控制算法采用的跳幀方法仍是MPEG-4 Q2中的簡單方法,即只是簡單地設置緩存區占有度上限達到80%時,就執行跳幀。(同樣在以往的跳幀控制算法中[5],一般都只是將緩存的上限定為80%來作為跳幀的依據,當緩存容量超過80%時,將此幀定為跳幀)。相反,當緩存容量低于25%時,也將此幀定為跳幀,但是這樣處理沒有充分考慮到簡單的跳幀會影響運動劇烈的圖像的細節表現,導致圖像質量嚴重下降。于是參考文獻[6]根據高運動復雜度對應高比特數、低運動復雜度對應低比特數這一比特分配法則,利用過濾掉運動平穩的幀而保存運動劇烈的幀,并為運動劇烈的幀分配更多緩存空間的思想,提出了用前一幀預測得到的比特數與前面已編碼幀的實際比特數的平均值的比值作為衡量跳幀的標準。但參考文獻[5]并未考慮到出現比特數較多和比特數較少的幀交錯的幀序列這一情況。若前一幀比特數較少,當前幀比特數較多,則得到的比值偏??;反之,得到的比值偏大??梢娪么朔椒ㄗ鳛樘鴰呐袛喾椒ǎ瑴蚀_率并不高。所以本文算法從圖像復雜度算法本身入手,并考慮到相鄰幀之間具有很強的相關性,重新定義一個跳幀判別方法,力求得到的跳幀判別方法能較準確地優化圖像質量。
為了更好地適應AVS編碼器的實時應用,減少B幀延時帶來的影響,本文只考慮有I幀、P幀的圖像格式。由于I幀編碼需要較多的比特數,它將占據多個幀間間隔傳輸,因此,本文為了減小緩沖延時,緊鄰I幀的前兩個P幀仍按原算法進行跳幀。即從第3個P幀開始定義當前P幀的運動復雜度因子ci:
3 實驗結果與分析
為了對算法進行分析,在JM8.6上對本跳幀算法進行仿真。實驗中分別使用QCIF序列foreman和CIF序列mobile,共編碼100幀,GOP的結構是 IPPP…IPPP…,幀內編碼刷新周期為20幀,第一幀的量化步長為28,a= 0.6,b=0.8,w1=60%,w2=70%,a1=3/2,a2=1/2。在JM8.6現有的碼率控制算法的基礎上,分別對跳幀策略與參考文獻[2]和參考文獻[5]中的跳幀策略進行測試,截取其中的20~40幀進行顯示。比較3種算法的PSNR。在相同的條件下,本文提出的跳幀算法相對其他兩個跳幀算法有所改進,更加準確地做到了跳過平穩運動的圖像,保留運動劇烈的圖像這準則。從表1、表2可以看出,本文提出的跳幀算法,使信噪比有所提高,優化了圖像的質量。
本文針對JVT-H017碼率控制算法中跳幀策略仍然采用類似MPEG-4 Q2的簡單方法這一缺點,提出的跳幀算法合理地利用了圖像運動復雜度這一尺度來作為判別標準,與參考文獻[2]的(JVT-H017)相比,使得圖像信噪比有所提升,優化了圖像質量。但是,本算法并沒有考慮到出現場景切換和B幀存在的圖像序列的跳幀問題,所以將來的工作將是在此算法的基礎上,提出一種更好的優化算法,使其能提高不同圖像序列的圖像質量。
參考文獻
[1] 余兆明,查日勇,黃磊,等.圖像編碼標準H.264技術[M].北京:人民郵電出版社,2005.
[2] MA Si Wei, LI Zheng Guo, WU Feng, et al. JVT-H017-2003 proposed draft of adaptive rate control[S]. 2003.
[3] MA Si Wei, LI Zheng Guo, WU Feng, et al. JVT-G012 -2003 proposed draft of adaptive rate control[S]. 2003.
[4] 李記苗,劉彥明,高峰.H.264碼率控制及其改進策略[J].計算機與數學工程,2006(6):52-54.
[5] 鄭從卓,李均利,陳剛,等.AVS實時編碼的VBR碼率控制[J].計算機程,2009(35):240-242.
[6] 周駿華,石旭剛,宋瑋.一種基于運動復雜度的新的H.264碼率控制算法[J].浙江工業大學學報,2006(6):672-675.