新的一年,好好科研!!!!!!
變換編碼用於預測後的殘差塊上,變換後得到的變換系數中低頻分量集中在塊的左上角高頻分量在右下角。
大尺寸變換塊高頻係數置零
在VTM5中,變換編碼的塊最大尺寸可達64x64,這對於高分辨率的視頻(例如1080p和4K視頻)非常有用。對於尺寸(寬或高,或寬和高)達到64的變換塊,將其高頻係數置零隻保留其低頻係數。例如,對於MxN的變換塊,M是塊的寬N是塊的高,當M=64時只保留左邊32列其他置零,當N=64時只保留上邊32行其他置零。當對於大尺寸塊使用變換跳過模式時,則不對係數進行置零操作。
多變換模式選擇Multiple Transform Selection (MTS)
在數學上共有8種類型的DCT變換,在HEVC變換編碼中只使用了DCT-II變換。在VVC中提出了MTS技術,可以使用更多類型的變換。可選的變換核如下:
//EMT transform tags
enum TransType
{
DCT2 = 0,
DCT8 = 1,
DST7 = 2,
NUM_TRANS_TYPE = 3,
DCT2_EMT = 4
};
爲了保證變換矩陣的正交性,VVC中變換矩陣比HEVC中變換矩陣量化的更精確。爲了使變換系數的中間值保持在16bit範圍內,經過水平和垂直變換後,所有係數都爲10bit。
爲了控制MTS模式,SPS中爲幀內和幀間預測分別設立了標誌位。當SPS中MTS標誌爲真時,CU中需要設置一個標誌位表示是否使用MTS。MTS僅作用於亮度分量。只有當CU滿足下面條件時CU才需要傳輸MTS標誌位:
-
CU的寬和高都小於等於32;
-
CBF標誌位設爲1。
如果CU的MTS標誌位爲0,則在水平和垂直方向上都應用DCT2變換。如果CU的MTS標誌位爲1,則需要再設置兩個標誌位表示水平和垂直變換類型。具體類型如下:
enum MTSIdx
{
MTS_DCT2_DCT2 = 0,
MTS_SKIP = 1,
MTS_DST7_DST7 = 2,
MTS_DCT8_DST7 = 3,
MTS_DST7_DCT8 = 4,
MTS_DCT8_DCT8 = 5
};
如果當前塊使用ISP模式或當前塊是幀內預測塊且幀內和幀間MTS標誌位都打開,那麼水平和垂直方向變換核都使用DST7。
關於變換矩陣精度,初始變換核都使用8bit。因此HEVC中的變換核都保持不變,包括4-point DCT-2 和 DST-7, 8-point, 16-point 和 32-point DCT-2。其他變換64-point DCT-2, 4-point DCT-8, 8-point, 16-point, 32-point DST-7 and DCT-8也使用8bit變換核。
爲了減小大尺寸塊DST-7和DCT-8計算的複雜度,對於使用DST-7和DCT-8的變換塊尺寸寬或高,或寬和高)達到32時進行高頻係數置零操作。只保留左上角16x16的低頻係數。
和HEVC一樣,殘差塊也可以使用變換跳過模式。爲了避免語法冗餘,當CU的MTS_CU_flag不等於0時不需要傳輸變換跳過標誌位。只有當CU的寬和高都小於等於32時才允許使用變換跳過模式。
感興趣的請關注微信公衆號Video Coding