【视频编码\VVC】变换编码基础知识及标准设计相关参数

变化编码的基础知识

定义:变换编码是将以空间域像素形式描述的图像转换至变换域,以变换系数的形式加以表示。

大部分图像都包含较多平坦区域和内容变化缓慢的区域,使得图像能量在空间域的分散转换为变换域的相对集中分布,从而达到空间去冗余的目的。

变换概述

选用DCT变换的原因:DCT形式与输入信号无关并且存在快速实现算法,并且性能接近K-L变换。

  • H.264第一次使用了整数DCT
  • H.265沿用了整数DCT,进行了不同尺寸的变换形式,还引入了离散正弦变换
  • H.266同时采用了DCT和DST,并且采用了多种基函数的变换形式,拓展了变换的尺寸(可分为8种类型,但是DCT-2因其较低的计算复杂度和相对高的编码效率,一直是核心变换技术)

离散余弦变换

下图给出了二维4X4的DCT-2基图像。当k=0,l=0的时候,水平分量和垂直分量的频率都等于10,此时图像平坦,在任何地方上都没有灰度值的变化。右下角表示像素灰度在水平方向和垂直方向发生连续变化。不同类型的DCT,其基图像不同,与原图像越相似,变换性能越好。

【视频编码\VVC】变换编码基础知识及标准设计相关参数_第1张图片

如果像素块包含较多细节纹理信息,则较多能量分布在高频区域。

实际上,大多数图像包含更多的低频分量,并且可以利用人眼对图像高频信息相对不敏感的特性,对低频系数进行较为精细的量化和处理,更好的压缩图像。

整数离散余弦变换

余弦函数的使用使DCT过程必须处理浮点数,这样不可避免会带来舍入误差导致编解码失配。并且整型使得DCT处理速度大大提高。

二维DCT 可以分解为两个一维DCT,将变换矩阵整数化,同时为了保持正交性,对整数化后的元素进行微调。同时乘以修正系数,防止值的扩大。乘法操作在量化中实现。

  • VVC中使用了8、16、32、64这四种DCT-2
  • 4、8、16、32这四种DCT-8

蝶形算法

哈达玛变换

H.264种规定了哈达玛变换,与离散余弦变换相比,哈达玛变换仅包含加法运算,可使用递归形式快速实现,并且正反变换具有相同的形式,算法复杂度低,且容易实现。

但自H.265起,标准不在使用该变换,但其在图像编码中有其他的应用,常用于计算残差信号的SATD,指将残差信号进行哈达玛变换后,再求各元素的绝对值之和。根据实验,发现残差的SATD与其经过DCT后的系数的绝对值之和十分的接近,说明SATD能在一定程度上反映残差再频域中的大小。因此被广泛使用在快速模式的选择上。

VVC中的变换编码

VVC摒弃了独立于编码单元CU的变换但与TU,即TU与CU一致,除非CU尺寸大于最大变换块尺寸。并且支持MxN的变换块。

采用的新技术

  • 多核选择MTS,4种变换核的组合,以适应图像的不同残差特性
  • 子块变换SBT,只针对CU的子块进行变换和后续处理,其他部分残差信号直接设置为0
  • 色度残差联合编码JCCR,针对两个色度分量进行旋转变换处理,去除局部性
  • 低频不可分变换LFNST,采用特定的变换矩阵对变换系数进行二次变换

主变换

多核变换选择

收预测模式的影响,预测残差会有不同的特性。通常情况下,帧内残差随着与参考点距离的增大而增大,越接近CU边缘越大。用不同的变换核处理不同的残差。

多核变换选择引入了4种变换核组合,与传统DCT-2一起作为主变换的候选,以适应不同内容特性。

高频调零

将变换后的部分高频系数设置为0,仅保留低频系数。

子块变换

当同一CU包含不同内容的时候哦,运动补偿不同,包含的残差信息不同。所以允许只对部分区域的预测残差进行变换。将CU划分为两个TU,只对其中一个进行变换、量化,另一个预测残差强制设置为0。总共有8种SBT模式。

色度残差联合编码

在传统变换之前,先对CB\CR分量使用分量间变换技术,对相同位置的两个色度分量进行变换,去除色度分量间的相关性。旋转变换。

二次变换

二次变换只针对帧内模式,并且主变换为DCT-2的情形,只对主变换系数的低频分量进行不可分变换。因为随着预测模式的变化,尤其是使用方向预测的时候,预测残差具有方向性,变换后的低频分量依旧具有

H.266引入了一种低频不可分变换LFNST技术。

  • 不可分变换F=T*Y_j
  • 只处理主变换系数的低频部分,剩余主变换系数被置0
  • 为了降低计算复杂度、减少存储变换矩阵所需要的空间,采用了简化不可分变换的方法RT,将一个N维向量映射到不同空间的R维向量上
  • 变换核是通过离线训练的方式得到的。因为不同的预测模式有不同的变换集,所以需要对35个帧内预测模式进行训练。最终采用了4个变换集,每个包含2个变换核的方案。

VVC变换编码的标准设计与相关参数

主变换的标准实现

多核变换选择

多核变换选择MTS分为隐式MTS和显式MTS,区别在于隐式MTS根据固定规则判断确定MTS变换核。

  • 显式MTS

sps层上,sps_mts_enabled_flag表示是否允许使用MTS

sps_explicit_mts_intra_enabled_flag帧内显式MTS

sps_explicit_mts_inter_enabled_flag帧间显式MTS

  • 隐式MTS

满足下列3个条件种任意一个就会启用隐式MTS

当前CU的ISP为水平划分或垂直划分

当前CU使用了SBT,并且CU的宽和高最大值不超过32

帧内显示MTS被禁用,CU预测模式为帧内预测模式,不启用低频不可分变换,且不启用帧内MIP。

启用隐式MTS的时候,使用的变换核也按照一定规则选取。

启用显示MTS,CU层的mts_idx标识MTS所选最优变换核。

【视频编码\VVC】变换编码基础知识及标准设计相关参数_第2张图片

相关语法元素

sps_transform_skip_enabled_flag是否启用变换跳过模式

sps_log2_transform_skip_max_size_minus2变换跳过模式的变换块最大尺寸为以2为底的对数值减2,取值范围0-3

sps_max_luma_transform_size_64_flag亮度块最大变换尺寸式64还是32

transform_skip_flag当前变换块是否启用变换跳过模式

子块变换

sps_sbt_enabled_flag子块变换SBT启用标识

CU层的cu_sbt_flag标识当前CU是否进行SBT

子块划分具有垂直划分(SBT-V)和水平划分(SBT-H)两种方式。有1:2、1:3、2:2的划分。划分后的TU有两种位置,即position0(左块和上块)和position1(右块和下块)。

【视频编码\VVC】变换编码基础知识及标准设计相关参数_第3张图片

2:2的划分宽度要大于等于8,1:3的CU要大于等于16。连读块的SBT变换核由子块划分方式和所选位置决定。

相关语法元素

cu_sbt_quad_flag标识当前子块的划分方式,1表示1:3划分,0表示2:2划分

cu_sbt_pos_flag标识当前选择的子块位置,1表示第2个子块,0表示第一个子块

cu_sbt_horizontal_flag当前子块划分当时,1表示水平划分,0表示垂直划分

色度残差联合编码

sps_joint_cbcr_enabled_flag表示视频序列是否启用色度残差俩呢编码JCCR。帧内CU的tu_cb_coded_flag\tu_cr_coded_flag至少一个为1,如果都为1,传输tu_joint_cbcr_residual_flag

VVC支持6种旋转变换,用m来定义6种角度模式。旋转角度的正负由ph_joint_cbcr_sign_flag表示。

二次变换的标准实现

VVC支持8x8\4x4两种尺寸的LFNST

  • 使用哪种尺寸的LFNST由TU尺寸隐式判断
  • 变换集的选择由帧内预测模式隐式判断
  • 变换核的选择由显式信号1fnst_idx决定,标识是否使用LFNST及使用时的变换核索引

选择流程如下

【视频编码\VVC】变换编码基础知识及标准设计相关参数_第4张图片

帧内预测模式与变换集一一对应,给出索引PredModeIntra标志帧内预测模式,取值为【-14,80】时的对应变换集。如果包含宽角度在内,为【-14,83】。

在sps层上,sps_1fnst_enabled_flag标识是否使用LFNST,1表示启用。

你可能感兴趣的:(视频编码,音视频,视频编解码,视频编码,h.266,VVC,笔记)