摘 要:詳述了基于H.264/AVC的可分級視頻編碼擴展SVC中的四種針對整幀丟失的差錯隱藏算法。對這四種方法進行了實驗仿真,并根據實驗結果對這四種差錯隱藏算法的性能和復雜度進行了理論分析和對比。
關鍵詞:H.264/AVC; 視頻壓縮; 可分級視頻編碼
中圖分類號:TN919.81文獻標志碼:A
文章編號:1001-3695(2007)06-0187-02
可分級視頻編碼(Scalable Video Coding,SVC)憑借其強有力的網絡傳輸適應性吸引了世界各國視頻專家的廣泛關注。隨著各種視頻應用的普及,對視頻編碼的要求不再僅僅是單純地追求高壓縮率,而且還要求視頻流能夠很好地適應各種不同的網絡環境和用戶終端,并具有一定的容錯性和可伸縮性。SVC編碼方法就是針對這些新的視頻編碼要求而產生的一種新的編碼機制,為具有不同需求的視頻用戶在異構的網絡上有效地傳輸視頻提供了保障。特別是對于那些事先無法知道用戶的網絡環境和系統資源(包括帶寬、丟包率和QoS能力等)的情況下。
視頻編碼標準H.264/AVC在壓縮效率上已經遠遠好于先前的標準。高壓縮率和好的網絡適應性均是H.264/AVC標準的主要目標[1]。如何在充分利用H.264/AVC的高壓縮率的同時結合使用可分級編碼技術是目前的一個研究熱點。目前,聯合視頻專家組JVT(Joint Video Team)正在研究開發基于H.264/AVC的可伸縮視頻編碼技術SVC,并準備將其納入到H.264/AVC標準的擴展中[2]。
1 差錯隱藏原理
差錯隱藏是一種在解碼器端實現的后處理技術,是一種重要的差錯恢復工具。在網絡傳輸發生錯誤時,應用差錯隱藏可以大大提高重構視頻的質量。差錯隱藏方法主要是利用同一幀內和/或鄰近幀內受損宏塊與鄰近宏塊之間的相關性(包括時間相關性和空間相關性),以盡可能地恢復丟失的信息。通常的差錯隱藏方法主要包括以下四種:
(1)頻率域隱藏。由于受損塊和空間鄰近塊的相關性很高,可以用鄰近塊的直流系數DC和幾個最低頻的交流系數AC來估計受損塊相應的系數,而剩下的高頻系數設為零。
(2)時域隱藏。利用低運動視頻的相鄰幀的時間相關性,使用鄰近幀的數據來恢復當前幀的丟失信息。
(3)空間域隱藏。利用同一幀內相鄰像素的相關性,通過空間內插的方法來恢復受損數據。因為受損塊中的所有像素均需要計算,所以這種方法的復雜度最高。
(4)空間—時間域隱藏。利用鄰近塊的運動矢量(Motion Vector,MV)來估計受損塊的MV,再利用此MV進行運動補償(Motion Compensation,MC)來恢復受損塊。這種方法同時利用了空間和時間相關性。但是當鄰近塊是幀內編碼時,其差錯隱藏的效果會下降。
2 SVC的整幀丟失差錯隱藏算法
對于SVC的視頻流來說,由于視頻流是分級的,具有多個編碼層,在SVC中的差錯隱藏除了可以利用上面的這些方法外,還可以利用不同視頻編碼層之間的相關性來進行差錯隱藏。為簡單起見,只討論具有兩級空間層的情況,即空間基本層和空間增強層。差錯隱藏也同樣分為基本層差錯隱藏和增強層差錯隱藏。對于增強層差錯隱藏又分為基本層沒有包丟失和基本層有包丟失兩種情況。
首先來討論一下幀丟失的檢測。如果空間基本層的傳輸沒有保障,一個或多個幀丟失的檢測可以利用frame_num值的不連續和GopSize的計算來得到。如果基本層的傳輸是有保障的,那么幀丟失檢測可以通過檢查NAL類型是否完全來得到。在這里需要注意的是:如果一個基本層的包被丟失的話,其相應的增強層的數據包被認為是非法的,并且也將被當做丟失來處理。
2.1 基本算法
下面討論四種基本的SVC整幀丟失差錯隱藏算法:幀拷貝(FC)、時間直接模式運動估計(TD)、設置Skip模式方法(Skip)和重構基本層上采樣方法(RU)[2,3]。其中的設置BlSkip模式和重構基本層上采樣算法僅能用于空間增強層的差錯隱藏,而幀拷貝和時間直接模式運動估計算法既可用于空間增強層,又可以用于空間基本層。
(1)幀拷貝方法:被隱藏幀中的每個像素值均拷貝于參考列表list_0中的第一個幀中對應的像素值。這個被差錯隱藏后的幀不僅被用于顯示,還被用來作為解碼后面圖像的參考幀。這個算法既能用于基本層也能用于增強層。因為在可分級編碼機制中,并不是所有的基本層圖像均需要解碼,所以當基本層有丟失幀時,僅當需要解碼低分辨率視頻序列時才使用FC算法進行差錯隱藏。對于空間增強層,參考列表list_0中的圖像幀由增強層的解碼過程產生,并且是一個高分辨率的圖像。
(2)時間直接模式運動矢量估計算法:將需要被隱藏的幀中的每個子塊均設置成時間直接模式(Temporal Direct mode)[4]。丟失幀中的每個子塊的運動矢量和參考索引均使用時間直接模式來計算得到。這個算法既能用于空間基本層,也能用于空間增強層。與FC方法一樣,當空間基本層有幀丟失時,僅當需要解碼低分辨率視頻序列時才進行差錯隱藏。
(3)運動和殘差上采樣算法:將空間增強層設置成Blskip模式。首先使用獨立的雙向2抽頭濾波器:h(k)= [1,1]/2對空間基本層的預測殘差和運動信息進行上采樣來得到空間增強層的預測殘差和運動信息;然后在上采樣后的空間增強層運動域進行運動補償。因為該算法需要空間基本層的信息,所以該算法只能用于空間增強層的差錯隱藏。
(4)重構基本層上采樣算法:使用H.264/AVC標準中的6抽頭上采樣濾波器:h(k)=[ 2,0,-4,-3,5,19,26,19,5,-3,-4,0,2]/64對重構的基本層圖像進行上采樣來得到丟失的增強層圖像。因為完全使用空間基本層圖像來隱藏空間增強層信息,所以該算法也只能用于空間增強層的差錯隱藏。
2.2 對BlSkip和RU算法的修改
因為基本的BlSkip算法和RU算法不能用于空間基本層的差錯隱藏,所以需要作一些修改使得這兩種算法能夠在空間基本層有整幀丟失時也可以正常工作。有兩種方法來處理基本層的差錯隱藏,即FC方法和TD方法。為了能夠在同一條件下比較BlSkip算法和RU算法的性能,對于空間基本層的差錯隱藏處理采用相同的算法,即同時采用FC算法或同時采用TD算法。在這里選擇同時采用TD算法來對空間基本層進行差錯隱藏。也就是說,在使用BlSkip算法或RU算法進行差錯隱藏時,如果空間基本層也有包丟失,則使用TD方法來生成空間基本層圖像;然后再利用這個生成的基本層圖像進行增強層的差錯隱藏。簡單起見,將修改后的BlSkip和RU算法仍然叫做BlSkip和RU算法。
3 實驗仿真及結論分析
一般地,在傳輸經過SVC編碼后的視頻流時,應盡量保證基本層的傳輸。在網絡條件和系統資源允許的情況下再傳輸增強層。所以假設增強層的誤碼率和丟包率不低于基本層。本文選擇表1中所列的網絡丟包模式來進行實驗測試。測試視頻序列使用News標準測試序列,基于兩個空間層的情況。實驗結果列在圖1-3中。
表1 網絡丟包模式
基本層丟包率03%3%
增強層丟包率3%3%5%
圖1 基本層沒有丟包,增強層丟包率為3%
圖2 基本層和增強層丟包率均為3%
圖3 基本層丟包率為3%,增強層丟包率為5%
由以上的實驗結果可以看出,BlSkip算法是這四種方法中差錯隱藏性能最好的。其主要原因是BlSkip算法在增強層進行了運動補償運算,不僅利用了同一時間不同編碼層間的信息相關性,也充分利用了同一編碼層相鄰時刻的圖像序列間的信息相關性。當然,因為運動補償時使用的運動矢量并不是很精確的,BlSkip方法也將產生一些塊效應。在這幾種方法中,FC方法是隱藏效果最差的。然而這種方法的復雜度也是最低的,特別適用于那些低復雜度的應用,并且可以利用SVC的時間可分級特性來強制丟棄高時間分辨率的圖像幀。從實驗結果來看,RU方法在信噪比上好于TD方法,但由于RU方法產生的是相對模糊的圖像,這將促使后續解碼圖像序列產生很多的誤差漂移。其差錯隱藏的主觀結果有時并不如TD方法,尤其是對于低運動圖像序列,TD方法有時能達到很好的差錯隱藏效果。
4 結束語
本文給出了SVC的整幀丟失差錯隱藏算法,主要是針對空間可分級整幀丟失。仿真結果表明,使用空間基本層信息來隱藏空間增強層通常有更好的性能。尤其是使用基本層上采樣后再在增強層進行運動補償的BlSkip方法明顯好于其他方法。
本文中所涉及到的圖表、注解、公式等內容請以PDF格式閱讀原文。