[圖文]MPEG-2壓縮編碼技術原理應用(六)

來源:互聯網
上載者:User

 北京廣播學院電視工程系 教授   郭斌

2)二維DCT

   
MPEG採用了Ahmed N.等人於1974年提出的離散餘弦變換(DCT-Discrete Cosine
Transform)壓縮演算法,降低視頻訊號的空間冗餘度(Spatial
Redundancy)。因為靜態映像和預測誤差訊號兩者具有非常高的空間冗餘度,為降低空間冗餘度最廣泛地採用的頻率域分解技術就是DCT。DCT將運
動補償誤差或原畫面資訊塊轉換成代表不同頻率分量的係數集。這有兩個優點:其一,訊號常將其能量的大部分集中於頻率域的1個小範圍內,這樣一來,描述不重
要的分量只需要很少的位元數;其二,頻率域分解映射了人類視覺系統的處理過程,並允許後繼的量化過程滿足其靈敏度的要求。視頻訊號的頻譜線在0-6MHz
範圍內,而且1幅視頻映像內包含的大多數為低頻頻譜線,只在占映像地區比例很低的映像邊緣的視頻訊號中才含有高頻的譜線。因此,在視頻訊號數文書處理時,可
根據頻譜因素分配位元數:對包含資訊量大的低頻譜地區分配較多的位元數,對包含資訊量低的高頻譜地區分配較少的位元數,而映像品質並沒有可察覺的損傷,達
到碼率壓縮的目的。然而,這一切要在低熵(Entropy)值的情況下,才能達到有效編碼。能否對一串資料進行有效編碼,取決於每個資料出現的機率。
每個資料出現的機率差別大,就表明熵值低,可以對該串資料進行高效編碼。反之,出現的機率差別小,熵值高,則不能進行高效編碼。視頻訊號的數字化是在規定
的取樣頻率下由A/D轉換器對視頻電平轉換而來的,以256層或1024層表示輸入視頻訊號的幅度,每個像素的視頻訊號幅度隨著每層的時間而周期性地變
化。每個像素的平均資訊量的總和為總平均資訊量,即熵值。由於每個視頻電平發生幾乎具有相等的機率,所以視頻訊號的熵值很高,21所示。
熵值是一個定義碼率壓縮率的參數,視頻映像的壓縮率依賴於視頻訊號的熵值,在多數情況下視頻訊號為高熵值,要進行高效編碼,就要將高熵值變為低熵值。怎樣
變成低熵值呢?這就需要分析視頻頻譜的特點。由圖22視頻頻譜分析可見:大多數情況下,視頻頻譜的幅度隨著頻率的升高而降低。其中低頻頻譜在幾乎相等的概
率下獲得0到最高的電平。與此相對照,高頻頻譜通常得到的是低電平及稀少的高電平。顯然,低頻頻譜具有較高的熵值,高頻頻譜具有較低的熵值。據此,可對視
頻的低頻分量和高頻分量分別處理,獲得高頻的壓縮值。


   
由上述可見,碼率壓縮基於23所示的變換編碼和熵值編碼兩種演算法。前者用於降低熵值,後者將資料變為可降低位元數的有效編碼方式。在MPEG標準中,
變換編碼採用的是DCT,變換過程本身雖然並不產生碼率壓縮作用,但是變換後的頻率係數卻非常有利於碼率壓縮。實際上壓縮數位視訊訊號的整個過程分為塊取
樣、DCT、量化、編碼4個主要過程進行,24所示。首先在時間域將原始映像分成N(水平)×N(垂直)取樣塊,根據需要可選擇4×4、4×8、
8×8、8×16、16×16等塊,考慮到消除資料相關性及計算複雜度的恰當的折衷,圖中選擇了8×8像素塊。這些8×8取樣的像素塊代表了原映像各像素
的灰階值,其範圍在139-163之間,並依序送入DCT編碼器,以便將取樣塊由時間域轉換為頻率域的DCT係數塊。DCT系統的轉換分別在每個取樣塊中
進行,這些塊中每個取樣是數字化後的值,表示一場中對應像素的視頻訊號幅度值。式(2)和(3)分別為2維DCT正變換及反變換公式:

   
例如,當u,v = 0
時,離散餘弦正變換(DCT)後的係數若為F(0,0)=1,則離散餘弦反變換(IDCT)後的重現函數f(x,y)=1/8,是個常數值,所以將
F(0,0)稱為直流(DC)係數;當
u,v≠0時,正變換後的係數為F(u,v)=0,則反變換後的重現函數f(x,y)不是常數,此時正變換後的係數F(u,v)為交流(AC)係數。

   
由DCT正變換公式(2)及反變換公式(3)可見,計算有一定的複雜性。但是,實際上這個函數是用代碼來實現的,即兩個餘弦項只在程式開始時進行1次計
算,將計算的結果儲存起來,而後通過查表就可以了,其它各項都可以通過查表解決,其程式採用了雙層嵌套迴圈。圖25是兩個餘弦項所構成的核函數Gu,v
(x,y)計算的,其中設N = 8, u = 2,v = 3;x = 4, y = 5,可求得G2,3(4,5) =
G2,3(4)G2,3(5) = (-0.924) ×(+0.979)= -
0.905,以此類推可得到各個點的值,儲存起來備查。通過查表,查出各個項的值,用代碼來實現圖24中DCT編碼器輸出的DCT係數。根據式(2)和
(3)  進行查表後,利用C語言程式對N×N個矩陣元素的代碼採用雙層嵌套迴圈計算如下:
for  (u = 0 , u < N, u ++)
     for (v = 0,v < N, v++) {
        temp = 0,0;
        for (x = 0, x < N, x++)
           for (y = 0,y < N, y++) {
              temp + = Cosines[x][u]*Cosines [y] [v] * pixel [x] [y];
           }
       temp* = sqrt(2 * N ) * Coefficients[u][v];
       DCT[u] [v] = INT_ROUND(temp):
}

    代碼中用pixel[x][y]表示式中的f(x,y),用DCT[u][v]表示式中的F(u,v)。
當前,除了上述直接用雙層嵌套迴圈定義DCT外,還有採用餘弦變換矩陣來定義DCT的矩陣計演算法,二者機理相同。

   
由圖24及上述變換原理可察覺兩點:其一,DCT後的64個DCT頻率係數與DCT前的64個像素塊相對應,DCT前後都是64個點,它只是1個本身沒有
壓縮作用的無損變換過程。其二,單獨1場映像的全部DCT係數塊的頻譜幾乎都集中在最左上方的係數塊中,僅從該塊的頻譜中就可以形成1幅壓縮映像;DCT
輸出的頻率係數矩陣最左上方的直流(DC)係數幅度最大,圖24中為315,由於代表了x軸和y軸上的DC分量,所以它表示了輸入矩陣全部幅度的平均值;
以DC係數為出發點向下、向右的其它DCT係數,離DC分量越遠,頻率越高,幅度值越小,圖24中最右下角為-0.11,即映像資訊的大部分集中於直流系
數及其附近的低頻頻譜上,離DC係數越來越遠的高頻頻譜幾乎不含映像資訊,甚至於只含雜波。顯然,DCT本身雖然沒有壓縮作用,卻為以後壓縮時的“取”、
“舍” 奠定了必不可少的基礎。(未完待續)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.