背景
由於實際的無線和IP信道是不可靠的,如①不可靠的有線/無線信道在傳輸比特流中會引入隨機誤碼;②無線信道因多徑衰減會產生突發誤碼;③而在盡力型的網路傳輸中,IP信道上的擁塞會引發丟包現象等。正是由於信道頻寬的限制,視頻通信的數據一般需要採用低速率的視頻壓縮技術處理後再傳輸。而壓縮後的視頻比特流對信道的干擾是非常敏感的,這對於視頻解碼,造成誤碼環境下恢復圖像質量差,輕則使解碼重建圖像出現令人討厭的方塊效應,重則根本無法解碼播放。另外,在MPEG-1、MPEG-2、H.261和H.263等國際圖像編碼標準中,塊編碼算法使用了運動補償和可變長編碼技術。如果視頻編碼數據在傳送時出現誤碼,就會影響與該誤碼數據有時間相關性的數據恢復,即誤碼擴散,它會給後續的視頻信號造成不可恢復的損失。為了減少由於信道誤碼引起的圖像失真,人們提出了各種抗誤碼的方法,如自動重傳請求(ARQ)、前向錯誤糾正編碼(FEC)、數據交錯(Interleaving)、誤碼檢測技術、傳輸層的差錯控制技術、比特流變換技術、解碼端的誤碼掩蓋技術和防誤碼擴散技術等。
傳輸信道產生的誤碼可分為:不可靠的有線/無線信道將在傳輸比特流中引入隨機誤碼;由於網路阻塞,有線PI網路中的“盡力”傳輸將引入包丟失;在無線信道或移動無線網中,多徑傳播會導致突發誤碼。針對這三類誤碼,要採用不同的抗誤碼策略。視頻抗誤碼可以在視頻編碼、傳輸、解碼恢復的不同環節採用相應的抗誤碼技術,以及多個環節綜合的抗誤碼技術。
檢測技術
傳輸解碼層
傳輸解碼層上的誤碼檢測是指在信道解碼環節上檢測傳輸誤碼。在傳輸層添加頭信息是常用的一種誤碼檢測方法。如在基於包交換的網路中,視頻編碼器輸出的比特流被打成一定大小的數據包,每個數據包都包含一數據包頭。其中包含有數據包的順序信息等,該信息在解碼時就可用來檢測是否存在丟包現象。如RTP協定就使用了這種方法。前向糾錯(FEC)是在傳輸層常用的另一種誤碼檢測方法。
視頻解碼層
視頻解碼層上檢測誤碼是指在視頻解碼環節上檢測傳輸誤碼。由於信源編碼協定對比特流的結構作了詳細規定,所以可通過檢查比特流是否符合語法結構來檢測是否發生誤碼。例如,量化步長不應該為零,DCT係數的個數存在一個最大可能值(對8X8的DCT變換,該值為64),運動矢量也應在一定的範圍內取值等。當解碼器檢測到這些規則遭到破壞時,就可以斷定發生了誤碼。
其次,如果信源編碼器使用可變長編碼(VLC),即使出現1比特的誤碼,也可能會因丟失解碼同步字而導致後面的比特無法解碼。一般情況下,編碼器所使用的VLC碼錶是不完全碼錶,即不是所有碼字都是合法的。因此,解碼器一旦檢測出一個不屬於碼錶的碼字,那么就可以確定發生了誤碼。
另外,還可以根據視頻信號的自然特徵來檢測誤碼。如平滑特徵是視頻信號的重要特徵。在脈衝編碼和差分脈衝編碼中,如果相鄰兩行像素的差值大於一定閾值,就可以認為當前圖像塊遭到了誤碼破壞。
最新的方法是對視頻圖像宏塊在空域或時域上加入某種強制關係構成脆弱水印。如果在解碼端發現水印信息遭到破壞,也可以斷定發生了誤碼。
總結
在傳輸層添加頭信息、或利用FEC技術,均是較為可靠的方法,其缺點是要犧牲一定的網路頻寬。利用視頻信號本身的屬性及比特流語法結構進行誤碼檢測,不會增加額外的傳輸負擔,但會增加計算量,且有可能會發生誤檢。在比特流中添加同步標誌,利用VLC編碼表的不完整性,則以較小的冗餘換取了更高的誤碼檢測效率,是一種較好的方法。而使用脆弱水印來檢測誤碼,其最大的問題是當沒有誤碼發生時,水印本身引入了噪聲。這些方法並不互相衝突,在實際系統中可以結合使用。
隱藏技術
誤碼隱藏技術是利用人體視覺能忍受一定程度視頻失真的原理,將客戶端接收的數據錯誤實行隱藏的技術。空間內插和時間內插是錯誤隱藏的兩種基本方式。空間內插利用相鄰空間信息來重建發生錯誤位置的像素,而時間內插是利用前面視頻幀的信息來重構發生錯誤位置的信息。由於誤碼隱藏技術是在接收端完成的,因此不會出現網路擁塞和網路延遲問題。
時間預測
基於運動補償的時間預測的原理是把前一幀中相應空間位置的圖像塊直接用來填補當前幀中受損傷的圖像塊。然而,當畫面存在較大運動時,會出現非常明顯的方塊效應。當運動矢量被正確傳輸時,使用運動補償塊代替同樣位置的圖像塊,可以有效的彌補上述缺點。
平滑最優恢復
這種方法主要利用了大多數視頻信號的平滑特徵來估計受損塊數據,即通過最小化塊內相鄰像素之間的空間和時間偏差,使估計得到的視頻信號最平滑。
空頻域插值法
視頻信號的平滑特徵還意味著受損圖像塊中的係數與相鄰圖像塊中的對應係數比較接近。如果受損塊只是損失了個別係數,可以利用四個相鄰塊係數的插值估計這些受損係數。如果受損塊的所有係數都已丟失,這種頻域插值的方法相當於用相鄰塊對應像素的插值估計受損塊的像素值,而不是利用空間距離最近的像素來插值。由於四個方向上用來做插值的像素點與被插值的像素點相距8個點,它們之間的相關性較小,因此估計精度較差。因此,提出了一種新的插值方法:利用受損塊周圍四條單像素寬的邊界線做插值。其有兩種具體的實現方法:一種方法是使用距離最近的兩條邊界上的像素做插值,另一種方法是使用四條邊界上的對應像素做插值。
該方法僅利用了空間平滑屬性,主要針對的是靜止圖像或者視頻中使用幀內編碼的圖像塊。對於使用幀間編碼的視頻圖像塊,因為預測誤差的DCT係數相關性不強,頻域插值方法並不適用。此外,也可以用空域插值來直接估計像素的原始值。
自然圖像的平滑特徵僅表現在低頻係數部分,高頻係數的相關性不強,因此,頻域的插值往往只需要對低頻部分有限的幾個係數進行,其餘高頻係數往往強制設為零。
運動矢量恢復
同樣基於視頻信號的平滑屬性,運動矢量也可以用類似的插值方法加以恢復。常用的運動矢量恢複方法有:
①直接將受損運動矢量置零,適用於運動較少的視頻信號。
②用上一幀對應圖像塊的運動矢量代替。
③使用空間相鄰圖像塊的運動矢量的平均值代替。
總結
上述所有的誤碼隱藏技術都利用了若干關於視頻圖像的先驗知識,如時域空域中的平滑特徵等,以平滑特徵為最優目標的恢復技術強化了這一性質。插值法被認為是能量最小化的一種特例,直接利用空間插值法的缺陷在於完全忽略了受損塊中完好的係數,並且只利用了圖像的空間相關性;而以平滑特徵為最優目標的平滑最優恢複方法,將空域和時域的相關性都利用了。
傳輸層技術
傳輸層的差錯控制技術是一種在視頻傳輸中非常典型的差錯控制技術,其包括:前向糾錯、利於錯誤恢復的包化技術和多路復用技術、有延時限制的自動重傳技術和不等的錯誤保護技術等。該方法被套用於己經編碼的視頻流,通過誤碼檢測和糾正,並在可能的情況下通過請求重傳損傷數據的方法來達到抗誤碼的目的。
前向糾錯
FEC的基本思想為:在信源數據的基礎上,增加一定的冗餘數據,形成信道編碼。信道編碼通過高誤碼率的信道(如無線),可能會發生數據丟失或差錯等問題。然而,由於在接收到的數據中包含了冗餘數據,因此在一定的差錯範圍內,接收端仍可利用冗餘數據來修復被破壞的數據。根據所加冗餘信息的類型不同FEC編碼主要可以分為信道編碼、基於信源編碼的FEC、結合前兩者的編碼三種。
信道編碼是將k個源信息包和n-k個冗餘包編碼後傳輸,客戶端只要收到任意m個包( )就可以還原源信息,即重建k個源信息包(如圖1所示)。這種編碼糾錯能力很強,而且糾錯完全在客戶端進行,且傳送端可以向任意多的用戶傳送信道編碼的數據,因此,適用於多播。然而信道編碼犧牲了編碼效率,增加了延遲,並且難以適應網路突發、短期的擁塞現象。
基於信源編碼的FEC是將源數據包以相差很大的壓縮率進行分別編碼,一般讓壓縮率高的數據作為壓縮率低的冗餘信息。若壓縮率低的包丟失了可利用壓縮率高的包中的信息來恢復,只是效果有所下降罷了。同樣,該方法編碼效率也不高,但是其延遲較小,並且可以通過引火反饋來提高編碼效率。
將信道編碼和基於信源編碼的FEC相結合,在兩者之間尋找最優的速率分配點。
有效的FEC應該是用儘可能少的冗餘信息就能夠消除丟包或誤碼所造成的不良影響。FEC要求較多的校驗位來進行檢錯和糾錯,從而引起碼率和計算量的增大,並且FEC方法對突發誤碼性不太適合,這是因為大多時候沒有誤碼發生,FEC方法浪費了很多可用頻寬,而一旦發生突發性誤碼時,FEC方法又沒有太大的用處。
延時限制重傳
當多媒體的重要數據發生錯誤時,最理想的錯誤控制是重傳。尤其當關鍵數據在重傳後如果能在播放時刻之前到達客戶端,就應採用重發策略。而傳統的重傳機制(ARQ),不考慮媒體的實時播放要求,其請求重傳的數據可能會超過數據的解碼或播放時限而被接收方丟棄。因此,只有當數據傳輸時間明顯小於媒體的播放延時要求時,才採用重傳機制來重新傳送丟失的數據,這就是有延時限制的重傳技術。有時延限制的重傳策略可以分成接收方控制的重傳、傳送方控制的重傳、混合重傳三種。
在非實時的視頻傳輸,如果傳輸控制器可以及時的獲得有效的反饋信息,即能及時的知道哪些信息發生了錯誤,利用重傳技術也是十分有效的。
對於實時視頻傳輸,傳統的觀點一般認為它會引入延時而不適用,然而這種觀點正在逐漸發生轉變。傳統觀點還認為重傳技術會加大信道負載,進而增加重傳請求,造成“網路風暴”。而實際上,當發生重傳時,只要視頻編碼器適當降低輸出碼率,就可以緩解信道負載。所以重傳技術在視頻傳輸中的套用己經越來越廣泛,尤其是在高誤碼率的信道環境,如對無線網路環境是非常有用的。
不等錯誤保護
對於無線信道,由於其有限的頻寬,信道編碼(如FEC編碼)引入的數據冗餘會增加本身就有限的頻寬消耗,這將導致媒體流中的可傳送的有效碼率進一步降低。對於給定的無線信道頻寬資源,則信道編碼的冗餘量的選擇問題,實際上就是差錯恢復能力與壓縮效率之間的一個平衡問題,這也是UEP的出發點。其通常與信源編碼和FEC結合來達到抗誤碼的目的。其主要有如下三類方法:
①結合傳輸優先權的可擴展編碼FCE保護。FCE在具有傳輸優先權的可擴展編碼方面較為常用。如MPEG-4的可擴展編碼的比特流,對不同視頻層採取不同冗餘程度的差錯保護。視頻的基本層對媒體質量的影響最大,則增加冗餘保護的力度;視頻的擴展層對媒體質量的影響較小,則給予較低的冗餘保護甚至不予冗餘保護。由於不同媒體層的信道編碼策略不同,既保護了對媒體質量貢獻最大的基本層數據,又降低了信道編碼中冗餘數據對有限傳輸頻寬的消耗,提高了媒體流的有效比特率。
②基於視頻主觀質量的不等FEC保護方法指在給定的信道速率和誤碼環境下,利用生理學的研究成果,即生物視覺具有選擇注意的能力這一特性,對主觀質量影響較大的區域的宏塊比特流給予較強FEC的保護,而其它宏塊比特流則給予較弱的FEC保護。
③聯合信源/信道編碼不等FCE控制技術是一種非常有效的抗誤碼技術。因對於壓縮後的視頻比特流,其重要性是不等的,如視頻比特流中的解析度、幀類型、量化參數和其它與視頻數據的有關描述信息,當其在傳輸時由於信道干擾被破壞或丟失,則該視頻幀將是不可解的;並且,對於幀間編碼宏塊的運動矢量比DCT殘差數據、幀內編碼宏塊的DCT直流分量比交流分量數據要重要得多。因此,可以根據數據的重要程度給予不等的FEC保護。採用這樣的方法,視頻包的重要部分發生誤碼的機率可以變得非常小,從而有利於保證重建圖像質量不受誤碼大的影響。
僅僅採用傳輸級的差錯控制技術並不能完全糾正所有的視頻比特流中的錯誤,因此,在實際套用中,其通常與其它的控誤碼方法一起聯合使用,以彌補其不足。
聯合編解碼
如果在編解碼器之間存在一條可靠的反饋通道,互動式抗誤碼技術就可以得以套用。
選擇性編碼
如果編碼器不使用預測編碼方法,那么誤碼隱藏技術將沒有如此重要,因為誤碼的影響只局限於當前一幀圖像,而且單幀圖像中的瑕疵很容易被後續幀掩蓋。不過,由於相鄰幀之間的信息冗餘非常的高,幀間預測方法又不能棄之不用。因此,如果解碼器能夠提供受損圖像塊的位置信息,編碼器可以立即採用幀內編碼模式對相應位置的圖像塊編碼,這樣誤碼對圖像造成的損害可以有效地控制在有限的幾幀之內。但是這種簡單使用幀內編碼方式的策略會明顯降低圖像壓縮比。因此,可以使用下面經過改進的編碼策略。
假設編碼器正在對第i幀編碼時,解碼器通知編碼器第i-n幀某個位置出現了誤碼(n取決於信道延遲時間和編碼器的編碼幀速率),編碼器可以根據運動補償的依賴關係,迅速計算出從i-n+l幀到i-1幀圖像中受到影響的宏塊位置。然後,對第i幀進行預測編碼時,只要避免使用受損宏塊作為預測參考,這樣就可以把誤碼造成的影響限制在i-n幀到i-1幀之間。在這種策略下,僅僅是限制了可用來預測圖像的區域,對第i 幀的處理仍然採用幀間預測編碼,所以編碼壓縮效率受到的影響相對較小。
自適應傳輸
如果傳輸控制器可以從傳輸目標獲得及時有效的反饋信息,從而可以及時知道哪些重要信息發生了誤傳。這對視頻重建時非常有幫助的。如當解碼器發現視頻數據受損時,則立即向編碼器發出重傳請求,同時用某種誤碼隱藏技術恢復受損的圖像塊,然後繼續解碼,整個過程並不等待重傳數據的到達。解碼器需要記錄下受損像素和相關編碼信息,這裡受損像素是指因誤碼擴散而受影響的所有像素,其包括當前幀中和後續幀中的像素。當重傳數據一到,受損像素將被糾正過來,就好象沒有發生過傳輸誤碼一樣。但如果運動補償的精度在半像素級,那么受損像素的跟蹤及糾正過程將較為複雜。
防擴散技術
由於誤碼擴散不僅使出錯幀的重建圖像質量下降,而且可能使後續幀造成不可恢復的損失,所以使要儘可能避免的。一般的抗誤碼策略有:
(1) 對受誤碼影響的宏塊實施幀內編碼,該方法與標準兼容,非常適合於實時系統中使用。
(2) 在編碼端標識受誤碼影響的宏塊,以避免下一幀繼續參考該宏塊,該方法在沒有增加運算複雜度和信道負擔的情況下,將誤碼的影響僅僅限制在出錯幀內。
(3) 自適應幀內宏塊刷新方法,該方法減少了解碼端糾正大量錯誤的時間,特別適用於反饋信道延時較長或廣播環境的無線視頻通信系統中使用。
(4) 互動式防誤碼擴散技術,該方法能夠有效的抑制誤碼擴散,且與標準兼容,可套用於實際視頻通信系統中。