H.266 JEM7.0 变换之二(模式相关的不可分二次变换 MDNSST)

模式相关的不可分二次变换

mode-dependent non-separable secondary transform (MDNSST)
JEM中在编码端的前向核变换以及量化中,以及解码端的反量化和反核变换中使用MDNSST。即先通过AMT/SDT得到初等变换系数,再经MDNSST操作对初等变换系数进行进一步能量集中的操作。

保证低复杂度

MDNSST只对初等变换得到的低频率系数使用。如果变换系数块的宽和高大于等于8,对块的左上8x8区域使用8x8不可分二次变换NSST。否则,如果宽或者高等于4,对左上min(8,W) x min(8,H)区域使用4x4 NSST。对色度亮度均适用。
NSST的一个矩阵乘法实现如下。使用不可分变换,4x4输入块X为:
H.266 JEM7.0 变换之二(模式相关的不可分二次变换 MDNSST)
不可分变换计算为:F=TX
其中,矢量F代表变换系数矢量,T是一个16x16的变换矩阵。16x1的系数矢量F在随后的4x4块使用扫描顺序中(水平、垂直或者对角)被重新排序。有较小索引的系数将于4x4系数块中较小扫描索引一起存放。JEM中,蝶式实现的Hypercube-Givens变换(HyGT)代替矩阵乘法来降低不可分变换的复杂度。

模式相关的变换核选择

对4x4和8x8块而言,共有35(根据模式所分的类别数量)x3(NSST候选数量)种不可分二次变换。帧内预测模式到变换集合的映射由下表定义,在JEM中映射表为数组g_NsstLut[NUM_INTRA_MODE-1]。对于大于34的帧内预测模式,变换系数块在编码器/解码器的二次变换之前/之后进行转置。
H.266 JEM7.0 变换之二(模式相关的不可分二次变换 MDNSST)
对于每个变换集合,选择的NSST候选会通过传输的CU级别的MDNSST索引进一步明确。每个帧内CU在系数变换和截断二进制之后,索引每次由一个比特传输。截断值在planar及DC模式下为2,角度模式下为3。MDNSST索引只在CU中有多于一个的非零系数时传输。如果不传输,默认值为0。语法元素值若为0表示二次变换在当前CU中没有使用,值1-3表示使用集合中的哪个二次变换。截断二进制的宏为:JVET_C0042_UNIFIED_BINARIZATION
JEM中,MDNSST对一个transform skip模式的块是不使用的。当CU的MDNSST索引被传输且不为0,MDNSST在块中由transform skip模式编码的CU内容中不使用。当块中CU的所有内容均由transform skip模式编码或者非transform skip模式的CBs的非零系数的数量小于2,CU的MDNSST索引不传输。
JEM中,MDNSST也可以影响模式相关的参考帧内平滑mode dependent reference samples intra smoothing(MDIS)。当块的MDNSST索引为0时,MDIS不可用(无参考帧平滑)。当块的MDNSST索引不等于0,使用HEVC的MDIS。这个规则对除去planar模式的所有帧内预测模式均可用,planar使用PDPC。JEM中,不对32x32的帧内块使用强帧内滤波。

编码端加速

在编码端,使用CU级别的RD check来选择NSST索引。对于一个帧内编码的CU,CU级别的RD check将NSST的索引值作为循环索引,循环四次。此操作在xCompressCU()中完成。同时,为了加速编码速度,采用如下操作:

  1. 循环中使用早期停止。在当前CU的NSST索引值较小没有非零变换系数时,跳过NSST索引较大值的RD check。
  2. 每个NSST索引的帧内模式决策包括两个阶段:粗模式决策(rough mode decision,RMD)阶段以及RDO阶段。在RMD阶段,基于SATD的失真从67种帧内预测模式中选出三种。这个过程调用两次(一次NSST索引等于0,一次NSST索引为非零),而不是四次。对所有非零NSST索引,一个帧内预测模式的不同NSST索引的SATD应该相等。所以,对所有非零NSST索引,RMD过程只需要进行一次(NSST索引为1),且结果被另一个非零NSST索引重新使用。两阶段的过程在函数estIntraPredLumaQT()中。

代码实现

MDNSST主要实现在函数transformNxN()中:
1. 获取NSST索引;
2. 获取主变换系数
3. 获取帧内预测模式
4. 根据块尺寸调用函数FwdNsst8x8()或者FwdNsst4x4()选择HyGT
5. 讲矩阵重新排序为MxN矩阵

基于HyGT的不可分变换

Hypercube-Givens变换(HyGT)在不可分二次变换中使用。这个正交变换的基本元素是Givens旋转,是由正交矩阵G(m,n,θ)定义的:
H.266 JEM7.0 变换之二(模式相关的不可分二次变换 MDNSST)
其几何表示为:
H.266 JEM7.0 变换之二(模式相关的不可分二次变换 MDNSST)
HyGT是通过组合超立方体排列中的Givens旋转集来实现的。如图为16元素的HyGT蝶形流程图(4x4不可分变换)。假设N是2的幂,一个HyGT循环被定义为log2(N)次,在每个循环中,矢量m和n中的索引通过log2(N)维超立方体的边界定义,依次沿着每个方向。
H.266 JEM7.0 变换之二(模式相关的不可分二次变换 MDNSST)
为了得到较好的压缩率,使用多余一次的HyGT,如下图。R轮HyGT组成了一个满不可分二次变换,可能包含一个可选的置换通道,用来根据变换系数的变化量对其进行排序。JEM中,对4x4二次变换使用2轮HyGT,对8x8二次变换使用4轮HyGT。
H.266 JEM7.0 变换之二(模式相关的不可分二次变换 MDNSST)