VVC变换编码(一)MTS

新的一年,好好科研!!!!!!

变换编码用于预测后的残差块上,变换后得到的变换系数中低频分量集中在块的左上角高频分量在右下角。

大尺寸变换块高频系数置零

在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

发布了87 篇原创文章 · 获赞 108 · 访问量 25万+

猜你喜欢

转载自blog.csdn.net/Dillon2015/article/details/103974120