HEVC量化

      HEVC系列 淺嘗輒止,不對具體公式推導進行深入的理解。 目標是 知道相關的一些概念,瞭解這麼做的原因,而不是莫名其妙的就一堆公式,一堆算法。HEVC中的一系列算法都是許許多多實驗室,研究機構的工作集合。別人都是經過數年的研究,實驗得到這麼一個結論。所以首先要知道模塊相關的基本概念,瞭解採用某些算法和方法的原因,對算法瞭解個結論就好了。

一、 量化

1.1 量化是什麼?

    量化(Quantization)是指將信號的連續取值(或大量可能的離散取值)映射爲有限多個離散幅值的過程,實現信號取值多對一的映射。在

1.2 爲什麼要加入量化? 

    視頻編碼中,殘差信號經過離散餘弦變換(DCT)後,變換系數往往具有較大的動態範圍。因此對變換系數進行量化可以有效地減小信號取值空間,進而獲得更好的壓縮效果。

1.3 量化怎麼做的? 

    就是將落在一個區間的值 用同一個值表示

如圖:x是輸入的信號,落在t7-t8區間的值就用x7表示。實際在編碼的時候不一定用的就是x7,有可能是x7對應的一個索引號y7.

 

簡單的量化例子均勻量化:

        給定一組信號,信號的最大值和最小值分別爲a,b。設定最後輸出M個量化值。那麼均勻量化的量化步長爲Qstep = (b-a)/M 。第一個區間[a, a+Qstep]的量化器輸出爲 a+Qstep/2。就是取這個區間的中點爲落在整個區間的值的輸出。

1.4 量化誤差怎麼衡量的?

量化誤差的衡量主要有四種方式:

  • 均方誤差(Mean Square Error, MSE)

  • 信噪比(Signal-to-Noise Ratio, SNR)

  • 和峯值信噪比(Peak-Signal-to-Noise Ratio,PSNR)

 

  • 率失真

      傳統的標量量化器是以失真最小爲目的進行設計的。而在視頻編碼中,編碼比特率同樣是一種影響編碼性能的因素,因此視頻編碼中的量化器設計需要權衡失真與比特率。同時考慮失真和比特率的公式如下

 

其中,D,量化時的失真,R爲量化時所需的編碼比特數。

1.5  HEVC中的量化

  • 量化

 HEVC的量化公式如下

其中,c 表示DCT係數,Qstep 表示量化步長,I爲量化後的值,floor(.)爲向下取整函數,f控制舍入關係。其中Qstep 跟QP是一一對應的關係,HEVC 中規定了52個量化步長 和 52 個量化參數對應,兩種之間的關係如下:

H.265/HEVC量化過程要同時完成整數DCT中的比例縮放運算。所以最後經過調整的量化公式爲:

 

  • 反量化

    反量化的公式

 

    其中L表示量化後的值,Qstep 爲量化步長,C表示反量化後得到的重構DCT係數。 同樣的H.265/HEVC量化過程要同時完成整數DCT中的比例縮放運算。所以最後經過調整的量化公式爲:

                                                         

 

1.6 量化參數怎麼編碼的?

    爲了避免直接編碼QP所耗費的比特數,量化的參數QP也採用了預測編碼的形式,只需要對實際QP與預測QP的差值進行編碼,以避免直接編碼QP所耗費的比特數。H.265/HEVC使用相鄰已編碼QG的信息來預測當前QG的QP。

  • QG

      其中QG是指將一幅圖像分成的固定大小(NxN)的正方形像素塊。其大小N由圖像參數集(PPS)指定,且必須處於最大CU與最小CU之間(包含最大與最小CU)。在一幅圖像中,QG爲固定大小,而CU是根據視頻內容自適應劃分出來的,因此可能出現-一個QG包含一個或多個CU的情形,也可能存在一個CU包含多個QG的情形。QG劃分的這個塊中用的是同一個QP值。

  • QP預測

例子: 利用空間上相鄰位置的QG的QP值來預測當前位置QG的QP值。

 

如圖: 其中A和B分別爲當前QG左側和上方的已編碼QG,則當前QG的預測QP可計算爲:

                                       predQP =(QP +QPg +1)>> 1

        雖然編碼的時候時按照QG這樣的大小去劃分進行QP的預測編碼的。 但是在解碼過程中,需要求得一個cu的QP大小。因爲解碼的基本單元時CU大小。 QP的解碼過程需要QP的預測值( predQP)和預測誤差( deltaQP)。CU QP的預測值和預測誤差 是根據QG的進行獲取到的。

最後QP值的計算 根據顏色分量的不同分爲

  • 亮度分量的QP計算

直接就是預測值和預測誤差進行相加可得如下:

QPy = predQP + deltaQP

  • 色度分量Cb和Cr的QP

分別計算如下:

QPcb =QPy + pps_qp_offset_cb + slice_qp offset_cr

QPcr =QPy + pps_qp_ offset_cr +slice_qp_ offset_cb

其中,pps_ qp_ offset 和slice_ qp_ offset 分別表示兩個色度分量在PPS層和

Slice層QP的偏移值。

其中Slice層QP的計算需要用到PPS中給定的初始QP( QPpps)以及Slice

層QP的偏移值(dQPslice), 計算如下:

sliceQP=QPpps + dQPslice

二、  相關的概念:

2.1 量化矩陣

    許多以往的圖像、視頻編碼標準都使用了量化矩陣(QuantizationMatrix,QM)技術,如JPEG、MPEG- -1、MPEG- 2、 MPEG- -4、H.264/AVC18-221等,其原理是對不同位置的係數使用不同的量化步長。例如,可以利用人眼對圖像視頻中的高頻細節不敏感的特徵,對高頻係數使用較大的量化步長,而對低頻係數使用較小的量化步長,這樣做能夠在保證一定壓縮率的同時提高圖像或視頻的主觀質量。其中,量化矩陣作用於比例縮放過程,其大小與TU相同,可爲4x4、8x8、16x16 和32x32。在比例縮放過程中,變換後的DCT (或DST)係數將與量化矩陣中對應位置的係數相除,所得的結果作爲量化模塊的輸入。

    H.265/HEVC標準允許使用兩種形式的量化矩陣。一種是標準推薦使用的量化矩陣(下文稱之爲“默認量化矩陣”),另一種是用戶自行定義的量化矩陣(下文稱之爲“自定義量化矩陣”)。對於默認量化矩陣,其矩陣元素值與TU大小、預測方式(幀內、幀間)都有關係。

2.2 碼流中的語法元素

與量化矩陣相關的語法元素在SPS和PPS中都有可能存在,當PPS中存在時,解碼器使用PPS中的信息,否則使用SPS中的信息。

scaling_ list_ enable_ flag: 該語法元素表明是否使用量化矩陣。

sps_ scaling_list_ data_ present_ flag: 該語法元素指出當前SPS中是否存在量化矩陣信息。

pps_ scaling_ list_ data_ present_ flag: 該語法元素指出當前PPS中是否存在量化矩陣信息。

scaling_ list_ pred_ mode_ flag: 該語法元素表明當前量化矩陣的獲取方式。若該值爲0,表明當前量化矩陣與之前存在的量化矩陣相同,可直接通過預測得到;若該值爲1,表明當前量化矩陣中的每個元素都需要重新計算得出。

三、總結

    變換模塊生成的DCT(或DST)係數將與量化矩陣中對應位置的係數相除,所得的結果作爲量化模塊的輸入。量化模塊進行量化,量化後生成的數據 輸入到下一個熵編碼的模塊中。

     而量化過程中最重要的參數QP 是通過綜合考慮編碼比特數和編碼的誤差來 從候選的QP中選取到。其中候選的QP是協議固定好的。QP的同樣需要通過預測編碼 然後差分編碼進行傳輸。QP預測的基本單元是固定的QG大小,當前的QG中的QP 通過周邊的QG的QP獲取到。而解碼端CU解析QP 是通過QG的相互關係 來從QG中獲取到。

 

 

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