標籤:style blog http ar for strong sp 資料 2014
A、變換量化過程總體介紹
經過幀內(16x16和4x4亮度、8x8色度)和幀間(4x4~16x16亮度、4x4~8x8色度)像素塊預測之後,得到預測塊的殘差,為了壓縮殘差資訊的統計冗餘,需要對殘差資料進行變換和量化操作。變換和量化的總體操作過程如:
對於Intra_16x16的亮度塊,通過16(4x4)個4x4的前向DCT變換,然後對得到的16個DC係數再進行4x4的Hadamard變換,然後對於16個DC係數和240個AC係數進行量化(DC和AC的量化公式略有不同,為了控制量化死區大小,詳見量化器設計)。
對於8x8的色度塊(幀內、幀間),進行4x4的DCT變換後,得到4個DC和60個AC係數,同樣對於DC係數先進行2x2的Hadamard變換後,分別對DC和AC係數進行量化。
由於變換塊越大,編碼的效率越高,且映像的細節資訊越能得以保留。所以H.264在HD檔次中,支援進行8x8的DCT變換(設定標誌transform_size_8x8_flag=1),且不需要對DC係數進行Hadamard變換,DCT變換後對DC和AC係數進行統一的量化處理。
然後對於其他尺寸的變換塊(不是Intra_16x16、8x8色度,沒有transform_size_8x8_flag=1標誌),則簡單採用4x4的DCT變換,然後直接對DC和AC係數進行統一量化。
B、量化介紹
量化是通過多對一的映射,降低位元速率。主要有均勻量化、非均勻量化和自適應量化。根據最優量化器設計準則:最佳量化區間的邊界值為相鄰兩個最佳量化值的平均數,最佳量化值為所在量化區間的均值。
1、簡單的定長標量量化器公式如下:
Z = int(|W|/S) * sng(W)。
其中W表示輸入值,S是量化步長,int(x)表示小於等於x的最大整數,sng(x)表示x的符號,取值-1、0、+1。
反量化公式:
W = S * Z;
量化不長S決定了量化的效果,S越大,量化器的壓縮效率越高,但是相應的映像的失真越高。但是對於上述量化器,對於區間[0,S)的殘差值,被量化成0,明顯不符合最優量化器設計準則,所以引入量化位移量f。
2、變形量化器:引入量化位移量f,公式如下:
Z = int((|W| + f ) / S) * sng(W);
反量化公式如下:
W = S * Z;
由於區間(f-S, S-f)的殘差量化為0,[S-f, 2S-f)的殘差量化為S,所以此量化器就可以通過調節f的值,調節量化區間的最佳量化值,使得最佳量化值滿足是該區間的均值(W是非均勻分布時也可以調節f達到最佳量化器的要求),因此f可以控制量化區間的位移量。H.264的參考模型建議對於幀間預測時,f=S/6;對於幀內預測是,f=S/2。
對於殘差值屬於(f-S, S-f)時,量化值是0,所以區間(f-S, S-f)被稱為量化死區,通過f可以控制量化死區的大小。由於經過DCT變換後,殘差值大量處於量化死區,且量化死區的殘值值往往對應高頻細節資訊,在實際應用中,往往需要對量化死區的高頻或者大量出現的殘差資訊特殊處理,所以需要根據實際控制量化死區的大小。但是由於f同時控制著量化位移量和量化死區,具有耦合性,所以為瞭解耦合,在JVT-K026中提出一種解耦合的量化器。
3、變形量化器:引入參數t控制量化死區,公式如下:
Z = int( (|W| + f + t) / S) * sng(W);
反量化公式:
W = (S * |Z| - t )* sng(Z)。
該量化器通過f控制量化值(即:量化值相對於量化區間斷點的位移量),確定量化位移量滿足最優量化器後,通過t控制量化死區的大小。
H.264學習筆記4——變換量化