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

本文介紹一下視頻壓縮編碼和音頻壓縮編碼的基本原理。其實有關視頻和音頻編碼原理的資料很是的多,以前本身一直也沒有去整理,如今我將在這裏簡單總結一下,以做備忘。緩存

視頻編碼基本原理

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

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

13.5_8 + 6.75_8 + 6.75*8= 216Mbit/sspa

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

  • 數據冗餘。例如如空間冗餘、時間冗餘、結構冗餘、信息熵冗餘等,即圖像的各像素之間存在着很強的相關性。消除這些冗餘並不會致使信息損失,屬於無損壓縮。
  • 視覺冗餘。人眼的一些特性好比亮度辨別閾值,視覺閾值,對亮度和色度的敏感度不一樣,使得在編碼的時候引入適量的偏差,也不會被察覺出來。能夠利用人眼的視覺特性,以必定的客觀失真換取數據壓縮。這種壓縮屬於有損壓縮。

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

(2)壓縮編碼的方法

(a)變換編碼it

變換編碼的做用是將空間域描述的圖像信號變換到頻率域,而後對變換後的係數進行編碼處理。通常來講,圖像在空間上具備較強的相關性,變換到頻率域能夠實現去相關和能量集中。經常使用的正交變換有離散傅里葉變換,離散餘弦變換等等。數字視頻壓縮過程當中應用普遍的是離散餘弦變換。io

離散餘弦變換簡稱爲DCT變換。它能夠將L_L的圖像塊從空間域變換爲頻率域。因此,在基於DCT的圖像壓縮編碼過程當中,首先須要將圖像分紅互不重疊的圖像塊。假設一幀圖像的大小爲1280_720,首先將其以網格狀的形式分紅160_90個尺寸爲8_8的彼此沒有重疊的圖像塊,接下來才能對每一個圖像塊進行DCT變換。class

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

一個實際8*8圖像塊:基礎

22.jpg

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

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

23.jpg

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

量化的過程能夠用下面的公式表示:

241.png

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

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

24.jpg

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

(b)熵編碼

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

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

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

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

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

因爲編碼過程當中須要使用參考圖像來進行運動估計和運動補償,所以參考圖像的選擇顯得很重要。通常狀況下編碼器的將輸入的每一幀圖像根據其參考圖像的不一樣分紅3種不一樣的類型:I(Intra)幀、B(Bidirection prediction)幀、P(Prediction)幀。

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

25.png

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

(d)混合編碼

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

26.png

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

音頻編碼基本原理

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

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

2_44.1kHz_16bit=1.411Mbit/s

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

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

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

(a)頻譜掩蔽效應

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

27.png

由圖中咱們能夠看出人耳對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)時域掩蔽效應

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

28.png

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

(2)壓縮編碼方法

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

29.png

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

DSS4.png

相關文章
相關標籤/搜索