音視頻數據壓縮及編解碼基礎

音視頻壓縮技術是編解碼中難點,常常會涉及很多算法處理問題。數據封裝,轉封裝等,看下Agenda:

  • 音視頻爲何需要壓縮?
  • 壓縮編碼的分類
  • 常用壓縮編碼的方法
  • 編碼器中的關鍵技術 
    • 預測
    • 量化
    • 變換
    • 熵編碼
  • 編解碼中的情況

音視頻爲何需要壓縮?

未經壓縮的數字視頻的數據量巨大

  • 存儲困難:一張DVD只能存儲幾秒鐘的未壓縮數字視頻。
  • 傳輸困難 : 1兆的帶寬傳輸一秒的數字電視視頻需要大約4分鐘。

壓縮編碼的重要性:

  • 數據壓縮是通過減少計算機中所存儲數據或者通信傳播中數據的冗餘度,達到增大數據密度,最終使數據的存儲空間減少的技術

壓縮編碼的分類:

  • 1、空間冗餘。在很多圖像數據中,像素間在行、列方向上都有很大的相關性,相鄰像素的值比較接近,或者完全相同,這種數據冗餘叫做空間冗餘。
  • 2、時間冗餘。在視頻圖像序列中,相鄰兩幀圖像數據有許多共同的地方,這種共同性稱爲時間冗餘,可採用運動補償算法來去掉冗餘信息.
  • 3、視覺冗餘。視覺冗餘度是相對於人眼的視覺特性而言的,人類視覺系統對圖像的敏感性是非均勻和非線性的,並不是圖像中的所有變化人眼都能觀察到。
  • 4、信息熵冗餘。信息熵是指一組數據所攜帶的信息量,信息熵冗餘指數據所攜帶的信息量少於數據本身而反映出來的數據冗餘。
  • 5、結構冗餘。在有些圖像的紋理區,圖像的像素值存在着明顯的分佈模式。
  • 6、知識冗餘。有許多圖像的理解與某些先驗知識有相當大的相關性。這類規律性的結構可由先驗知識和背景知識得到,稱此類冗餘爲知識冗餘

常用壓縮編碼方法的分類

這裏寫圖片描述

編碼器中的關鍵技術

  • 預測:通過幀內預測和幀間預測降低視頻圖像的空間冗餘和時間冗餘。
  • 變換:通過從時域到頻域的變換,去除相鄰數據之間的相關性,即去除空間冗餘。
  • 量化:通過用更粗糙的數據表示精細的數據來降低編碼的數據量,或者通過去除人眼不敏感的信息來降低編碼數據量。
  • 熵編碼:根據待編碼數據的概率特性減少編碼冗餘。

這裏寫圖片描述

預測:

這裏寫圖片描述

空間預測:利用圖像空間相鄰像素的相關性來預測的方法

  • 幀內預測技術:利用當前編碼塊周圍已經重構出來的像素預測當前塊 
    Intra圖像編碼(I幀)

時間預測:利用時間上相鄰圖像的相關性來預測的方法

  • 幀間預測:運動估計(Motion Estimation,ME),運動補償(Motion Compensation,MC) 
    Inter圖像編碼:前向預測編碼圖像(P幀),雙向預測編碼圖像(B幀)

幀間預測編碼:

  • 採用預測編碼方法消除序列圖像在時間上的相關性,傳送前後兩幀的對應像素之間的差值,這稱爲幀間預測。

這裏寫圖片描述

幀內預測編碼:

  • I幀圖像的每個宏塊都採用幀內(Intra)預測編碼模式。
  • 宏塊分成8x8或者4x4塊,對每個塊採用幀內預測編碼,稱作Intra8x8或者Intra4x4。
  • 幀內預測有多個預測方向:水平,垂直,左下,右上。
  • 幀內預測還有直流(DC)預測。
  • 色度塊預測還有平面預測。

這裏寫圖片描述

變換:

變換編碼也是去除冗餘的一種最基本的編碼方法。不同的是變換編碼首先要把壓縮的數據變換到某個變換域中(如頻域),然後再進行編碼。變化域中表現爲能量集中在某個區域,可以利用這一特點在不同區域間有效地分配量化比特數,或者去掉那些能量很小的區域,從而達到數據壓縮的目的。例如聲音信號,從時域變換到頻域以後,可以清楚的看到能量集中在哪些頻率範圍內,從而根據頻率範圍分佈有效地分配不同的量化位數。

量化:

量化操作實質上是將連續的模擬信號採樣得到的瞬時幅度值映射成離散的數字信號,即用一組規定的電平,把瞬時抽樣值用最接近的電平值來表示。

量化位數:量化位數是每個採樣點能夠表示的數據範圍,常用的有8位、12位和16位。

量化過程是,先將整個幅值劃分爲有限個小幅度(量化階距)的集合,把落入某個階距內的樣值歸爲一類,並賦予相同的量化值,如圖所示,其中虛線箭頭表示採樣值量化後的電平值。

這裏寫圖片描述

均勻量化

  • 採用相等的量化間隔對採樣得到的信號做量化就是均勻量化,也稱爲線性量化。量化後的樣本值Y和實際值X的差E=Y-X稱爲量化誤差或量化噪聲。

非均勻量化

  • 非均勻量化的基本思想是,對輸入信號進行量化時,大的輸入信號採用大的量化間隔,小的輸入信號採用小的量化間隔,這樣就可以在滿足精度要求的情況下用較少的位數來表示。聲音數據還原時,採用相同的規則。

熵編碼:

爲了進一步壓縮數據,對DPCM編碼後的直流係數DC和RLE編碼後的交流係數AC採用熵編碼。在JPEG有損壓縮算法中,使用哈夫曼編碼器的理由是可以使用很簡單的查表方法進行編碼。壓縮數據符號時,哈夫曼編碼器對出現頻率比較高的符號分配比較短的代碼,而對出現頻率低的符號分配比較長的代碼。這種可變長度的哈夫曼編碼表可以事先進行定義。爲了實現正確解碼,發送端和接收端必須採用相同的哈夫曼編碼表。

採用哈夫曼編碼時有兩個問題值得注意:

  • 哈夫曼編碼沒有錯誤保護功能。在譯碼時,如果某些位出現錯誤,會引起一連串的錯誤,造成錯誤傳播(Error Propagation )。計算機對這種錯誤也無能爲力,說不出錯在哪裏,更談不上去糾正它。
  • 哈夫曼編碼是可變長度碼,因此很難隨意查找或調用壓縮文件中的內容,然後再譯碼,這就需要在存儲代碼之前加以考慮。儘管如此,哈夫曼編碼還是得到了廣泛的應用。

    該算法基於一種稱爲編碼樹的技術,其步驟如下: 
    (1)將待編碼的N個信源符號按照出現的概率由大到小 排列,給排在最後的兩個符號各分配一位二進制碼元,對其中概率大的符號分配0,概率小的符號分配1(反之亦可)。 
    (2)把概率最小的兩個符號概率相加,求出的和作爲一個新符號的概率,將新的概率值與剩下的N-2個概率值一起重新進行排序,再重複步驟(1)的編碼過程。 
    (3)重複步驟(2)直到只剩一個概率值爲止,其值爲1。 
    (4)分配碼字,對於各種信源符號,基於步驟(1)分配的數字,從編碼樹的根部開始回溯讀出,並將它作爲該符號對應分配的碼字。

例 設有離散無記憶信源,符號a1、a2、a3、a4、a5、a6的出現概率分別爲0.12、0.08、0.4、0.1、0.25、0.05,其哈夫曼編碼過程如下:

這裏寫圖片描述

編解碼總體情況:

這裏寫圖片描述

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