H.266变换编码:自适应多核变换AMT

AMT代码学习:http://blog.csdn.net/lin453701006/article/details/79065885

在JEM中,变化编码的改进可以分为两个阶段,如下图。
这里写图片描述

第一阶段是使用自适应多核变换AMT或信号决定变换SDT(http://blog.csdn.net/lin453701006/article/details/79035202)的主变换,两者通过率失真优化进行选择。第二阶段是使用模式依赖的不可分二次变换MDNSST(http://blog.csdn.net/lin453701006/article/details/79030862)的二次变换。这里介绍第一阶段:自适应多核变换AMT。

多核变换理论

在HEVC中,使用的是DCT-II和4×4的DST-VII变换。在JEM中,使用了自适应多核变换AMT,用于帧内和帧间编码块的残差编码。AMT除DCT-II和DST-VII外,还使用了多种DCT/DST变换,包括DST-VII,DCT-VIII,DST-I和DCT-V,下图为AMT所使用的DST/DCT的基函数:
H.266变换编码:自适应多核变换AMT_第1张图片

为了保证变换矩阵的正交性,使用了比HEVC更高的变换矩阵精度。为了保证水平和垂直变换后的变换系数的中间值在16bit范围内,所有系数被右移相对HEVC增加2bit。

AMT只用于亮度残差,应用于宽高小于等于64的CU,通过CU级别的flag控制是否使用。当CU级别flag为0时,使用DCT-II编码残差。对于亮度编码块,启用AMT时,会额外传输两个flag用于指示水平、垂直变换是否被使用。在HEVC中,块的残差可以使用JEM中的transform skip模式编码。为了避免多余的语法编码,当CU级AMT启用时,不传输transform skip的flag。

帧内/帧间自适应多核变换

在帧内编码中,基于不同帧内方向预测模式的不同残差统计特性,使用了模式依赖的变换候选。如下定义了三种变换集,基于帧内预测模式进行选择。
H.266变换编码:自适应多核变换AMT_第2张图片
注:JVET-G1001写错了,比对代码后发现Transform Set 2应该是{DST7, DCT5}。

当CU级别AMT flag为1时,根据帧内预测模式从三种变换集中选出一个进行变换。
H.266变换编码:自适应多核变换AMT_第3张图片

在帧间编码中,所有帧间模式水平和垂直变换只使用DST-VII,DCT-VIII一组变换集。

在编码器端,5种变换候选(DCT-II,DST-VII,DCT-VIII,DST-I和DCT-V)需要使用率失真代价进行选择。为了降低AMT在编码器端的算法复杂度,JEM中使用了一些优化方法来加速。

在编码器端,每个CU级别的编码模式使用两遍编码,如下图所示。左图中,第一遍用于测试CU只使用DCT-II(AMT flag为0)的RD代价,第二遍进一步检测对CU使用多变换核时的RD代价。此外,可以看到两遍中的CU级别的编码模式是一致的。当第二遍检测多变换核的RD代价时,可以结合第一遍只使用DCT-II时的统计特性减少不必要的RD计算。右图中,当某个CU不使用AMT时的RD代价超过一定门限时(图中红色部分),将跳过第二遍多核变换操作。
H.266变换编码:自适应多核变换AMT_第4张图片

总结

H.266在原来HEVC的基础上加入了自适应多核变换AMT,可以使用多种变换核进行变换,帧内可以使用3种变换集,帧间只可以使用1种变换集。

你可能感兴趣的:(H.266/VVC,H.266/VVC视频编码技术)