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優化筆記
目前 h.264編解碼器的實現可以採用以下幾種方式 採用奔騰 pentium 四代機實現 h.264 編譯碼最早就是在 pc 平台上實現 的 由於簡單易開發 基於該平台的研究得到最多 jvt 的 jm 參考 是就是基於 pc 平台的 此方案的優點是利用當前最新的 pc 資源 以及較強的軟體工具 in...
H 264編碼之DCT變換公式推導
dct變換是一種與fft變換緊密相連的數 算,當函式為偶函式是,其傅利葉展開式只有余弦項,因些稱為 余弦變換,其離散化的過程稱為dct 離散余弦 變換。下面我們就推導下h.264的4x4整數dct公式。首先給出dct變換的定義,其變換公式可以寫成 y axa t 這裡a為單位正交距陣,滿足 i aa...
H264系列(4) h264協議幀頭資料解析
對原作者表示感謝!h264常見的幀頭資料為 00 00 00 01 67 sps 00 00 00 01 68 pps 00 00 00 01 65 idr 幀 00 00 00 01 61 p幀 等等,那麼他們代表的意思是什麼呢?start code有兩種,四個位元組的 00 00 00 01 和...