安防音視頻流媒體服務器EasyDSS之編解碼的基本原理及壓縮編碼的方法介紹

本文介紹一下視頻壓縮編碼和音頻壓縮編碼的基本原理。其實有關視頻和音頻編碼原理的資料非常的多,之前自己一直也沒有去整理,現在我將在這裏簡單總結一下,以作備忘。

視頻編碼基本原理

(1)視頻信號的冗餘信息

以記錄數字視頻的YUV分量格式爲例,YUV分別代表亮度與兩個色差信號。例如對於現有的PAL制電視系統,其亮度信號採樣頻率爲13.5MHz;色度信號的頻帶通常爲亮度信號的一半或更少,爲6.75MHz或3.375MHz。以4:2:2的採樣頻率爲例,Y信號採用13.5MHz,色度信號U和V採用6.75MHz採樣,採樣信號以8bit量化,則可以計算出數字視頻的碼率爲:

13.58 + 6.758 + 6.75*8= 216Mbit/s

如此大的數據量如果直接進行存儲或傳輸將會遇到很大困難,因此必須採用壓縮技術以減少碼率。數字化後的視頻信號能進行壓縮主要依據兩個基本條件:

  • 數據冗餘。 例如如空間冗餘、時間冗餘、結構冗餘、信息熵冗餘等,即圖像的各像素之間存在着很強的相關性。消除這些冗餘並不會導致信息損失,屬於無損壓縮。

  • 視覺冗餘。 人眼的一些特性比如亮度辨別閾值,視覺閾值,對亮度和色度的敏感度不同,使得在編碼的時候引入適量的誤差,也不會被察覺出來。可以利用人眼的視覺特性,以一定的客觀失真換取數據壓縮。這種壓縮屬於有損壓縮。

數字視頻信號的壓縮正是基於上述兩種條件,使得視頻數據量得以極大的壓縮,有利於傳輸和存儲。一般的數字視頻壓縮編碼方法都是混合編碼,即將變換編碼,運動估計和運動補償,以及熵編碼三種方式相結合來進行壓縮編碼。通常使用變換編碼來消去除圖像的幀內冗餘,用運動估計和運動補償來去除圖像的幀間冗餘,用熵編碼來進一步提高壓縮的效率。下文簡單介紹這三種壓縮編碼方法。

(2)壓縮編碼的方法

(a)變換編碼

變換編碼的作用是將空間域描述的圖像信號變換到頻率域,然後對變換後的係數進行編碼處理。一般來說,圖像在空間上具有較強的相關性,變換到頻率域可以實現去相關和能量集中。常用的正交變換有離散傅里葉變換,離散餘弦變換等等。數字視頻壓縮過程中應用廣泛的是離散餘弦變換。

離散餘弦變換簡稱爲DCT變換。它可以將LL的圖像塊從空間域變換爲頻率域。所以,在基於DCT的圖像壓縮編碼過程中,首先需要將圖像分成互不重疊的圖像塊。假設一幀圖像的大小爲1280720,首先將其以網格狀的形式分成16090個尺寸爲88的彼此沒有重疊的圖像塊,接下來才能對每個圖像塊進行DCT變換。

經過分塊以後,每個88點的圖像塊被送入DCT編碼器,將88的圖像塊從空間域變換爲頻率域。下圖給出一個實際8*8的圖像塊例子,圖中的數字代表了每個像素的亮度值。從圖上可以看出,在這個圖像塊中各個像素亮度值比較均勻,特別是相鄰像素亮度值變化不是很大,說明圖像信號具有很強的相關性。

一個實際8*8圖像塊:

 

下圖是上圖中圖像塊經過DCT變換後的結果。從圖中可以看出經過DCT變換後,左上角的低頻係數集中了大量能量,而右下角的高頻係數上的能量很小。

圖像塊經過DCT變換後的係數:

 

信號經過DCT變換後需要進行量化。由於人的眼睛對圖像的低頻特性比如物體的總體亮度之類的信息很敏感,而對圖像中的高頻細節信息不敏感,因此在傳送過程中可以少傳或不傳送高頻信息,只傳送低頻部分。量化過程通過對低頻區的係數進行細量化,高頻區的係數進行粗量化,去除了人眼不敏感的高頻信息,從而降低信息傳送量。因此,量化是一個有損壓縮的過程,而且是視頻壓縮編碼中質量損傷的主要原因。

量化的過程可以用下面的公式表示:

 

其中FQ(u,v)表示經過量化後的DCT係數;F(u,v)表示量化前的DCT係數;Q(u,v)表示量化加權矩陣;q表示量化步長;round表示歸整,即將輸出的值取爲與之最接近的整數值。

合理選擇量化係數,對變換後的圖像塊進行量化後的結果如圖所示:

 

DCT係數經過量化之後大部分經變爲0,而只有很少一部分系數爲非零值,此時只需將這些非0值進行壓縮編碼即可。

(b)熵編碼

熵編碼是因編碼後的平均碼長接近信源熵值而得名。熵編碼多用可變字長編碼(VLC,Variable Length Coding)實現。其基本原理是對信源中出現概率大的符號賦予短碼,對於出現概率小的符號賦予長碼,從而在統計上獲得較短的平均碼長。可變字長編碼通常有霍夫曼編碼、算術編碼、遊程編碼等。其中游程編碼是一種十分簡單的壓縮方法,它的壓縮效率不高,但編碼、解碼速度快,仍被得到廣泛的應用,特別在變換編碼之後使用遊程編碼,有很好的效果。

首先要在量化器輸出直流係數後對緊跟其後的交流係數進行Z型掃描(如圖箭頭線所示)。Z型掃描將二維的量化係數轉換爲一維的序列,並在此基礎上進行遊程編碼。最後再對遊程編碼後的數據進行另一種變長編碼,例如霍夫曼編碼。通過這種變長編碼,進一步提高編碼的效率。

(c)運動估計和運動補償

運動估計(Motion Estimation)和運動補償(Motion Compensation)是消除圖像序列時間方向相關性的有效手段。上文介紹的DCT變換、量化、熵編碼的方法是在一幀圖像的基礎上進行,通過這些方法可以消除圖像內部各像素間在空間上的相關性。實際上圖像信號除了空間上的相關性之外,還有時間上的相關性。例如對於像新聞聯播這種背景靜止,畫面主體運動較小的數字視頻,每一幅畫面之間的區別很小,畫面之間的相關性很大。對於這種情況我們沒有必要對每一幀圖像單獨進行編碼,而是可以只對相鄰視頻幀中變化的部分進行編碼,從而進一步減小數據量,這方面的工作是由運動估計和運動補償來實現的。

運動估計技術一般將當前的輸入圖像分割成若干彼此不相重疊的小圖像子塊,例如一幀圖像的大小爲1280720,首先將其以網格狀的形式分成4045個尺寸爲16*16的彼此沒有重疊的圖像塊,然後在前一圖像或者後一個圖像某個搜索窗口的範圍內爲每一個圖像塊尋找一個與之最爲相似的圖像塊。這個搜尋的過程叫做運動估計。通過計算最相似的圖像塊與該圖像塊之間的位置信息,可以得到一個運動矢量。這樣在編碼過程中就可以將當前圖像中的塊與參考圖像運動矢量所指向的最相似的圖像塊相減,得到一個殘差圖像塊,由於殘差圖像塊中的每個像素值很小,所以在壓縮編碼中可以獲得更高的壓縮比。這個相減過程叫運動補償。

由於編碼過程中需要使用參考圖像來進行運動估計和運動補償,因此參考圖像的選擇顯得很重要。一般情況下編碼器的將輸入的每一幀圖像根據其參考圖像的不同分成3種不同的類型:I(Intra)幀、B(Bidirection prediction)幀、P(Prediction)幀。

典型的I,B,P幀結構順序:

 

如圖所示,I幀只使用本幀內的數據進行編碼,在編碼過程中它不需要進行運動估計和運動補償。顯然,由於I幀沒有消除時間方向的相關性,所以壓縮比相對不高。P幀在編碼過程中使用一個前面的I幀或P幀作爲參考圖像進行運動補償,實際上是對當前圖像與參考圖像的差值進行編碼。B幀的編碼方式與P幀相似,惟一不同的地方是在編碼過程中它要使用一個前面的I幀或P幀和一個後面的I幀或P幀進行預測。由此可見,每一個P幀的編碼需要利用一幀圖像作爲參考圖像,而B幀則需要兩幀圖像作爲參考。相比之下,B幀比P幀擁有更高的壓縮比。

(d)混合編碼

上面介紹了視頻壓縮編碼過程中的幾個重要的方法。在實際應用中這幾個方法不是分離的,通常將它們結合起來使用以達到最好的壓縮效果。下圖給出了混合編碼(即變換編碼+ 運動估計和運動補償+ 熵編碼)的模型。該模型普遍應用於MPEG1,MPEG2,H.264等標準中。

 

從圖中我們可以看到,當前輸入的圖像首先要經過分塊,分塊得到的圖像塊要與經過運動補償的預測圖像相減得到差值圖像X,然後對該差值圖像塊進行DCT變換和量化,量化輸出的數據有兩個不同的去處:一個是送給熵編碼器進行編碼,編碼後的碼流輸出到一個緩存器中保存,等待傳送出去。另一個應用是進行反量化和反變化後的到信號X’,該信號將與運動補償輸出的圖像塊相加得到新的預測圖像信號,並將新的預測圖像塊送至幀存儲器。

音頻編碼基本原理

(1)音頻信號的冗餘信息

數字音頻信號如果不加壓縮地直接進行傳送,將會佔用極大的帶寬。例如,一套雙聲道數字音頻若取樣頻率爲44.1KHz,每樣值按16bit量化,則其碼率爲:

244.1kHz16bit=1.411Mbit/s

如此大的帶寬將給信號的傳輸和處理都帶來許多困難,因此必須採取音頻壓縮技術對音頻數據進行處理,纔能有效地傳輸音頻數據。

數字音頻壓縮編碼在保證信號在聽覺方面不產生失真的前提下,對音頻數據信號進行儘可能大的壓縮。數字音頻壓縮編碼採取去除聲音信號中冗餘成分的方法來實現。所謂冗餘成分指的是音頻中不能被人耳感知到的信號,它們對確定聲音的音色,音調等信息沒有任何的幫助。

冗餘信號包含人耳聽覺範圍外的音頻信號以及被掩蔽掉的音頻信號等。例如,人耳所能察覺的聲音信號的頻率範圍爲20Hz~20KHz,除此之外的其它頻率人耳無法察覺,都可視爲冗餘信號。此外,根據人耳聽覺的生理和心理聲學現象,當一個強音信號與一個弱音信號同時存在時,弱音信號將被強音信號所掩蔽而聽不見,這樣弱音信號就可以視爲冗餘信號而不用傳送。這就是人耳聽覺的掩蔽效應,主要表現在頻譜掩蔽效應和時域掩蔽效應,現分別介紹如下:

(a)頻譜掩蔽效應

一個頻率的聲音能量小於某個閾值之後,人耳就會聽不到,這個閾值稱爲最小可聞閾。當有另外能量較大的聲音出現的時候,該聲音頻率附近的閾值會提高很多,即所謂的掩蔽效應。如圖所示:

 

由圖中我們可以看出人耳對2KHz~5KHz的聲音最敏感,而對頻率太低或太高的聲音信號都很遲鈍,當有一個頻率爲0.2KHz、強度爲60dB的聲音出現時,其附近的閾值提高了很多。由圖中我們可以看出在0.1KHz以下、1KHz以上的部分,由於離0.2KHz強信號較遠,不受0.2KHz強信號影響,閾值不受影響;而在0.1KHz~1KHz範圍,由於0.2KHz強音的出現,閾值有較大的提升,人耳在此範圍所能感覺到的最小聲音強度大幅提升。如果0.1KHz~1KHz範圍內的聲音信號的強度在被提升的閾值曲線之下,由於它被0.2KHz強音信號所掩蔽,那麼此時我們人耳只能聽到0.2KHz的強音信號而根本聽不見其它弱信號,這些與0.2KHz強音信號同時存在的弱音信號就可視爲冗餘信號而不必傳送。

(b)時域掩蔽效應

當強音信號和弱音信號同時出現時,還存在時域掩蔽效應。即兩者發生時間很接近的時候,也會發生掩蔽效應。時域掩蔽過程曲線如圖所示,分爲前掩蔽、同時掩蔽和後掩蔽三部分。

 

由圖我們可以看出,時域掩蔽效應可以分成三種:前掩蔽,同時掩蔽,後掩蔽。前掩蔽是指人耳在聽到強信號之前的短暫時間內,已經存在的弱信號會被掩蔽而聽不到。同時掩蔽是指當強信號與弱信號同時存在時,弱信號會被強信號所掩蔽而聽不到。後掩蔽是指當強信號消失後,需經過較長的一段時間才能重新聽見弱信號,稱爲後掩蔽。這些被掩蔽的弱信號即可視爲冗餘信號。

(2)壓縮編碼方法

當前數字音頻編碼領域存在着不同的編碼方案和實現方式, 但基本的編碼思路大同小異, 如圖所示:

 

對每一個音頻聲道中的音頻採樣信號,首先都要將它們映射到頻域中,這種時域到頻域的映射可通過子帶濾波器實現。每個聲道中的音頻採樣塊首先要根據心理聲學模型來計算掩蔽門限值, 然後由計算出的掩蔽門限值決定從公共比特池中分配給該聲道的不同頻率域中多少比特數,接着進行量化以及編碼工作,最後將控制參數及輔助數據加入數據之中,產生編碼後的數據流。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章