H.266/VVC中的变换编码

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/BigDream123/article/details/102599000

H.266/VCC的变换编码

1. 高频调零的大尺寸块变换

2.多核变换选择(MTS)

3. 子块变换Subblock Transform (SBT)

 4.低频不可分二次变换Low-Frequency Non-Separable Transform (LFNST)

4.1 Reduced Non-separable transform

4.2 LFNST transform selection

​​​​​​​4.3 LFNST index Signaling and interaction with other tools

5.Joint coding of chroma residuals(联合色度残差编码)


1. 高频调零的大尺寸块变换

VTM6中,支持大块大小的尺寸变换,最高尺寸可达64x64,主要用于高分辨率的视频,如1080P和4K序列。

当宽度或者高度为64时,将高频系数归零,只保留低频系数。例如对于尺寸为MxN的变换块(M为块宽,N为块高),若M=64时,只保留变换块左32列;若N=64时,只保留变化块的前32行。

当使用transform_skip模式时,使用整个块,不归零任何值。

VTM还支持SPS中可配置的最大转换大小,这样编码器就可以根据具体实现的需要灵活地选择16-长度、32-长度或64-长度的转换大小

2.多核变换选择(MTS)

除了在HEVC中使用的DCT-II外,还使用了多重转换选择(MTS)方案来对帧内和帧间编码块进行残差编码。它使用来自DCT8/DST7的多个选定转换。新引入的变换矩阵是DST-VII和DCT-VIII。

MTS用于帧内和帧间的亮度块(宽度高度均小于32

MTS_INTRA_MAX_CU_SIZE = 32//Max Intra CU size applying EMT

MTS_INTER_MAX_CU_SIZE = 32//Max Inter CU size applying EMT

在SPS级别分别具有单独的启用标志。当在SPS中启用MTS时,会发出CU -level flag来标志是否启用了MTS。

当满足下列条件时候,会发出CU level flag:

  1. 宽度和高度均小于32
  2. Cbf  flag = 1

如果MTS CU flag等于0,则在垂直和水平方向上使用DCT-2;如果MTS CU flag等于1,则再用两个标志来分别表示水平和垂直方向的变换类型。

为了降低大尺寸DCT-8和DST-7的复杂性,当编码块尺寸(高度或者宽度)为32时,则将高频系数归零,即只保留16x16低频区域的系数。

编码块的残差部分也可以使用变换跳过模式。为了避免语法的冗余,当MTS CU flag不等于0时,编码跳过模式标志不会被传输。(将变换跳过(TS)和多重转换选择(MTS)信号统一到一个TU语法元素中。这将TS变换跳过)限制为luma变换块,并将其扩展为转换块大小为32x32JVET-M0464

通过去掉了帧内模式和块形状的依赖项,统一了ISP和隐式MTS的转换选择。

(1)       当前块是ISP模式;

(2)       或者当前块是intra块,且intra和inter的显式MTS都处于on状态

那么只有DST7用于水平和垂直转换核心,大小限制不变(宽度或者高度大于等于4且小于等于16)(该方法消除了ISP模式隐式变换核心选择与intra模式之间的依赖关系)。(JVET-N0866)

In VVC Draft 4.0 [1], if MTS is enabled in the high level syntax, the MTS transform cores could be implicitly selected for intra block under the condition:

•       If the current block is using ISP mode

•       Otherwise, if the current block is intra block and both intra and inter explicit MTS is disable in the sequence level (intra shape adaptive)

其中ISP隐式变换核选择基于当前块intra模式,intra shape adaptive变换核选择基于当前块形状(block shape);由于这两种情况都只用在Intra block并且都是用相同尺寸限制的DCT-2和DST-7,所以可以将这两种情况转换核的选择统一起来。

在变换矩阵精度方面,采用8位主变换核。因此,HEVC中使用的所有转换核保持不变,包括4点DCT-2和DST-7、8点、16点和32点DCT-2。其他变换核包括64点DST-2、4点DST-8、8点、16点、32点DST-7和DST-8,使用8位主变换核(JVET-L0285)。

注意,当LFNSTMIP激活当前CU时,隐式MTS转换被设置为DCT2而且,当为帧间编码块启用MTS时,仍然可以启用隐式MTS(JVET-O0541)。

3. 子块变换Subblock Transform (SBT)

Subblock Transform用于帧间预测的CU在这种转换模式下,只对残差编码块中的一个子块进行编码。

当cu_cbf = 1时,cu_sbt_flag可能会发出信号以指示是否对整个残差块或残差块的一部分进行编码。若是对整个残差块进行编码,则进一步解析帧间MTS信息来确定CU的转换类型。若是对残差块的一部分进行编码, 则残差块的一部分采用自适应变换编码,另一部分归零。

当SBT用于一个帧间编码的CU时,SBT类型和SBT位置信息在比特流中被发送。

两种SBT类型和两种SBT位置,对于SBT-V(或SBT-H), TU宽度(或高度)可能等于CU宽度(或高度)的一半,或CU宽度(或高度)的1/4,导致2:2分割或1:3/3:1分割。2:2的分割类似于二叉树(BT)的分割,而1:3/3:1的分割类似于不对称二叉树(ABT)的分割。在ABT分裂中,只有小区域包含非零残差,大区域残差归零。如果在亮度样品中一个CU的尺寸(高度或者宽度)是8,那么沿着该尺寸的1:3/3:1分割是不允许的。一个CU最多有8种SBT模式。

在SBT-V和SBT-H中,亮度变换块(luma transform blocks)的转换核选择与位置有关,而色度变换块(chroma transform blocks)的转换核总是使用DCT-2对于亮度块,SBT-H和SBT-V的两个位置与不同的变换核有关。例如,SBT-V位置0的水平和垂直转换分别为DCT-8和DST-7。

当残差TU的一侧大于32时,两个维度的变换均设置为DCT-2因此,the subblock transform联合指定了残差块的TU tiling、cbf和水平、垂直转换核类型。

变量maxSbtSize指定可以应用SBT的最大CU大小(在SPS中发出信号控制)。在VTM6中,对于HD和4K序列,编码器将maxSbtSize设置为64;对于其他较小的分辨率序列,maxSbtSize设置为32。

SBT不适用于以组合帧内帧间模式或TPM模式编码的CU。

 4.低频不可分二次变换Low-Frequency Non-Separable Transform (LFNST)

在VVC中,将LFNST(低频不可分变换),即所谓的约化二次变换,应用于正向一次变换与量化(在编码器处),去量化与反向一次变换(在解码器侧)之间。

二次正变换和逆变换是一个独立于主变换的过程步骤:

对编码器:

首先进行主正变换,然后进行二次正变换和量化,最后进行CABAC位编码

对译码器:

先进行CABAC位解码和反量化,然后进行二次逆变换,再进行一次主逆变换。

注意:LFNST仅使用于帧内intra coded TU(亮度和色度)

LFNST中使用的不可分变换的应用,在下述以输入为例进行了描述。要应用4x4 LFNST,输入块X为4x4

先把他变成向量形式:

不可分离的变换计算F ⃑=T∙X ⃑, F ⃑表示变换系数向量, T是一个16 x16变换矩阵. 使用的扫描顺序块(水平、垂直或对角)16 x1系数向量F ⃑随后重新组织4 x4块。索引越小的系数将与扫描索引越小的系数放在4x4系数块中。

 

Reduced Secondary Transform (RST) Algorithm Description(JVET-N0193)

Encoder Side – 5 cases

将4x4原正变换系数输入到二次正变换中

[8x16 kernel] * [16x1 prim]  [8x1 sec]

二次正向变换输出([8x1])按残差编码扫描顺序排列,其他8个系数都设置为0。

比特流不包含来自主正向变换的任何系数。

只有顶部/左侧4x4主正向变换系数(如16x1)被输入到二次前向变换。

[16x16 kernel] * [16x1 prim]  [16x1 sec]

二次正变换输出也是4x4系数块(上/左4x4内4x8/8x4)

比特流包含max。4x4二次正变换系数和4x4主正变换系数。

两个相邻的左上角4x4主正向变换系数(两个16x1)被输入到二次正向变换。

Two times of [16x16 kernel] * [16x1 prim]  two [16x1 sec]

二次正变换输出是两个相邻的左上角4x4系数块。

比特流包含max。两个4x4块的二次正变换系数和剩余的主正变换系数

O次会议中(O0094):

在本核心实验中,LFNST仅适用于第一系数子组(第一4x4子组)外的所有系数均不显著的情况。因此,当应用LFNST时,所有的主变换系数必须为零。这允许LFNST指数信号在最后一个有效位置上进行调节,从而避免了当前LFNST设计中额外的系数扫描,这只需要在特定位置检查有效系数。LFNST的最坏情况处理(就每像素乘法而言)将4x4和8x8块的不可分离变换分别限制为8x16和8x48变换。在这些情况下,当使用LFNST时,最后有效扫描位置必须小于8,对于其他小于16的尺寸。对于形状为4xN、Nx4和N > 8的块,建议的限制意味着LFNST现在只应用一次,而只应用于左上角的4x4区域,即将第一4x4子组外的所有主系数都归零。

 

8x8主正向变换系数被输入到二次正向变换中。

[8x64 kernel] * [64x1prim]  [8x1 sec]

二次正向变换输出([8x1])按残差编码扫描顺序排列。其他48个系数都设置为0。

比特流不包含来自主正向变换的任何系数

Top/Left/Top- Left 8x8主正向变换系数被输入到二次正向变换中。

[16x64 kernel] * [64x1 prim]  [16x1 sec]

二次正变换输出只有一个4x4系数块([16x1]; 8x16/16x8/>=16x16 TU的左上角4x4系数块)

比特流包含max。4x4二次正变换系数和3个8x8主正变换系数。

在位流的左上角8x8块中,基本上是将3个4x4系数归零。

Decoder Side – 5 cases

Case 1:4x4

位流包含8个系数,是二次逆变换的输入

[16x8 kernel] * [8x1 from bitstream]  [16x1 insert into prim]

二次逆变输出也是4x4系数块([16x1])。

位流不包含来自主变换的任何系数。

 

Case 2:4x8、8x4

位流包含16个系数,被输入到二次逆变换。

[16x16 kernel] * [16x1 from bitstream] ->[16x1 insert into prim]

二次逆变换输出只有一个4x4系数块(上/左4x4内4x8/8x4)

Bitstream包含了原始变换剩下的一个底部/右侧4x4的系数。

 

Case 3: 4xN, Nx4(N>=16)

位流包含32个系数(两个16x1),并输入到二次逆变换。

Two times of [16x16 kernel] * [16x1 from bitstream]-> two [16x1 insert into prim]

二次逆变输出是两个相邻的左上角4x4系数块。

Bitstream包含了原始变换剩下的底部/右侧4x4系数块。

 

Case 4:8x8

位流包含8个系数,是二次逆变换的输入。

[64x8 kernel] * [8x1 from bitstream] ->[64x1 insert into prim]

二次逆变换输出是一个8x8系数块([64x1])。

位流不包含来自主变换的任何系数。

 

Case 5: 8x16,  16x8,  and  >=16x16

位流包含16个系数,被输入到二次逆变换。

[64x16 kernel] * [16x1 from bitstream] –>[64x1 insert into prim]

二次逆变输出只有一个8x8系数块(左上角8x8).

Bitstream包含主变换剩下的8x8系数块。

基本上将位流左上角8x8块内的所有其他系数归零。

 

RST Kernel

Encoder:

–     2 base kernels : 16x16 and 16x48

1.      [16x16 kernel]

2.      [16x8 kernel], top-left corner subsampled from 16x16 base kernel.

3.      [16x64 kernel]  简化为–》[16x48 kernel]

4.      [8x64 kernel], top-left corner subsampled from 16x64 base kernel.-》简化为 [8x48 kernel] top-left corner subsampled from 16x48 base kernel.

 

Decoder:

–     The 2 decoder base kernels are the transpose of the corresponding encoder base kernels.

1.      [16x16 kernel]

2.      [16x8 kernel], top-left corner subsampled from 16x16 base kernel.

3.      [64x16 kernel] 简化为–》[16x48 kernel]

4.      [64x8 kernel], top-left corner subsampled from 64x16 base kernel. -》简化为 [8x48 kernel] top-left corner subsampled from 16x48 base kernel.

4.1 Reduced Non-separable transform

为了减少计算复杂度和存储变换系数的存储空间,需要减少不可分变换矩阵的维数,。因此,LFNST采用了约简不可分变换(RST)方法。约简不可分变换的主要思想是将一个N(对于8x8 NSST, N通常等于64)维向量映射到另一个空间中的一个R维向量,其中N/R (R < N)是约简因子。因此,RST矩阵由NxN矩阵变为R×N矩阵,具体如下:

其中变换的R行是N维空间的R基底。RT的逆变换矩阵是它的正变换的转置。

Forward and inverse Reduced Transform

对于8x8 LFNST,采用4的约简因子,将传统的8x8不可分变换矩阵对应的64x64变换矩阵约简为16x48变换矩阵。因此,解码器端使用48×16的逆RST矩阵,在8×8的左上区域生成核心(主)变换系数。

当使用相同的转换集配置来应用16x48矩阵而不是16x64矩阵时,每个矩阵从左上角的8x8块(不包括右下角的4x4块)中的三个4x4块中获取48个输入数据。在维数减少的帮助下,存储所有LFNST矩阵的内存使用量从10KB减少到8KB,性能有了合理的下降。

为了降低复杂性,LFNST仅适用于第一系数子组(第一4x4子组)外的所有系数都不显著的情况。因此,当应用LFNST时,所有的主变换系数(Primary Coefficients)必须为零。这允许LFNST索引信号在最后一个有效位置上进行调节,从而避免了当前LFNST设计中额外的系数扫描,这只需要在特定位置检查有效系数。

LFNST的最坏情况处理(就每像素乘法而言)将4x4和8x8块的不可分离变换分别限制为8x16和8x48变换。在这些情况下,当使用LFNST时,对于其他小于16的尺寸,最后有效扫描位置必须小于8。对于形状为4xNNx4N > 8的块,建议的限制意味着LFNST现在只应用一次,并且只应用于左上角的4x4区域。当应用LFNST时,所有的主系数都为零,因此在这种情况下,主变换所需的操作数量减少了。测试LFNST变换时候,从编码器的角度,量化系数显着简化。

​​​​​​​4.2 LFNST transform selection

LFNST中总共有4个变换集,每个变换集有2个不可分变换矩阵。从内部预测模式到变换集的映射被预先定义,如表3-11所示。

IntraPredMode

Tr. set index

IntraPredMode < 0

1

0 <= IntraPredMode <= 1

0

2 <= IntraPredMode <= 12

1

13 <= IntraPredMode <= 23

2

24 <= IntraPredMode <= 44

3

45 <= IntraPredMode <= 55

2

56 <= IntraPredMode<= 80

1

81 <= IntraPredMode<= 83

0

如果当前块使用三种CCLM模式之一(INTRA_LT_CCLM、INTRA_T_CCLM或INTRA_L_CCLM) (81 <= predModeIntra <= 83),则将当前色度块选择变换集0。

对于每个变换集,所选的不可分离的二次变换矩阵进一步由显式标记的LFNST索引指定(两个变换矩阵的索引为0或1)。在变换系数之后,索引在每一个CU内部以比特流的形式表示。

​​​​​​​4.3 LFNST index Signaling and interaction with other tools

LFNST仅在第一系数子组(第一4x4子组)外的所有系数均不显著时才适用,所以LFNST的索引编码取决于最后一个显著系数的位置(O0472)。

LFNST索引是上下文编码的,但不依赖于内部预测模式,只有第一个bin是上下文编码的。

LFNST适用于亮度和色度帧内CU在帧内和帧间切片 (is applied for intra CU in both intra and inter slices, and for both Luma and Chroma.)。如果启用了对偶树,则分别发出Luma和Chroma的LFNST索引信号。对于层间切片(双树被禁用),单个LFNST索引被标记,并用于Luma和Chroma。

选择ISP模式时(在第13次JVET会议上,采用了Intra子分区(Intra Sub-Partitions, ISP)作为一种新的Intra预测模式)LFNST将被禁用,而RST索引将没有信号,因为即使将RST应用到每个可行的分区块,性能的改进也是有限的。此外,对isp预测的残差禁用RST可以降低编码的复杂性。

选择MIP模式时,LFNST也被禁用,并且索引没有信号。

LFNST允许的最大大小被限制为64x64

LFNST仅在DCT2中启用。LFNST can be used with DCT-2 only (O0368)

5.Joint coding of chroma residuals(联合色度残差编码)

联合色度编码模式的使用(激活)由TU-level flag tu_joint_cbcr_residual_flag表示,所选模式由色度CBFs隐式表示。如果一个TU的色度CBFs中的一个或两个都等于1(tu_cbf_cb或者tu_cbf_cr),则显示tu_joint_cbcr_residual_flag。

在PPS和slice head中,联合色度残差编码模式下的色度QP偏移值与常规色度残差编码模式下的色度QP偏移值不同。这些色度QP偏移值用于推导使用联合色度残差编码模式编码的块的色度QP值。

当相应的联合色度编码模式(表中的模式2)在TU中激活时,在对该TU进行量化和解码时,将该色度QP偏移添加到应用的luma派生色度QP中(the applied luma-derived chroma QP)。对于其他模式(表中的模式1和模式3),色度QPs的推导方法与常规Cb或Cr块相同。

传输转换块的色度残差(resCb和resCr)的重构过程如表所示。这种模式被激活时,一个联合色度残差块(resJointC [x] [y]在表3 - 12)被传递过来,然后通过考虑各种信息(比如tu_cbf_cb tu_cbf_cr, CSign)推导出残差块Cb (resCb)和残差块Cr (resCr)。

在编码器端,联合色度分量的推导如下。根据模式(如上表所示),编码器产生resJointC{1,2}如下:

若mode = 2(重构后的单个残差Cb = C, Cr = CSign * C),则根据

resJointC[ x ][ y ] = ( resCb[ x ][ y ] + CSign * resCr[ x ][ y ] ) / 2.

否则,若mode = 1(重构后的单个残差Cb = C, Cr = (CSign * C) / 2),则根据

resJointC[ x ][ y ] = ( 4 * resCb[ x ][ y ] + 2 * CSign * resCr[ x ][ y ] ) / 5.

否则(mode = 3,比如重构后的单个残差Cr = C, Cb = (CSign * C) / 2),根据

resJointC[ x ][ y ] = ( 4 * resCr[ x ][ y ] + 2 * CSign * resCb[ x ][ y ] ) / 5.

tu_cbf_cb

tu_cbf_cr

reconstruction of Cb and Cr residuals

mode

1

0

resCb[ x ][ y ] = resJointC[ x ][ y ]
resCr[ x ][ y ] = ( CSign * resJointC[ x ][ y ] ) >> 1

1

1

1

resCb[ x ][ y ] = resJointC[ x ][ y ]
resCr[ x ][ y ] = CSign * resJointC[ x ][ y ]

2

0

1

resCb[ x ][ y ] = ( CSign * resJointC[ x ][ y ] ) >> 1
resCr[ x ][ y ] = resJointC[ x ][ y ]

3

上述三种联合色度编码模式仅在I片上受支持。在P和B片中,只支持模式2。因此,在P和B片中,语法元素tu_joint_cbcr_residual_flag仅在色度cbfs都为1时才存在(即tu_cbf_cb=1且tu_cbf_cr=1)。注意,在tu_cbf_luma和tu_cbf_cb的上下文建模中删除了转换深度。

猜你喜欢

转载自blog.csdn.net/BigDream123/article/details/102599000