视频编码器效率评价标准

1. PSNR

PSNR 定义为信号(原始图像)的最大可能功率与噪声功率之间的比率,在所考虑的场景中,噪声功率是通过有损压缩引入的。 对于解码图像分量 Id ,参考原始图像分量 I 的均方误差 (MSE) 计算如下:

其中M和N是图像分量的宽度和高度,并且图像分量可以是亮度样本或Cb或Cr色度样本。 PSNR 值计算如下:

其中 B 是图像样本的位深度。 这通常是针对每个帧单独计算的,然后对视频序列的帧进行平均。 由于是对数变换,这相当于使用帧 MSE 的几何平均值,当帧上存在高波动时,应严格考虑其影响。

对于通常由三个颜色分量组成的视频序列,可以报告仅使用亮度分量值计算的亮度 PSNR 值 (PSNRY ),或者可以使用某些加权标准计算使用所有三个分量的加权 PSNR 值 (PSNRW ) 。 采用 4:2:0 采样的内容的流行加权示例是:

一般来说PSNR大于45以上,人眼就比较难以察觉压缩后的图像与原始图像的差距。

2. Bjøntegaard Model

Bjøntegaard 模型已成为一种流行的工具,用于评估给定视频编解码器与参考编解码器在一定质量点或比特率范围内的编码效率。 Bjøntegaard delta (BD) 指标通常根据测试数据点的插值曲线计算为比特率差异或质量差异。

首先,定义两个编码器或编码器配置A和B。 例如,A和B可以代表两个不同的编解码器、同一编解码器的两个不同编码器、或者打开和关闭某个单一编码工具的同一编码器。

然后,为A和B选择一组支持点。一般支持点由量化参数(QP)定义,用于确定速率和失真之间的权衡。 通常,选择 i = 4 个支撑点。某些编码器使用恒定速率因子(CRF)。

然后,选择两个性能度量(PM),这两个度量通常是峰值信噪比(PSNR)和比特率R。使用编码器配置k∈{A,B}和由i索引的所选支持点集对输入视频进行编码。然后,将所得八个压缩视频的两个PM用于后续计算。PM值必须按单调顺序排列。

为确定两个 PM 之间的函数关系,需要决定在插值函数中将哪个 PM 用作因变量,哪个用作自变量。 例如,在 RD 比较的情况下,生成函数 R(D) 或 D(R)。最常见的方法是将R(D)定义为自变量。 为了通用性并表明可以使用其他 PM,我们在下面分别使用术语 Pind(例如,PSNR)和 Pdep(例如,比特率)作为自变量和因变量。

比特率(即因变量)的值可能有多个数量级,因此,比特率被转换为对数域:

其中小写 p 表示对数域。 执行此步骤是为了确保平均 BD 速率值不会偏向更高的比特率。 请注意,某些实现使用自然对数而不是以 10 为底的对数。 然而,从理论上讲,在对数计算中使用不同的基数会导致相同的 BD 值,因为不同的基数对应于插值中的简单线性因子,观察到的差异是由浮点运算引起的数值不准确引起的。

然后,对两种编码器配置 k 进行分段多项式曲线插值,其中使用自变量 Pind(k, i) 和因变量 pdep(k, i) 的位置作为支持点。 所有 I -1 条插值曲线均由三阶多项式表示。 由此产生的分段多项式曲线可以写为:

其中 φ 是表示自变量的辅助变量,参数 ak,i、bk,i、ck,i 和 dk,i 是通过两种编码器配置的插值导出的。 常用的插值方法主要是三次样条插值(CSI)、分段三次 Hermite 多项式插值(PCHIP)和 Akima 插值。

然后,通过积分计算两个所得插值之间的差异。 选择上限和下限作为自变量(例如 PSNR)的重叠部分。 两组支撑点的边界由下式计算:

最后,两条插值曲线之间的平均相对差值,我们称之为 Bjøntegaard-Delta (BD) 或 ΔBD,由下式获得:

积分范围 ΔPind = Pind,high − Pind,low。 它描述了使用编码器 k = A 相对于参考编码器 k = B 进行编码时在积分范围内的相对比特率差异。请注意,平均差(即积分)是在对数域中计算的 ,与计算非对数域中的平均差异相比,它强调小差异并减少大差异的影响。 因此,BD 值可以解释为在对数域中平均的平均相对差值。

从数学上来说,BD 演算的定义在其大部分组成部分中都是清晰且独特的。 唯一的不确定性是确定 ak,i、bk,i、ck,i 和 dk,i 的插值方法的选择。

Sign Hiding

在HEVC中,对于每个变换单元,量化的变换系数以16个系数的组进行熵编码。在sign-hiding 的情况下,对于满足一定条件的系数组,沿扫描路径的第一非零系数的符号不在比特流中显式传输,而是从解码器处该系数组中的所有非零系数之和的奇偶性来推断。为了保证隐藏符号与所有非零系数之和的奇偶性匹配,编码器采用了基于率失真优化或失真最小化的奇偶性调整方法。

1 隐藏符号位的基本原理

在视频编码中,数据隐藏是一种已知的技术,通常用于将一个语法元素隐藏到部分比特流中以提供更好的编码效率。例如,用于帧内预测的MPM索引嵌入量化系数之和的奇偶性中;使用量化系数的奇偶性来传送变换模式的信息。

在将语法元素隐藏到其他语法元素的特定特征中时,必须考虑要隐藏哪个语法元素(源信号)以及要将其隐藏到哪里(目标信号)。为了产生率失真增益,必须考虑几个标准。

首先,从因果关系的角度来看,隐藏必须是可行的。在编码期间,当编码目标信号时源信号必须可用,在解码期间,必须在实际使用源信号之前解码目标信号。

其次,源信号必须代表压缩比特流中不可忽略的部分。从先前关于压缩数据隐藏的研究可知,隐藏数据时可以获得净增益,然而,以速率增益度量,它将仅表示隐藏信号的总速率的一部分。因此,如果数据隐藏要产生任何有价值的增益,则源信号应代表压缩比特流的相当大的比例。

此外,如果用于嵌入信息的目标和源信号特征不相关,则为了从隐藏源信号中获得最大增益,必须考虑其分布条件。当将二进制元素隐藏到目标信号的二进制函数中(例如将位隐藏到奇偶校验中)时,在大约50%的情况下,目标信号将需要改变。因此,由这种变化引起的率失真损失是近似恒定的,并且与源信号的分布无关:例如,隐藏始终等于0的二进制语法元素会导致相同的损失,因为奇偶校验仍然必须改变一半的时间。另一方面,当源信号在比特流中编码时达到其每符号1比特(在二进制元素的情况下)的编码上限时,通过省略源信号的传输而获得的增益是最大的。因此,必须为源信号选择一个等概率语法元素。

目标信号的一个重要条件在于能够找到对率失真性能影响最小的变化,因为在大约一半的情况下需要进行变化。因此,最好使用较大的目标信号,从而增加发现这种变化的机会。例如,将二元元素隐藏到单个量化系数的奇偶性中将在需要改变该系数时产生高率失真损失,当将其隐藏在较大的量化系数集合的和的奇偶性中时,增加了找到非常接近其量化区间边界并且其中量化值的改变将导致中等率失真损失的量化系数的机会。­

最后,希望源信号和目标信号大致成比例:当有更多的数据要隐藏时,应该有更多的目标信号嵌入其中。

量化系数可以做sign-hiding的原因:

  • 在编码器中,当要隐藏的符号已知时,可以修改量化系数的电平,并且在解码器中,在符号比特实际用于解码信号之前,可以使用这些电平。
  • 符号位代表压缩比特流的很大一部分(在HEVC通用测试条件下为15%到20%)。
  • 符号位是等概率的。
  • 在一组量化系数中嵌入符号位可以提供足够的机会找到一个量化系数,该量化系数在修改时会导致中等的率失真损失。
  • 当有更多的符号位要隐藏(源信号)时,有更多的剩余数据(目标信号)要嵌入它们。

2 量化和系数编码

可参考文章:

率失真优化量化 (Rate-Distortion Optimized Quantization RDOQ) – 我受到了惊吓 (mmedia-t.cn)

变换系数编码 – 我受到了惊吓 (mmedia-t.cn)

3 Sign Hiding

3.1 在解码器处推断隐藏符号位

对于每个CG,解码器统计沿扫描路径的第一个非零系数和最后一个非零系数之间的系数数目,并将其与阈值进行比较。如果超过阈值,则从所有非零系数之和的奇偶性推断第一个非零系数的符号。特别地,如果和为偶数,则该符号被推断为正;如果和为奇数,则该符号被推断为负。在这种情况下,不需要为该系数显式传输符号位。否则,以常规方式(每个符号1位)从比特流解码符号位。稍后在讨论编码器侧奇偶校验调整方案时,将详细说明应用这种标准以排除某些CG应用符号隐藏技术的原因。

上述多个符号位隐藏的解码处理针对一个TU内的每个CG重复。由于每个CG具有16个系数,因此对于一个4×4、8×8、16×16或32×32 TU,可分别隐藏多达1、4、16或32个符号位。­

3.2 编码器中隐藏符号位

为了避免失配,编码器执行与解码器相同的检查,以比较具有相同阈值的每个CG的第一非零系数和沿扫描过程的最后非零系数之间的系数数目,以确定是否要编码第一非零系数的符号。如果该数字不大于预定义阈值,则以常规方式编码符号;否则,不显式传输第一个非零系数的符号,因此每CG节省一位。注意,所有非零系数之和的奇偶性并不总是与第一个非零系数的符号匹配。当发生这种情况时,调整量化系数的幅度,以便奇偶性匹配符号。

将一个系数组中的原始变换系数表示为\(c={c_0, c_1, … , c_{N-1}}\),其中N是系数组中的系数总数。将量化和去量化函数分别表示为\(Q(·)\)和\(Q^{-1}(·)\)。量化输出或量化变换系数表示为\(u=Q(c)={u_0, u_1, … , u_{N-1}}\)。设k是沿扫描路径的第一个非零系数的索引,即\(u_k≠0\)且\(u_i=0, 0≤i<k\)。为了优化奇偶调整后的率失真性能,可将多符号位隐藏方案表述为以下优化问题:­­

\(D(c, \hat{c})\)是c与其重构\(\hat{c}\)之间的均方失真,\(R(u)\)表示编码系数向量u所需的速率,sign(x)是符号函数,λ是拉格朗日乘子,表征了距离和编码速率之间的折衷,以及

等式(3)中的问题本质上是矢量量化问题,对于该问题,需要设计矢量量化器以使给定速率约束以及和约束的奇偶性的失真最小化。因此可以应用一般的矢量量化器设计方法,然而通常需要迭代方法并且具有高设计复杂度。

在HEVC参考编码器中,当分别使用RDOQ或HDQ时,采用两种非迭代奇偶调整方案来解决等式(3)中的问题。首先通过RDOQ或HDQ对变换系数进行量化。在和的奇偶性与要隐藏的符号不匹配的情况下,编码器执行线性搜索,并将量化系数之一的幅度调整+1或-1,以使调整后的系数之和的奇偶校验与符号匹配。

第一个奇偶校验调整方案遵循与RDOQ类似的原则,即选择系数和调整方向以最小化调整后的总体率失真代价。第二种方案在不需要准确率信息的情况下,仅使失真最小化,适用于HDQ,且不太复杂。­

Transform Skip Residual Coding (TSRC)

VVC 中的残差编码,分为regular residual coding (RRC)和transform skip residual coding (TSRC)。 TSRC 和 RRC 都建立在 HEVC 中针对可变变换块大小 引入的 4 × 4 子块 (SB) 的概念之上,通常也称为系数组 (CG)。 图 1 说明了将大于 4 × 4 的块分解为 4 × 4 CG 以及 TSRC 的相关对角线扫描模式。 由于 TSRC 设计源自 RRC 设计,因此以下段落简要概述了 RRC 设计以及导致 TSRC 设计的修改。 请注意,由于变换块支持非正方形矩形,因此 VVC 支持非 4×4 子形状,这与仅支持 4×4 SB 的 HEVC 形成对比。 然而,在不失一般性的情况下,以下描述使用术语 CG 在解析过程的变换块内也包括非 4 × 4 子形状

RRC 设计使用多级显著性指示,即嵌入到 4 × 4 CG 概念中的非零系数的存在,以便为变换和量化的残差信号提供有效的信号。 在处理变换块的变换系数之前,语法元素\( s_{cbf}\) 出现在比特流语法中,表示对整个变换块的显著性,\( s_{cbf}=0\) 暗示变换块内的所有变换系数都等于零。 当 \( s_{cbf}=1\)指示存在至少一个不等于零的变换系数时,则处理使用变量\( v^X_{last}\)和 \( v^Y_{last}\)继续最后有效扫描位置。 正如它们的名称所示,变量分别根据列和行位置指定变换块内最后一个变换系数的位置,当沿对角线扫描模式扫描时,每个相对于变换块的左上角,如下图 1所示。这意味着当沿着对角线扫描模式向块的末端扫描超过最后一个有效扫描位置时,块中没有进一步的有效变换系数。 请注意,两个变量 \( v^X_{last}\)和\( v^Y_{last}\)中的每一个的值都是从两个语法元素重建的,这两个语法元素指定了最后一个变换系数的列或行位置的前缀和(可能为空)后缀部分。

RRC中的变换系数解析过程从最后一个有效扫描位置开始,并使用反向对角线扫描模式来处理位于扫描路径上的所有频率位置朝向DC频率位置。 对于变换块的每个 4 × 4 CG,语法元素 \( s_{csb}\) 指示当前 CG 的显著性。 有两个例外,第一个是覆盖最后一个有效扫描位置的CG,第二个是覆盖 DC 频率位置的 CG,其中符合标准的解码器推断 \( s_{csb}\)。由于最后一个有效扫描位置已经在 CG,解码器可以为相应的 CG 推断 \( s_{csb}\)。 由于 CG 传输覆盖 DC 频率位置的显着水平的可能性很高,由于变换的能量压缩特性,符合标准的解码器总是推断左上角 CG 的\( s_{csb}\)。 然而,对于左上 CG的语法元素\( s_{sig}\)(指定扫描位置的显著性),与其他CG一样,没有推理规则,即,当在前15个扫描位置内没有出现显著水平时,由于 \( s_{csb}=1\),CG的最后一个扫描位置必须是显著的。在4×4变换块的情况下,CG满足上述两个特殊条件,解码器推断\( s_{csb}\)等于1。

1 Processing Order

RRC 和 TSRC 的一个主要区别是处理扫描模式的顺序相反,即使用常规的正向扫描顺序而不是 TSRC 沿对角线扫描模式的反向扫描顺序,如图 1 所示。 因为通常帧内预测对于远离所使用的参考样本(位于当前块的上方和左侧)的样本位置变得效率较低。 这也意味着空间域中的局部残差信号方差随着与参考样本的距离增加而变大,从而导致块右下角的电平值变大。 通过反转反向扫描顺序,即通过使用常规的前向对角线扫描顺序,当在频域中沿反向扫描顺序操作时,显著级别的概率在扫描顺序中增加,类似于 RRC 中的情况。 虽然帧间预测块的好处并不显着,但改变扫描模式方向不会对这种情况下的性能产生不利影响。 请注意,HEVC RExt 中使用的 180° 剩余旋转利用了相同的现象,但由于 SB-wise 处理,它实际上与改变扫描方向不同。

第二个主要区别是消除了 TSRC 中最后一个有效扫描位置的信号通知,导致处理块内的所有扫描位置,如图 1 所示。 然而,多级显著性指示在 \( s_{csb}\) 出现在变换块的所有 CG 的意义上仍然有效,其中变换块的最后一个(右下)CG构成一个例外。对于该特殊CG,一致解码器可以推断\( s_{csb}=1\) ,但仅当\( s_{csb}=0\) 用于所有先前处理的SB时。

2 Level Coding

正如在 RRC 设计中一样,TSRC 的量化索引(级别)的编码和解码在CG内的多个编码通道中进行,即,从解码器的角度来看,解析过程在每个通道上迭代多次,沿着 CG内的扫描模式扫描位置,直到解码器可以重建完整的级别信息。 对于 TSRC,量化索引在3个pass中编码(和解码),前提是不超过上下文编码 bin 的限制。

pass-1以交错方式为每个量化索引包含最多 4 个上下文编码语法元素: \( s_{sig}\)、 \( s_{sign}\)、 \( s_{gt1}\)和 \( s_{par}\),分别是显著性指示、符号、大于 1 标志以及奇偶校验标志。 值得注意的是,RRC 中的 \( s_{sig}\)编码使用了 CABAC 引擎的旁路模式,并作为最终通道出现,而 TSRC 中的 \( s_{sign}\) 编码是采用自适应上下文模型的pass-1编码的一部分。 虽然在 TSRC 中\( s_{sign}\) 的总体概率仍然大致等于 0.5,但对于空间域中变换跳过的残差信号,局部通常会偏向某个方向。 使用利用该统计异常的自适应上下文模型可以提高 TSRC 的编码效率。 请注意,pass-1还包括为网格编码量化 (TCQ)引入的 \( s_{par}\)语法元素(指定级别的奇偶性)。 尽管 TSRC 的 TCQ 不活跃,但 TSRC 的二值化过程保持\( s_{par}\),以便为两个残差编码路径的pass-1编码保持相似的语法元素列表。

TSRC 中的pass-2由最多 4 个额外的 bin 组成,这些 bin 是上下文编码的,指示每个绝对量化索引的greater-than-x (gtx) 属性相对于阈值 x ∈ {3, 5, 7, 9} 与 相关语法元素 sgt3、sgt5、sgt7 和 sgt9。

pass-3最终指定了在前面的编码过程中未完全传输的那些绝对量化索引的剩余部分,并且所有此类相关的 \( s_{rem}\) 语法元素都通过截断 Rice (TR) 和 Exp-Golomb (EG) bin 字符串的串联进行二值化,每个 bin 都像在 RRC 路径中一样进行旁路编码。

从概念上讲,二值化和绝对量化索引编码过程之间存在直接关系。 图 2 说明了 HEVC 和 VVC 中的二值化过程,包括 3 个具有不同参数化的不同前缀代码的串联。 原则上,与截断一元 (TU) bin 字符串相关的所有 bin 使用自适应上下文模型进行上下文编码,而与 TR 和 EG bin 字符串相关的 bin 使用 CABAC 引擎的旁路模式进行编码。 HEVC 和 VVC 二值化过程之间最显着的区别是 TCQ的奇偶\( s_{par}\)语法元素,对于 RRC,当启用 TCQ 时,奇偶标志驱动 TCQ 状态机,其在第一个编码通道中的信号避免了 在知道下一个扫描位置的 TCQ 状态之前,需要重建每个扫描位置的完整级别信息。 请注意,TCQ 状态是 RRC 中 \( s_{sign}\) bin 上下文建模的重要元素。 从二值化的角度来看,每对具有不同奇偶校验的两个连续绝对级别 {(2n, 2n + 1)|n ∈ N+} 共享相同的二进制码字表示。 因此,对于所有 c ≥ 2,必须对图 2 中表示绝对水平值的 c 轴进行二次采样,从而将二值化过程应用于绝对水平集 c ∈ {0, 1}∪{2n|n ∈ N+} 而不是 HEVC 的 c ∈ N0。 另一个结果是,只要 c ≥ 2,就需要通过在适当的 bin 索引处添加表示 \( s_{par}\) 的奇偶校验 bin 来完成生成的 bin 字符串。在 RRC 和 TSRC 中,关联的 TU bin 字符串的索引顺序是这样的奇偶校验 bin 始终放在表示 \( s_{gt1}\) 的大于 1 的 bin 之后。 请注意,对于 TSRC,必须在所有 c ≥ 1 的 \( s_{sign}\) bin 之后添加表示语法元素 \( s_{sign}\) 的另一个 bin,如上文已经讨论的那样。 对于余数编码通道,TSRC 对 TR 和 EG 二值化采用相同的第二阈值 b1 和固定 Rice 参数 k = 1。

3 Context Modeling

对于上下文建模,TSRC 采用类似于 RRC 路径但相邻位置较少的局部模板 T 进行评估。 图3左侧为RRC路径的本地模板和已经处理的相邻频率位置,右侧为TSRC对应的本地模板。 请注意,由于反向对角线扫描模式,局部模板在 RRC 中跨越到右侧和底部,而在 TSRC 中,局部模板是反转的,即它跨越到空间中当前扫描位置的左侧和顶部。 TSRC 中的上下文建模不是评估五个邻居,而是只评估当前扫描位置上方和左侧的空间邻居。

令 χ ∈ X 表示上下文模型集 X 内的上下文记忆偏移量,其中每个上下文模型集 X 具有固定偏移量,因此所有上下文模型集都是不相交的。 进一步,设 TA(s) 和 TL (s) 分别为上邻居和左邻居的评价结果。 然后,语法元素 \( s_{sign}\) 的上下文模型索引 χsig ∈ Xsig 与 |Xsig| = 3 等于

相同的规则适用于 \( s_{gt1}\),但触发单个专用上下文模型的 BDPCM 模式除外 (|Xgt1| = 4)

\( s_{sign}\) 语法元素的上下文建模比较本地模板覆盖的相邻样本值,并选择符号上下文模型集合 Xsign 的第一个上下文模型(χsign = 0)与 |Xsign| = 6 当两个邻居都不重要时 (TA(ssig ) = 0∧TL(ssig ) = 0) 或两个符号值不同 (TA(ssign) ≠TL(ssign))。 请注意,仅当两个相邻位置都包含显着水平时,第二个条件才成立。 当两个相邻位置中的一个由正水平组成时 (TA(ssign) = 1∨ TL(ssign) = 1),上下文建模选择集合的第二个上下文模型 (χsign = 1)。 所有其他情况都会导致使用第三个上下文模型 (χsign = 2)。 请注意,对于 BDPCM 模式,适用于 \( s_{sign}\) 语法元素的相同上下文建模,但固定偏移量等于 3,这意味着对于 BDPCM,使用一组单独的上下文模型。 属于第一个编码通道的 spar 语法元素和第二个编码通道的所有语法元素,即 sgt3、sgt5、sgt7 和 sgt9,使用单个专用上下文模型。

4 Limit on Context-Coded Bins

为了实现具有成本效益和可行的硬件实现,在 RRC 和 TSRC 的设计中纳入了变换块中每个系数的上下文编码箱 (ccb) 的最坏情况限制。 当 N 表示(变换)块中变换系数或样本的数量时,上下文编码箱的最大预算在级别编码开始时设置为 Bccb = 1.75× N。 对于每个上下文编码的编码通道和每个扫描位置,必须在实际执行编码通道之前检查条件 Bccb ≥ 4。 每当扫描位置发生 Bccb < 4 时,剩余电平信息的处理将回退到纯旁路编码模式,仅使用由 TR 和 EG bin 字符串组成的二值化,即图 2 所示的第一变量阈值 b0 是 设置等于 −1 的值.

5 Level Prediction

当当前扫描位置具有在pass-1通道中编码的电平信息时,处理在余数编码通道结束时应用电平预测技术。 从解码器的角度来看,上述和左邻域的绝对水平 (TA(c) 和 TL (c)) 用作预测变量 p = max{T A(c), T L(c)},并且以下三种情况之一适用。 如果当前绝对水平 c 等于 1 且预测变量大于 0 (c = 1 ∧ p > 0),则最终绝对水平等于预测变量值 (c = p)。 最终绝对水平小于或等于预测变量值时减一,否则不变,总结如下:

请注意,级别预测技术等效于二值化过程的修改,即级别预测将 bin 字符串交换为 c = 1 和 c = p。 此外,当 BDPCM 对当前块有效时,不应用电平预测。

SAO Implementation Aspects and Parameters Estimation

由于SAO需要样本级操作来将每个样本分类为编码器和解码器中的边带或类别,因此需要尽可能减少每个样本的操作数量,以降低总体计算复杂性。在编码器端,有许多SAO类型需要测试,以在合理的计算复杂性下实现更好的速率失真性能。本文将讨论一些有效的编码器算法。

关于SAO的介绍可以参考:样本自适应偏移 Sample Adaptive Offset (SAO) – 我受到了惊吓 (mmedia-t.cn)

Fast Edge Offset Sample Classification

可以通过使用以下函数和方程以更有效的方式实施EO样本分类:

其中,“c”是当前样本,“a”和“b”是两个相邻样本。作为进一步的加速,上一步骤中获得的数据可以在下一个样本的分类中重复使用。例如,假设EO类为0(即,一维水平图案),并且CTB中的样本按照光栅扫描顺序进行处理。当前样本的“sign3(c-a)”等于左侧相邻样本的“sign3(c-b)”。同样,当前样本的“sign3(c-b)”可以被右侧的相邻样本重用。在软件实现中,sign3(x)函数可以通过使用逐位操作或查找表来实现,以避免使用if-else操作,这在某些平台上可能是耗时的。

Fast Band Offset Sample Classification

样本范围在BO中平均分为32个波段。由于32等于2的5次幂,所以BO样本分类可以实现为使用每个样本的五个最高有效位作为分类结果。通过这种方式,BO的复杂性降低了,特别是在硬件中,只需要电线连接而不需要逻辑门来从样本值获得分类结果。为了减少软件解码运行时间,可以通过使用逐位操作或查找表来实现BO分类,以避免使用if-else操作。

Distortion Estimation for Encoder

速率失真优化过程需要多次计算原始和重建样本值之间的失真。一个简单的SAO实现将通过向de-blocking后的样本添加偏移,然后计算得到的样本和原始样本之间的失真。为了减少存储器访问和操作次数,可以如下实现快速失真估计方法。设k, s(k)和x(k)分别是样本位置、原始样本和重建样本,其中k属于C,CTB内属于特定SAO类型(即BO或EO)起始边带位置或EO类别以及特定边带或类别的样本集合。原始样本和重建样本之间的失真可以通过以下等式描述:

原始样本和SAO修改的样本之间的失真可以通过以下等式描述

其中h是样本集的偏移量。失真变化由以下方程定义:

其中N是集合中的样本数,E是原始样本和重建样本(SAO之前)之间的差值之和,如以下等式所定义:

请注意,样本分类和(7.28)可以在去块滤波后输入样本变得可用后立即计算。因此,N和E只计算一次并存储。然后,ΔJ定义如下:

其中λ是拉格朗日乘数,R表示估计的比特。

对于具有特定SAO类型(即BO或EO)、起始频带位置或EO类别以及特定频带或类别的给定CTB,测试接近E/N的几个h值(偏移),并选择使ΔJ最小化的偏移。在选择了所有边带或类别的偏移之后,将32个BO边带中的每个边带或五个EO类别中的每个的ΔJ相加,以获得整个CTB的速率失真成本的增量(变化)。使用零偏移和EO类别0的BO边带的失真可以通过(7.25)预先计算,并存储以供后续重复使用。当SAO降低整个CTB的成本(即,增量成本为负)时,该CTB启用SAO。类似地,通过快速失真估计可以找到最佳SAO类型和最佳起始位置或EO类。

Slice-Level On/Off Control

HM参考软件通用测试条件使用分级量化参数(QP)设置。作为示例,在随机接入条件下,GOP大小为8。根据帧在GOP中的位置,帧可以属于不同的层次结构级别。通常,帧仅从具有较小或相同层次结构的帧中预测。具有较高层次结构的帧可能会被赋予较高的QP。

如下提供Slice级开/关判定算法。对于层次结构级别0的帧,Slice header中始终启用SAO。给定具有非零层次级别N的当前帧,先前帧被定义为解码顺序中具有层次级别(N-1)的上一个图片。如果在前一张图片中超过75%的CTB中禁用SAO,HM参考编码器将在当前图片的所有切片标头中禁用SAO,并跳过SAO编码过程。这种编码器技术不仅可以减少要解析的语法数量,还可以提高0.5%的BD速率。请注意,亮度和色度SAO可以在Slice header中单独启用或禁用。

SAO Parameters Estimation and Interaction with Deblocking

在HM参考编码器中,估计每个CTU的SAO参数。由于SAO被应用于去块滤波器的输出,所以在去块样本可用之前,不能精确地确定SAO参数。然而,当前编码树块(CTB)中的右列和底行的解块样本可能不可用,因为右侧的CTU和当前CTU下方的CTU可能尚未被重建(在单通道编码器中)。这一限制可以通过两个选项中的一个来克服。第一个选项估计可用CTB样本上的SAO参数,即除了三个底行亮度样本、一个底行Cb和Cr样本、最右侧四列亮度样本、最右边两列Cb和Cr样本之外的CTB样本。当使用64×64 CTU大小时,所提出的方法不会引起显著的编码效率损失。然而,对于较小的CTU大小,SAO参数估计中未使用的样本百分比较高,这可能导致显著的编码效率损失。在这种情况下,第二选项在SAO参数估计期间使用去块之前的样本,而不是不可用的去块样本,这可以减少较小CTU大小的编码效率损失。

样本自适应偏移 Sample Adaptive Offset (SAO)

样本自适应偏移的关键功能是衰减振铃效应,当使用较大的变换大小时,振铃效应更可能出现。SAO通过首先使用所选分类器将区域中的样本分类为多个类别并根据其类别向每个样本添加特定偏移量来减少样本失真。在比特流中用信号通知每个区域的分类器索引和偏移。

HEVC使用两种SAO类型:边界偏移(Edge Offset, EO)和边带偏移(Band Offset, BO)。在EO中,样本的分类基于其邻域,即当前样本与其相邻样本之间的比较。在BO中,分类基于样本值。

边界偏移 Edge Offset

图1显示了吉布斯现象,可用于解释图像和视频编码中振铃效应的出现。横轴表示沿一维线的采样位置,纵轴表示采样值。虚线曲线表示原始样本,而实线曲线表示当由于变换系数的量化而丢弃信号中的最高频率时的重构样本。

局部峰、凸边/角、凹边/角和局部谷用实心圆标记,从图中可以观察到,通过对局部峰值和凸角应用负偏移,对凹角和凹谷应用正偏移,可以减少失真。

EO使用四种单向模式进行样本分类:水平、垂直、135°对角线和45°对角线,如图2所示,其中标签“c”表示当前样本,标签“a”和“b”表示两个相邻样本。这四个样本模式形成四个EO类别。每个启用EO的CTB只能选择一个EO类。基于率失真优化,选择一个EO类,并且在比特流中用信号通知指示选择哪个EO类的索引。

对于具有特定方向的给定EO类别,CTB内的每个样本被分为五类之一。标记为“c”的当前采样值将沿选定的一维模式与其两个相邻值进行比较。下表总结了每个样本的类别分类规则。类别1和4分别与所选一维模式的局部谷和局部峰相关联。类别2和3分别与凹角和凸角相关联。如果当前样本不属于EO类别1至4中的任何一类,则将其分配至类别0,且不应用SAO。请注意,类别是互斥的,一个样本只能属于一个类别。

正负边界偏移的影响如图3所示,解释如下。类别1和类别2的正偏移会导致平滑,因为局部凹谷和凹角会变得更平滑,而这些类别的负偏移会导致锐化。相反,对于类别3和4,负偏移导致平滑,正偏移导致锐化。在HEVC中,不允许在EO中锐化。因此,编码器针对每个EO类别用一个信号通知四个特定偏移的绝对值,偏移的符号从相应的EO类别中隐式导出。EO和BO都使用四个偏移量,这限制了偏移量的数量,以减少对行缓冲器的要求。

边带偏移 Band Offset

HEVC SAO工具使用的另一个偏移是边带偏移(BO)。将向值属于同一边带(值范围)的所有采样添加一个偏移。样本值范围分为32个相等的边带。对于0到255范围内的8位样本,边带的宽度为8。因此,8k到8k+7的样本值属于边带k,其中k的范围为0到31。可以向解码器发送边带中原始样本和重构样本之间的差异(即,边带的偏移)。BO的偏移符号没有限制。

图4展示了BO如何补偿区域的样本强度偏移。横轴表示样本位置,纵轴表示样本值。虚线曲线表示原始样本,而实线曲线表示重建样本,受预测残差的量化误差和相位偏移的影响,因为编码运动矢量偏离真实运动。

如图4所示,如果重建的运动向量和“真实”运动向量之间存在相移(差异),则与原始信号相比,具有梯度的平滑区域可能会偏移一定值。在该示例中,与原始样本相比,重构样本被向左移动,这导致可以通过BO针对边带k、k+1、k+2和k+3校正的系统负误差,其中范围从k*8到((k+1)*8)-1的样本被分类为属于边带k,并且可以通过使用相应的偏移值来修改。

在HEVC中,只有四个连续边带的偏移和当前区域的起始(或最小)边带位置被发信号给解码器。在BO中用信号通知四个偏移量,这等于EO中用信号发送的偏移量的数量(偏移量的数目被限制以减少线缓冲器的需求)。仅发出四个边带的信号的原因是CTB形成的区域中的样本值范围可能非常有限。

因此,通过发信号通知当前区域的起始边带位置,BO可以识别当前区域中要补偿的最小采样值,以便解码器可以恢复它,如图5中的示例所示。这对于色度CTB尤其如此。在自然图像中,色度分量通常由窄带信号表示,这意味着通过几个边带偏移,编码器可以恢复该区域中的大多数样本。

SAO Parameters Signaling

序列参数集(SPS)中用信号通知的语法元素sample_adaptive_offset_enabled_flag指示在当前视频序列中是否启用了SAO。在Slice header中,两个语法元素slice_sao_luma_flag和slice_sio_chroma_flag指示当前Slice中是否分别为亮度和色度启用了SAO。

低延迟应用可以使用基于编码树单元(CTU)的SAO编码算法。如图6所示,CTU包括其对应的luma CTB、Cb CTB和Cr CTB。语法方面,SAO参数自适应的基本单元始终是一个CTU。如果在当前Slice中启用SAO,则将每个CTU的SAO参数交织到Slice数据中。比特流中的SAO数据在每个CTU的开头用信号通知。CTU级SAO参数包括SAO merge信息、类型信息和偏移信息。

A. SAO Parameters Merging

CTU可以使用三个选项来发送SAO参数:重用left CTU的SAO参数(通过将语法元素SAO_merge_left_flag设置为1),重用top CTU的SAO参数(设置语法元素
sao_merge_up_flag设置为1)或通过发送新的SAO参数。SAO Parameters Merging 由所有三个颜色分量共享。当SAO merge_left或SAO merge_up模式被指示时,来自左侧或上方CTU的所有SAO参数都将被复制,并且当前CTU没有更多信息。这种基于CTU的SAO Parameters Merging 有效地减少了需要用信号通知的SAO消息。

B. SAO Type and Offsets Signaling

如果不使用SAO Parameters Merging,则如图7所示发送当前CTU的信息。首先发送亮度分量的语法元素,然后发送Cb语法元素,再发送Cr语法元素。对于每个颜色分量,发送SAO类型(SAO_type_idx_luma或SAO_type_idx_chrma),表示EO、BO或未应用(SAO已关闭)。如果选择了BO或EO,则传输四个偏移。如果选择了BO,则发信号通知起始边带位置(sao_band_position)。否则,如果选择EO,则用信号通知EO类(sao_EO_class_luma或sao_EO_class_chrma)。

Cb和Cr共享SAO类型(SAO_type_idx_chroma)和EO类(SAO_EO_class_chrma)语法元素,以通过在某些平台上实现更高效的内存访问来减少辅助信息并加快SAO处理。因此,这些语法元素仅针对Cb进行编码。码字(包括“关闭”、“EO类别选择索引”和“BO频带位置索引”)的设计基于概率分布,以减少信息。

C. CABAC Contexts and Bypass Coding

使用基于上下文的自适应二进制算术编码(CABAC)对包括SAO merge信息、SAO类型信息和偏移信息的所有CTU级SAO语法元素进行编码。只有SAO类型的第一个bin(指定在当前CTU中SAO是打开还是关闭)以及SAO merge_left和merge-up标志使用CABAC上下文。所有其他箱都在旁路模式下进行编码,这显著增加了CABAC中的SAO解析吞吐量,而没有很大的编码效率损失。

变换系数编码

与HEVC类似,VVC采用基于上下文的自适应二进制算术编码(CABAC)对所有底层语法元素进行熵编码。非二进制语法元素映射到二进制码字。符号和码字之间的双射映射(通常使用简单的结构化码字)称为二值化。使用二进制算术编码对二进制语法元素和非二进制数据的码字的二进制符号(也称为bin)进行编码。

CABAC支持两种操作模式:规则模式(使用自适应概率模型对bin进行编码)和不太复杂的旁路模式(使用1/2的固定概率)。自适应概率模型也称为上下文,将概率模型分配给单个bin称为上下文建模。注意,所使用的二值化和上下文建模对编码效率都有显著影响。

所需的编码器和解码器的复杂性主要随着上下文编码的bin(即在常规模式下编码的bin)的数量而增加。但是,它们还受到其他方面的影响,例如连续bin之间的依赖程度、所使用的上下文建模的复杂性,或者算术编码引擎的规则模式和旁路模式之间发生切换的频率。

变换块量化索引的熵编码通常称为变换系数编码。由于在典型的视频比特率下,变换系数level消耗了总比特率的主要部分,因此在编码效率和实现复杂度之间找到合理的折衷是重要的。VVC中变换系数编码的基本概念类似于HEVC中规定的系数编码:

  1. coded block flag(CBF)指示变换块是否包括任何非零level
  2. 对于CBF等于1的块,传输前向扫描顺序中最后一个非零level的x和y坐标;
  3. 从指示的最后位置开始,以反向扫描顺序传输level,并将其组织为所谓的系数组(CG)。CG的bin在multiple passes中编码,其中所有旁路编码的bins被分组在一起以实现高效实现

由于VVC比HEVC支持更大范围的变换大小,因此对变换系数编码的一些方面进行了推广。与HEVC相反,扫描顺序不依赖于帧内预测模式,因为发现这种依赖于模式的扫描仅提供可忽略的改进,并且将不必要地使设计复杂化。

此外,表示level的bin的上下文建模与块大小无关。但是,在HEVC中发现的上下文依赖限制被放宽,并且利用level之间的局部统计依赖来提高编码效率。为了能够利用某些TCQ属性,level的二值化包括一个奇偶校验单元,CG的所有上下文编码单元在一个过程中编码。VVC使用基于变换块的上下文编码单元数量限制,以保持与HEVC类似的worst-case复杂度。

A. Coded Block Flag

编码块标志(CBF)以编码引擎的常规模式进行编码。总共使用了9个上下文(4个用于luma,2个用于Cb,3个用于Cr)。每个上下文为BDPCM模式编码的块保留一个上下文。对于luma,两个上下文仅用于在帧内子分区模式中编码的变换块(参见[32]);这里,所选择的上下文取决于同一编码单元内的前一luma变换块的CBF。为了利用色度分量的CBF之间的统计相关性,根据同位Cb块的CBF来选择未在BDPCM模式中编码的Cr块的上下文。

B. Coefficient Groups and Scan Order

W×H变换块的变换系数level{q}分布在W×H矩阵中。为了实现跨越所有块大小的协调处理,而且为了提高变换块的编码效率,其中信号能量被集中到对应于低水平或低垂直频率的变换系数中,变换块被划分为系数组(CG)。使用多个扫描过程以统一的方式对每个CG的level进行编码。由于VVC还支持宽度和高度小于4的块大小,因此CG的形状取决于变换块大小,如表II所示。对于具有至少16个系数的变换块,CG总是包括16个level;对于较小的块,使用2×2级的CG。CG的编码顺序由图3所示的反向对角线扫描给出。与CG大小无关,CG对角线从变换块的右下角到左上角进行处理,其中每条对角线沿左下方向进行扫描。CGs内部level的编码顺序由相同的反向对角扫描指定。

为了限制大变换大小的worst-case解码器复杂性,高频位置的变换系数被迫等于零。非零量化索引只能出现在变换块左上角的min(W,Wn)×min(H,Hn)区域中,其中Wn×Hn表示可以在解码器侧推断的非零输出区域的大小。该区域外的CG未编码,因此被排除在扫描之外,如图3d。在大多数情况下,Wn×Hn等于32×32,这是非零输出区域的最大支持大小。尽管VVC为DCT-II以外的变换指定了较小的非零输出区域,但这通常不会影响变换系数编码,因为指定所用变换的语法元素是在level之后编码的,并且它们取决于某些区域中非零level的存在。唯一的例外是亮度块,最大值为(W,H)≤32,以特殊子块变换模式编码。

如果启用了非DCT-II变换(在序列级别上),则始终使用非DCT-II变换对这些块进行编码,因此,推断出non-zero-out区域的大小等于16×16

C. Last Significant Coefficient Position

与在HEVC中类似,通过以前向扫描顺序(即编码顺序中的第一个非零level)发送最后一个非零level的位置来消除与高频分量相关的系数的零量化索引的显式编码。这不仅提高了编码效率,而且减少了上下文编码的bin的数量。

分别对应于系数level矩阵中的列号和行号的x和y坐标彼此独立地传输。如表III所示,每个component由前缀码字和(可能为空的)后缀码字的组合表示。前缀部分指定值的间隔。使用截断一元(TU)二值化对其进行二值化,并以常规模式对bin进行编码。表示变换块的non-zero-out区域的最后一个间隔的前缀部分被截断。也就是说,如果x坐标的min(W,Wn)或y坐标的min(H,Hn)等于表中最后一列中的数字,则不对表III中括号内的零位进行编码。特别是,如果相应的块宽度或高度等于1,则完全跳过坐标的编码。后缀部分表示前缀部分指示的间隔内的偏移量。它是二值化使用固定长度(FL)二值化和编码在旁路模式。只有值大于3的x和y坐标具有后缀部分。

在解码器侧,导出最后有效level的x和y坐标的值如下。设\(v_{pre}\)是前缀码字中等于1的bin数。然后,要解码的后缀bin的数量\(n_{suf}\)由以下公式导出

\(v_{suf}\)是后缀码字(二进制表示)指定的值,解码后的坐标值last根据

先signal x坐标的前缀部分,然后signal y坐标的前缀部分。对于分组旁路编码bins,后缀部分在前缀码字之后进行编码。x和y坐标的前缀bins使用单独的上下文模型集进行编码。表IV列出了表示集合内使用的概率模型的上下文偏移量。选择的模型取决于是否对亮度块或色度块进行编码、变换块的宽度或高度以及前缀码字内的bin编号。请注意,对于存在zero-out的大型变换块,变换维度(而不是非零输出区域的维度)用于导出上下文偏移。总共有46个上下文(40个用于亮度,6个用于色度)用于编码最后的系数位置。

D. Binarization and Coding Order

从包含最后一个非零level(如x和y坐标所示)的CG开始,CG以编码顺序传输(通过反向对角线扫描给出)。为CG编码的第一个语法元素是sb_coded_flag。如果此标志等于0,则表示CG仅包含零个级别。对于第一个CG(包含最后一个非零level)和最后一个CG(包含DClevel),不编码sb_coded_flag,但推断为等于1。sb_coded_flag以常规模式编码。

选择的上下文取决于右边的CG或下面的CG是否包含任何非零级别,其中为亮度和色度指定了单独的上下文集。总共使用了4个上下文(2个用于亮度,2个用于色度)。对于sb_coded_flag等于1的CGs,按照以下说明对电平值进行编码。

选择系数level的二值化和编码顺序来支持TCQ和常规量化的有效熵编码。由于TCQ中使用的两个标量量化器Q0和Q1的结构不同,电平等于0的概率在很大程度上取决于所使用的量化器。为了在上下文建模中利用此效应,同时分组上下文编码和旁路编码的bin,二值化包括专用奇偶校验标志,用于在熵编码期间确定TCQ状态。

通过另外考虑实现良好编码效率所需的上下文编码bins的数量以及连续bins之间的相关性,选择了表V中所示的二值化。量化索引的绝对值|q|被映射到bin sig(大于0)、gt1(大于1)、par(奇偶性)、gt3(大于3)和非二进制余数rem

CG的语法元素在扫描位置上进行多次编码。与HEVC不同,在HEVC中,每个系数的单个语法元素在每个扫描过程中进行编码,VVC在单个过程中对每个系数最多编码4个语法元素。

pass 1中,上下文编码的存储单元siggt1pargt3以交错方式进行编码(即,在继续下一个扫描位置之前对一个扫描位置的所有存储单元进行编码)。注意,驱动TCQ状态机的奇偶校验bin包括在第一个过程中,以便为TCQ情况启用sig bin的有效编码。对于可以推断sig bin等于1的扫描位置(例如,对于最后一个有效位置),不发送信号。gt1pargt3 bin的存在按照表V中的规定进行控制。非二进制余数rempass 2中进行编码。使用与HEVC中类似的参数码对其进行二值化,并在旁路模式下对产生的bin进行编码。

为了增加worst-case下的吞吐量,可在第一次过程中编码的上下文编码bin的数量受到限制。为了允许上下文编码的bin在cg之间的适当分布,在变换块的基础上指定限制。N是变换块非零输出区域中变换系数的数量,上下文编码bin的最大允许数量设置为1.75 N。如果bin预算在CG之间平均分配,则这将对应于每个CG 28个bin,这仅略高于HEVC中规定的限制(25个bin)。

对上下文编码的bins的限制如下所示。如果在扫描位置的开始处,用于变换块的已编码siggt1pargt3 bin的总数超过1.75 ×N – 4,即预算中剩余的bin不到4个,则终止第一个编码过程。在这种情况下,剩余扫描位置的绝对值|q|pass 3中被编码,它们由语法元素decAbsLevel表示,这些元素在旁路模式下被完全编码。

最后,在pass 4中,CG的所有非零level的符号以旁路模式进行编码。如果启用SDH且CG内最后一个和第一个非零level的扫描索引之间的差值大于3,则不发送最后一个非零level的符号。图4示出了将level数据组织到不同扫描过程中。

E. Context Modeling

为了有效地利用条件统计进行算术编码,VVC使用了一组相当大的上下文模型对bin的siggt1pargt3进行编码。除了TCQ状态,上下文建模还利用了空间相邻量化索引之间的统计相关性。

sig的上下文取决于相关的TCQ state \(s_k\)、变换块内系数的对角位置d=x+y,以及图5a所示的局部模板T内部分重建的level的绝对q*的总和。部分重建的绝对level由相邻扫描位置的已编码的bin给出,并且可以根据

对于亮度块,指示所使用的自适应概率模型的上下文索引\(c_{lum}^{sig}\)根据

作为局部模板T内部分重建level q*的函数。对于色度块,仅使用两类对角位置(d<2和d≥2)。上下文索引\(c_{lum}^{chr}\)由

当TCQ未启用时,TCQ state \(s_k\)的值设置为0。总共使用60个上下文模型对sig bin进行编码(36表示luma,24表示色度)。

gt1pargt3选择的概率模型不依赖于TCQ状态,因为发现它只提供很小的好处。计算单个共享上下文偏移量以选择这些语法元素的概率模型。根据系数的对角线位置d(4类luma,2类色度)和max(0,q*-1)之和在本地模板T内选择,使用

作为局部模板T内部分重建level q*的另一个函数,亮度块和色度块的上下文索引\(c_{lum}\)和\(c_{chr}\)分别由下式给出

此外,对于最后一个系数位置,使用单独的上下文(由\(c_{lum}=0\)和\(c_{chr}=0\)给出)。对于每个gt1pargt3 bins,使用32个概率模型(21个用于亮度,11个用于色度)。

F. Binarization of Bypass-Coded Level Data

第二遍中编码的语法元素rem表示绝对level的余数。如果相关的gt3 bin等于1,则仅针对扫描位置发送它们。q*是根据(8)部分重建的level,level的绝对值|q|由下式给出

与HEVC中的余数值类似,使用截短的Rice(TR)和Exp-Golomb(EG)码的组合对表示在第三遍中编码的绝对级别的余数rem和语法元素decAbsLevel进行二进制化。在编码引擎的旁路模式中对生成的bin进行编码。与HEVC不同,TR码的Rice参数是基于本地模板T中的绝对level值|q|的和导出的。使用的本地模板T与第一次编码过程中用于上下文索引导出的模板相同。Rice参数m

其中,\(z_0\)设置为等于4,用于对余数rem进行编码,\(z_0\)设置为等于0,用于对decAbsLevel进行编码。产生这种差异的原因是decAbsLevel的值指定了完整的绝对级别,而余数rem表示差异rem =(|q| – q∗)/2,具有较小的值。

对于每个Rice参数m,小于\(v_{max}=2^m·6\)的值仅使用m(TRm)阶的TR码进行编码;这对应于长度为6的一元前缀的码。对于大于或等于\(v_{max}\)的值,TRm码与顺序为m+1(EGm+1)的Exp-Golomb码相关联。表VI显示了Rice参数m=0和m=3的二值化,以及TRm和EGm+1码的级联。表中粗体的bin对应于二值化的TRm部分。当组合的码长度将超过32个存储单元时,二值化将略微修改。在这种情况下,Exp-Golomb前缀的长度限制为11个bin(参见表VI中带下划线的m=0条目),32位预算的其余15个bin用于表示后缀部分。

为了提高完全旁路编码电平的编码效率,decAbsLevel的值不直接表示绝对电平值|q|,而是导出为

第一个编码过程。Rice参数m由这些值给出,使用与余数rem相同的二值化进行编码。注意,参数\(pos_0\)基本上指定了重新排序的码字表中|q| = 0的码字位置。根据Rice参数m和TCQ状态\(s_k\),根据

G. Transform Skip Residual Coding

除了上述用于变换系数的规则残差编码(RRC)之外,VVC还包括用于Transform Skip模式中的量化索引的专用熵编码,其被称为Transform Skip残差编码(TSRC)。它主要是为了提高屏幕内容的编码效率而设计的,可以在slice级别启用。启用时,TSRC方案用于对TS块的量化索引进行编码;未启用时,使用规则残差编码对TS块的量化索引进行编码。­

与常规残差编码相比,最后一个非零电平的位置不被传输,并且按照前向扫描顺序编码,即从左上角系数开始,然后到右下角系数。与RRC类似,CG的语法元素在扫描位置的多个过程中进行编码,并且对上下文编码的bins的数量应用相同的限制。只要未达到此限制,就使用三个过程对level进行编码,如图6所示。

在第一个过程中,使用自适应概率模型对sigsigngt1par的bin进行交织和上下文编码。如图5b所示,局部模板也应用于TSRC中,用于导出上下文索引,但它仅包括两个相邻的系数位置。因为,在TS块中,连续符号通常具有相似性的值,符号标志包含在第一次传递中,并在编码引擎的常规模式下进行编码。如果在pass 1后仍未达到常规编码bin的限制,则在pass 2时,每个系数最多有四个大于x的标志(gt3gt5gt7gt9)被编码。这些bins也是上下文编码的。最后,在pass 3中,绝对level(rem)的余数以旁路模式编码。注意,根据第二次扫描期间扫描位置是否达到bins限制(因此,无法对gt3 bin进行编码),余数可以具有不同的含义。对于第一次扫描中未传输数据的所有扫描位置,在pass 4中以旁路模式对完全绝对值(decAbsLevel)以及相关符号标志进行编码。rem和decAbsLevel的Rice参数m始终设置为1。

率失真优化量化 (Rate-Distortion Optimized Quantization RDOQ)

率失真优化量化 (RDOQ) 是一种编码优化技术,可以对其进行修改,而不会影响比特流是否符合标准。

在视频编码器操作中,量化步骤是唯一负责通过量化和减少变换系数的数量来减少有损数据的步骤。因此,量化变换系数的计算对压缩效率具有显著影响。利用标量量化的编码器所提供的压缩效率(在速率失真方面)可以通过选择更复杂的量化变换系数的计算方式来显著提高(它不是标准化的,可以以任何方式执行)。

在视频压缩技术的发展过程中,已经开发了许多旨在改进量化系数计算的方法。由于其效率,RDOQ被选为HEVC测试模型开发中两种可能的量化方法之一。

改进的量化器可以考虑量化误差和传输变换系数所需的位数,并确定量化变换系数的最佳集合。可以对每个变换系数块(即HEVC中的变换单元(TU))执行优化,并且通过最小化拉格朗日函数来计算最优成本。

该方法的一般思想是找到与最低RD成本相对应的量化变换系数的最佳集合。理论上,确定量化系数的最佳集合需要通过评估所有可能的组合进行穷举搜索。由于编码器的极端计算复杂性,穷举方法是不切实际的。因此,引入了快速次优方法。此外,在[1] “速率失真优化量化(RDOQ)”这一名称已被提出,并被广泛采用。

RDOQ的目的是找到表示编码块中的残差数据的量化变换系数的最佳或次最佳集合。RDOQ计算编码块中的图像失真(由变换系数的量化引入)和编码相应量化变换系数所需的比特数。基于这两个值,编码器通过计算RD成本来选择更好的系数值。

率失真优化量化过程

RDOQ的主要思想是确定TB中的第i个系数(表示为\(c_i\))的最优量化水平,或者在两个候选量化水平之间[上限舍入水平(表示为\(l_{i,ceil}\))和下限舍入水平(称为\(l_{i,floor}\))],或者特别地,在三个候选之间,或者通过在 \(l_{i,ceil}=2\)的情况下额外考虑 0,\(l_{i,ceil}\)和\(l_{i,floor}\)的值计算如下:

其中QStep是对应于量化参数(QP)的量化步长。RDOQ过程需要所有候选量化级别的RD代价,其中产生最小RD代价的量化级别被选为最优级别。每个候选级别的RD代价导出为:

其中\(D(c_i,r_{li})\)是系数\( c_i \)被量化为\( l_i \)时的量化误差,\( r_{li} \)是其重构(即反量化),\(R(l_i)\) 是量化级别 \(l_i\) 的熵编码产生的码率。 λ是对应于QP的拉格朗日乘数。

注意,(2)中的量化误差\(D(c_i,r_{li})\)可以表示为

其中 \(l_{i,float} \)是由 \(|c_i|/QStep \)计算的量化中的实际浮点数。 现在, \(R(li) \)被计算为:

如(4)中,\(R(li) \)需要 \(R_{li}^{Sig}\)、 \(R_{li}^{1}\)、 \(R_{li}^{2}\)、 \(R_{li}^{Rem}\),分别为与量化级别相关的4个语法元素(SE)的各自速率[3],即coeff_sig_flag、coeff_abs_lev_greater1_flag、coeff_abs_lev_greater2_flag、coeff_abs_remaining 。这四个 SE 的含义如表 I 所示。

请注意,在 HEVC 中,coeff_sig_ falg、coeff_abs_lev_greater1_falg和 coeff_abs_lev_greater2_ falg的 bin 是上下文编码的,而 coeff_abs_remaining 的 bin 是旁路编码的 [4]。为了估计 SE 的个体速率,需要执行实际的熵编码和上下文更新过程。然而,在 HEVC 参考软件中,速率 \(R_{li}^{Sig}\)、 \(R_{li}^{1}\)、 \(R_{li}^{2}\)是根据级别重要性、位置和上下文从预定义的查找表中估计的;通过使用 Golomb–Rice 代码和 Exp-Golomb 代码对低复杂度估计进行二值化 coeff_abs_remaining(表示为 Rem)来估计速率 \(R_{li}^{Rem}\)。 Rem 的值计算如下,其中 absLevel 是量化级别的绝对值:

表 II 显示了 coeff_abs_remaining 的二值化。 coeff_abs_remaining 二值化后,\(R_{li}^{Rem}\) 计算如下:

其中\({Length}^{prefix}\)和\({Length}^{suffix}\)分别是二值化后前缀和后缀的长度。由于HEVC变换系数左移15以表示整数域中速率的分数部分,并且还使用缩放系数估计失真,因此对\(R_{li}^{Rem}\) 左移15。

The RDOQ in HEVC

RDOQ已包含在HEVC参考软件(HM)中,并在HEVC开发和性能期间广泛使用。本节介绍了适用于HEVC的RDOQ算法。

HM中RDOQ的自适应与HEVC残差编码技术密切相关。在HEVC中,变换单元的大小可以从4×4到32×32像素不等,并且只允许方形单元。变换和扫描后,系数被划分为包含16个变换系数的系数组(CG)(图3)。HEVC变换系数编码的详细描述见[2]。

编码器中的RDOQ操作可分为三个阶段:变换系数的量化、系数组(CG)的消除和最后一个非零系数的选择。

A. 变换系数的量化

在该阶段中,编码器分别对每个变换系数执行计算。在第一步中,编码器通过使用无死区的均匀量化器量化变换系数的幅度来计算值Level。在下一步中,编码器考虑分析的量化系数的两个附加幅度:1级和0级。对于每一个提到的系数幅度,编码器计算用所选幅度编码系数的RD成本,并选择RD成本最低的一个。

值得一提的是,当与等于Level的系数幅度值进行比较时,将幅度设置为0值。与设置较低幅度值(级别1)相比,允许更显著的比特率降低。然而,通过将幅度设置为0来消除所选变换系数可能会导致显著失真。

B. 消除系数组

在该阶段中,编码器对每个变换系数组(CG)执行计算。编码器计算消除整个CG的RD成本。整个CG的消除是通过将CG中的所有系数量化为零来执行的。编码器计算所分析CG的消除的RD成本,如果消除允许降低成本,则消除所选择的CG。

整个CG的消除可以导致显著的比特率降低(不需要为CG内的每个系数发送sig_coeff_flag),同时向重建图像引入显著的失真。

C. 最后一个非零系数的选择

RDOQ的最后阶段是在步骤A和B之后针对TU中的所有剩余CG执行的。RDOQ算法分析系数以找到最佳的(短期RD成本)最后非零系数位置。包括此步骤是因为编码器必须编码比特流中最后一个非零系数的(x,y)坐标。

D. RD cost 的计算

在RDOQ操作期间,编码器必须计算所考虑的每一组变换系数或系数组的成本。可以通过考虑编码所选系数CG或TU所需的比特数(B)、引入的失真(D)以及通过拉格朗日乘数对两个值进行加权来计算该成本(RD_cost):

\(RD\_cost = D+\lambda \cdot B\)

在不同的实现中,编码器可以使用引入的失真的精确或估计值以及编码所选变换系数、系数组或变换单元所需的比特数。使用估计值会导致最佳系数集选择中的一些错误,并导致压缩性能下降。然而,速率和失真的估计可以加快编码器的操作。

Reference

[1] M. Karczewicz, Y. Ye, I. Chong, “Rate Distortion Optimized Quantization”, ITU-T SG 16/Q 6 VCEG, document: VCEG-AH21, Jan. 2008.
[2] J. Sole, R. Joshi, N. Ngyuen, T. Ji, M. Karczewicz, G. Clare, F. Henry, A. Duenas, “Transform Coefficient Coding in HEVC”, IEEE Transactions on Circuits and Systems for Video Technology, vol. 22, no. 12, pp. 1765-1777, Dec. 2012.
[3]J. Sole et al., “Transform coefficient coding in HEVC,” IEEE Trans. Circuits Syst. Video Technol., vol. 22, no. 12, pp. 1765–1777, Dec. 2012.
[4]V. Sze and M. Budagavi, “High throughput CABAC entropy coding in HEVC,” IEEE Trans. Circuits Syst. Video Technol., vol. 22, no. 12, pp. 1778–1791, Dec. 2012.

MMVD(Merge mode with MVD)

针对未来的视频编码标准,提出了一种新的运动矢量表达方法,即Merge mode with MVD(MMVD)。在先前的标准中,两种方法通常用于运动矢量表示。在第一种方法中,运动矢量从相邻块中导出,并直接用于运动补偿(HEVC中的Merge模式),在另一种方法中用MVP和MVD(自适应运动矢量预测;HEVC中为AMVP)表示运动矢量。Merge模式通过节省用于表示运动信息的比特而受益。AMVP表示更精确的运动信息,但它需要用信号发送MVD,这会消耗额外的比特。MMVD为运动矢量精度及其开销之间的权衡提供了折衷的解决方案。MMVD可以通过引入简化的运动向量表示来提高运动向量精度。结果表明,该方法提高了VVC的编码效率,平均节省了0.51%的BD码率。

1. INTRODUCTION

与先前的压缩标准H.264/AVC(高级视频编码)[1]相比,最新的视频压缩标准高效视频编码(HEVC)显示出编码效率的显著提高。得益于HEVC,从全高清(FHD)到超高清(UHD)的视频分辨率广播服务的新市场可能会成为下一代广播标准(如ATSC3.0[2])的主要特征。然而,随着先进显示技术的出现,对各种大型视频内容的需求不断增加,如8K UHD、360度虚拟现实、高动态范围(HDR)和宽色域(WCG)。为了满足这些需求,自2014年以来,已经讨论了支持多种视频内容的新视频编码标准[3]。

最终,ITU-T SG 16 Q.6(VCEG)和ISO/IEC JTC 1/SC 29/WG 11(MPEG)的联合视频专家组(JVET)于2018年开始开发新的视频编码标准,即通用视频编码(VVC)[4]。

大约在同一时间,中国AVS(音频视频标准)工作组启动了另一种新的视频编码标准AVS3[5]的开发,作为先前视频标准AVS2的继任者,AVS2在中国广泛用于4K广播[6]。最后,自2019年1月以来,MPEG正在开发MPEG-5基本视频编码(EVC),以更明确地解决许可问题[7]。

在上述三种标准中,与先前的编码标准(如HEVC和AVS2)相比,已观察到显著的编码性能改进。为了提高编码性能,三种标准化中的一种常见方法是减少帧间冗余及其在信令中的表示。仿射运动模型和几何分割的应用可以是减少基于块的平移运动无法覆盖的冗余的新方法的示例。为了改进运动表示,MMVD模式和扩展的Merge模式可以被认为是已经研究过的节省比特的新工具。

在本文中,我们介绍了一种具有简化表达式的运动矢量编码的新方法,该方法已被上述三种正在开发的视频编码标准所采用。

2.  MOTIVATION

2.1 Merge and AMVP modes

在HEVC中,Merge和AMVP模式可以被视为典型的运动向量预测工具,其利用相邻编码块的空间运动相似性来进行运动向量预测。通常,单预测帧的运动信息由运动向量(水平和垂直坐标信息)、参考帧索引和预测方向组成。在双向预测的情况下,要编码的运动信息量加倍。

HEVC中新引入了Merge模式。Merge模式生成由从空间相邻块和时间相邻块收集的运动信息组成的候选列表。仅用信号通知解码器应该用于预测的来自列表的候选的索引。

AMVP模式是为HEVC中的非Merge块设计的。AMVP模式使用更精确的运动向量执行运动补偿预测,这有利于减少残差。然而,由于运动差信息是编码器侧搜索处理的结果,并且不能在解码器侧导出,因此需要用信号通知MVD信息。尽管AMVP模式也使用预测器进行运动矢量编码,但要编码的相应侧运动信息仍然很大,包括预测方向、参考帧索引和运动矢量差(MVD)。

2.2 Motion Vector Inaccuracy of Merge mode

Merge模式的运动信息可能是不准确的,因为它直接从相邻块获得运动信息。相邻块的运动向量可能不是真实的运动,但它可以为速率失真优化提供最佳成本。

在运动参数相似性方面,存在针对HEVC的一系列序列和编码条件的观察结果。根据结果,与具有完全相同运动的先前编码块相邻的块平均占所有像素的40%[8]。其余块具有与相邻块不同的运动参数集。图1显示了2K序列的MVD分布。x轴和y轴的坐标表示AMVP模式下运动向量相对于其运动向量预测器的偏移。大小表示命中率,可以将其视为在相应运动向量偏移处发生的概率。这些MVD应以AMVP模式发出信号。MVD是当前块和相邻块之间的运动差,并且暗示预测精度的不足。这种分布类似于二维高斯分布。大多数MVD位于坐标平面的x轴和y轴上。此分布形状为摄像机拍摄的自然视频序列的特征。此外,更靠近中心的MVD的命中率大于更远离中心的MVDs的命中率。

8K序列的这些差异更明显,因为大分辨率序列的运动通常比小分辨率序列的大得多。因此,运动向量与其对应的预测器之间的差异也变得更大。HEVC中的MVD是用指数Golomb码编码的,占据了比特率的很大一部分。

对于典型运动向量的表示,在下一节中提出了一种新的运动向量表达方法。此表达式为更频繁出现的运动向量生成更短的码字。

3 MERGE MODE WITH MOTION VECTOR DIFFERENCE

在HEVC中,Skip模式也与Merge模式一起定义。Skip模式只是没有任何残差编码的Merge模式,即在Skip模式编码块的运动补偿之后没有重建阶段。以类似的方式,MMVD也可以是Skip模式编码或Merge模式编码。MMVD将额外的新运动向量视为Skip模式或Merge模式的候选。

3.1 Proposed Motion Vector Expression Method

所提出的运动矢量表达方法包括三个部分,即起点、距离和方向。由于运动矢量差也是运动矢量的一种形式,因此它也可以通过所提出的新的运动矢量表达方法来表示。

第一个分量是起点,它被用作进一步细化的绝对运动矢量位置。在MMVD中,用信号通知基本候选索引以指示来自候选列表的Merge候选中的哪一个被用作起点。候选索引的定义如表1所示。

第二个分量是运动向量的大小。该大小是运动向量沿坐标平面的x轴和y轴与起点的距离。预定义的对数缩放距离用于构建MMVD距离列表。如表2所定义的距离索引使用截断一元编码方案进行编码,以缩短频繁出现的距离的码字。

第三个分量是运动向量的方向。如图1所示,大多数MVD沿x轴和y轴分布。因此,仅允许沿x轴和y轴的四个方向。方向索引(如表3所示)将符号分配给相对于起点的MVD的每个分量。它采用固定长度编码方案进行编码。

3.2 MMVD for VVC

本节介绍在VVC的Skip和Merge模式中使用新的运动矢量表达方法。如果用Skip或Merge模式对当前块进行编码,并且如果在当前片中启用了MMVD,则发信号通知MMVD标志以指示MMVD模式是否应用于当前块。运动向量的推导过程基于如下所述使用的基础候选的预测方向而变化。

3.2.1 Uni-prediction

当基本候选是单预测运动向量时,用于MMVD推导的中心位置是基本候选的MV,与基本候选的距离如表2所示,图2显示了可以表达出的各种可能的MV。

3.2.2 Bi-prediction

当基本候选是双预测运动向量时,MMVD应用于具有相同信息的两个参考帧,如图3所示。当当前图片位于时间轴上的两个基准图片帧之间时,可以通过镜像另一个参考帧上MVD的方向来导出一个参考框上的MVD

3.3 MMVD for EVC and AVS3

虽然VVC中的MMVD从Merge候选列表中的基础候选继承预测方向,但EVC中的MMVD另外用信号通知预测方向。每个基础候选有三个可能的预测方向。如果基础候选是单预测的,则通过使用镜像方法导出相反的预测方向。结合两个单预测因子,合成双预测因子作为预测方向的第三候选。如果基础候选是双预测的,则可以将其分为两个单预测因子,用于每个单预测。

AVS3中的MMVD生成其自己的基本候选列表,该列表由相邻块的运动信息组成。其余过程类似于VVC中的MMVD。

4 EXPERIMENTAL RESULTS

低频不可分离变换 (Low Frequency Non-Separable Transform LFNST)

对于所有现代基于块的混合视频编码,变换是去除预测残差块中空间冗余的重要部分。此外,现有的方向性帧内预测导致预测残差中的方向性模式,并且导致变换系数的可预测模式。变换系数中的可预测模式主要在低频分量中观察到。因此,在本文中,引⼊了⼀种称为低频不可分离变换(LFNST)的不可分离变换,以进⼀步压缩低频主变换系数之间的冗余,低频主变换系数是传统方向帧内预测的变换系数.

提议的 LFNST 是直接矩阵乘法,因此它不需要多次迭代,而多次迭代会导致变换处理中出现不希望的延迟。提议的 LFNST 包含在称为通⽤视频编码 (VVC)的下⼀代视频编码标准中。

I. INTRODUCTION

在 HEVC 的第一个版本完成后,已经研究了具有超越高效视频编码标准 (HEVC) 能力的高级视频压缩技术。有关未来视频编码的活动是在ITU-T 视频编码专家组 (VCEG) 和ISO/IEC 运动图像专家组 (MPEG)的联合视频探索小组 (JVET) 内进行的,该专家组开发了联合探索模型(JEM) ),它现在正积极致力于开发称为通用视频编码 (VVC) 的下⼀个视频编码标准。 VVC 的主要⽬标是指定⼀种视频编码技术,其压缩能力大大超过此类标准的前几代,并且还支持在更广泛的应用中使用视频编解码器,包括超高-清晰度视频(例如,具有 3840×2160 或7620×4320 图像分辨率和 10 或 12 位的位深度,如 ITU-R BT.2100建议书所规定),具有高动态范围和宽色域的视频,以及用于身临其境的媒体应⽤,例如 360° 全向视频,以及先前视频编码标准 JVET-O2001[1] 通常解决的应⽤。 VVC中加⼊了许多先进的压缩技术,它包含了更多高级变换技术,例如多变换集 (MTS) 和低频不可分离变换 (LFNST)。本文重点介绍 LFNST 视频编码技术。

变换一直是去除预测残差块中空间冗余的重要编码工具。预测残差的空间冗余特性取决于预测模式。特别是,在帧内编码模式中,当使用仍在VVC 中使用的方向性帧内预测时,已经观察到方向性预测残差模式。方向预测残差产生变换系数,其中⼀些低频分量可能是可预测的模式,具体取决于帧内预测方向。因此,引⼊称为低频不可分离变换(LFNST)的不可分离变换以进⼀步压缩低频主变换系数之间的冗余,低频主变换系数是来自传统定向帧内预测的变换系数。提议的 LFNST 是直接矩阵乘法,因此它不需要多次迭代,而多次迭代会导致不希望的延迟并阻止变换处理中的并行执行。

II. BACKGROUND

在 JEM 中,二次变换应用于前向初级变换和量化(在编码器)之间以及去量化和反向初级变换(在解码器端)之间。 如图 1 所示,执行 4×4(或 8×8)二次变换取决于块大小。 例如,4×4 二次变换适用于小块(即 min (width, height) < 8),8×8 二次变换适用于每个 8×8 块的较大块(即 min (width, height) > 4)。

下面以输入为例描述不可分离变换的应用。 为了应用不可分离变换,4×4 输入块 \(X\)

\(\vec{X} =\begin{Bmatrix}
X_{00} & X_{01} & X_{02} & X_{03}\\
X_{10} & X_{11} & X_{12} & X_{13}\\
X_{20} & X_{21} & X_{22} & X_{23}\\
X_{30} & X_{31} & X_{32} & X_{33}
\end{Bmatrix}\)

首先表示为一维向量\(\vec{X}\)。

不可分离变换计算为\(\vec{F} =T\cdot \vec{X}\),其中\(\vec{F}\)表示变换系数向量,\(T\)是一个 16×16 的变换矩阵。随后使用该块的扫描顺序(水平、垂直或对角线)将 16×1 系数向量\(\vec{F}\)重组为 4×4 块。具有较小索引的系数将与较小的扫描索引一起放置在 4×4 系数块中。总共有 35 个变换集,每个变换集使用 3 个不可分离的变换矩阵(内核)。从帧内预测模式到变换集的映射是预先定义的。对于每个变换集,选择的不可分离次级变换候选者进一步由显式发送的次级变换索引指定。在变换系数之后,每个 Intra CU 在比特流中用信号通知索引一次。为了降低二次变换的复杂度,JVET-B0059 [2] 在二次变换的计算中提出了一种新的超立方给定变换(HyGT)。这种正交变换的基本元素是吉文斯旋转,它由旋转正交矩阵定义。图 2 描绘了二级变换结构。

HyGT 的乘法复杂度很高。 变换的分层结构也给硬件设计带来了问题,因为相邻阶段之间的数据依赖性限制了并行性。

III. ALGORITHM DESCRIPTION OF LFNST

LFNST 最初是在 JVET-K0099 [3](以前称为缩减二次变换或 RST)中引入的。 LFNST 和 HyGT 的原始版本有 35 个变换集,每个变换集有 3 个不可分离的变换矩阵(内核),这需要大量的内存使用,不适合硬件设计。 JVET-L0133 中引入了 4 个变换集(而不是 35 个变换集)映射,最后在 VTM5 中采用的 JVET-N0193 [4] 中引入了每组 2 个内核的 4 个变换集。 在本文中,16×48 和 16×16 矩阵分别用于 8×8 和 4×4 块。 为方便起见,16×48 变换表示为 LFNST8x8,16×16 变换表示为 LFNST4x4。 图 3 表示正向和反向 LFNST。

A. LFNST computation

LFNST或缩减变换(RT)的主要思想是将一个N维向量映射到不同空间中的一个R维向量,其中R/N(R < N)是缩减因子。 RT矩阵是一个R×N矩阵,如下:

其中变换的 R 行是 N 维空间的 R 个基。 RT 的逆变换矩阵是其正向变换的转置。 正向和反向 LFNST 如图 4 所示。

在本文中,应用了缩减因子为 3(1/3 大小)的 LFNST8x8。 因此使用 16×48 直接矩阵,每个矩阵从左上角 8×8 块中的三个 4×4 块中获取 48 个输入数据,不包括右下角 4×4 块(图 5)。我们将此区域称为 LFNST8x8 的感兴趣区域或 ROI8x8 .

换句话说,在解码器端使用 48×16 逆 LFNST 矩阵来生成 ROI8x8 中的核心(主)变换系数。 前向 LFNST8x8 使用 16×48(或 8×48 用于 8×8 块)矩阵,因此它仅在给定 ROI8x8 内的左上 4×4 区域中产生非零系数。 换句话说,如果应用 LFNST,那么除了左上角 4×4 区域之外的 ROI8x8 将只有零系数。 对于 LFNST4x4,应用 16×16(或 8×16 用于 4×4 块)直接矩阵乘法。

当满足以下两个条件时,有条件地应用逆 LFNST:

  • 块大小大于等于给定阈值(W>=4 && H>=4)
  • Transform skip 模式标志等于零.

如果变换系数块的宽度 (W) 和高度 (H) 均大于 4,则将 LFNST8x8 应用于变换系数块的 ROI8x8。 否则,LFNST4x4 可以应用于变换系数块的左上 min(8, W) × min(8, H) 区域。

如果 LFNST 索引等于 0,则不应用 LFNST。 否则,应用 LFNST,使用 LFNST 索引选择内核。 LFNST 选择方法和 LFNST 索引的编码将在以下部分中进行说明。

此外,LFNST 应用于帧内和帧间Slice中的帧内 CU,以及亮度和色度。 如果启用dual tree,Luma 和 Chroma 的 LFNST 索引将分别发出信号。 如果dual tree被禁用,单个 LFNST 索引被发送并用于 Luma 和 Chroma。

在第 13 次 JVET 会议上,采用了帧内子分区 (ISP) 作为一种新的帧内预测模式。 选择 ISP 模式时,禁用 LFNST 并且不发出 LFNST 索引信号,因为即使将 LFNST 应用于每个可行的分区块,性能改进也是微不足道的。 此外,对 ISP 预测的残差禁用 LFNST 可以降低编码复杂度。

B. LFNST selection

LFNST 矩阵是从四个变换集中选择的,每个变换集由两个变换组成。 应用哪个变换集由帧内预测模式确定,如下所示:

  • 如果指示了三种 CCLM 模式之一,则选择变换集 0。
  • 否则,按照表1进行变换集选择:

访问表 1 的索引 IntraPredMode 的范围为 [-14, 83],这是用于广角帧内预测的变换模式索引。

C. LFNST Signaling

R = 16 的前向 LFNST8x8 使用 16×48 矩阵,因此它仅在给定 ROI8x8 内的左上角 4×4 区域中产生非零系数。 换句话说,如果应用了 LFNST,那么除了左上角的 4×4 区域之外的 ROI8x8 只生成零系数。 因此,当在 ROI8x8 中检测到除了左上 4×4(如图 6 所示)之外的任何非零元素时,LFNST 索引不会被编码,因为这意味着没有应用 LFNST。 在这种情况下,LFNST 索引被推断为零。

D. Worse case multiplication handling of LFNST

根据硬件专家的意见,LFNST 需要将每个样本的最坏情况乘法次数限制为小于或等于 8。

如果我们使用 LFNST8x8 和 LFNST4x4,当所有 TU 都由 4×4 TU 或 8×8 TU 组成时,就会出现乘法计数的worst-case情况。 因此,前 8×48 和 8×16 矩阵(换句话说,每个矩阵中从顶部开始的前 8 个变换基向量)分别应用于 8×8 TU 和 4×4 TU。 在块大于 8×8 TU 的情况下,不会发生worst-case的情况,因此 LFNST8x8(即 16×48 矩阵)应用于左上角的 8×8 区域。 对于 8×4 TU 或 4×8 TU,LFNST4x4(即 16×16 矩阵)仅应用于不包括其他 4×4 区域的左上角 4×4 区域,以避免worst-case的情况发生。 在 4xN 或 Nx4 TU (N ≥ 16) 的情况下,LFNST4x4 分别应用于两个相邻的左上角 4×4 块。 通过上述简化,worst-case下的乘法次数变为每个样本 8 次。

IV. EXPERIMENTAL RESULTS

根据 JVET-M1010 [5] 中定义的通用测试条件和 JVET-M1026 [6] 中的核心实验描述,基于 VTM-4.0 参考软件实现了所提出的方法。 执行所有All Intra (AI) 和随机访问 (RA) 测试。
在 A 部分,报告了inter MTS 关闭的 AI、RA 和 LD 结果,其中与 VTM anchor相比,编码时间为 126% (AI)、111% (RA) 和 108% (LD),BD 速率变化为 -1.34% (AI)、-0.69% (RA) 和 -0.22% (LD)。
在 B 部分中,报告了启用 inter MTS 的 RA 和 LD 结果,其中与 VTM anchor相比,编码时间分别为 109% (RA) 和 105% (LD),BD 速率变化分别为 -0.69% (RA) 和 -0.18% (LD)。
最后,在 C 部分报告了 AI 案例的低 qp 结果,其中与 VTM anchor相比,编码时间为 137%,BD 速率变化为 -0.63%。

REFERENCES 

[1] B. Bross, J. Chen, S. Liu, “Versatile Video Coding (Draft 6)”, document JVET-O2001, 15th Meeting: Gothenburg, SE, 3–12 July 2019. 

[2] X. Zhao, A. Said, V. Seregin, M. Karczewicz, J. Chen, R. Joshi, “TU-level non-separable secondary transform”, Joint Video Exploration Team (JVET) of ITU-T SG 16 WP 3 and ISO/IEC JTC 1/SC 29/WG 11, Doc. JVET-B0059, 3rd Meeting 

[3] M. Salehifar, M. Koo, J. Lim, S. Kim, “CE 6.2.6: Reduced Secondary Transform (RST)”, document JVET-K0099, Ljubljana, SI, Jul. 2018. 

[4] M. Koo, M. Salehifar, J. Lim, S. Kim, “CE6: Reduced Secondary Transform (RST) (CE6-3.1)”, Joint Video Exploration Team (JVET) of ITU-T SG 16 WP 3 and ISO/IEC JTC1/SC 29/WG 11 JVET-N0193, 14th meeting, Geneva, CH, 19–27 March 2019. 

[5] F. Bossen, J. Boyce, K. Suehring, X. Li and V. Seregin, “JVET common test conditions and software reference configurations for SDR video”, JVET-M1010, 13th JVET meeting, Marrakech, MA, 9–18 Jan. 2019. 

[6] X. Zhao et al., “Description of Core Experiment 6 (CE6): Transforms and transform signalling”, JVET-M1026, 13th JVET meeting, Marrakech, MA, 9–18 Jan. 2019. 

论文分享:A Non-local Mean Temporal Filter for Video Compression

这篇文章对于学习MCTF(运动补偿时域滤波  motion compensated temporal filtering)有很好的帮助。

摘要:

现代视频编解码器利用视频信号的时间和空间相关性来实现压缩。视频信号中的噪声破坏了这种相关性并损害了编码效率。先前在VP8、VP9和HEVC中的工作利用了时间滤波来去除源信号中的某些噪声。它们通常比较沿运动轨迹的一对像素,并基于像素值差确定滤波器系数。观察到,这种噪声去除允许更好的速率失真性能折衷。请注意,在所有情况下都针对原始视频信号评估压缩失真。本文提出了一种用于噪声去除的非局部平均时间滤波器。它不是比较运动轨迹上的一对像素,而是比较感兴趣像素周围的两个像素块。然后,它们在L2范数中的距离被帧噪声水平归一化,该噪声水平用于确定非参数模型中的时间滤波器系数。实验表明,与其他竞争者相比,所提出的非局部均值滤波方法获得了更好的压缩效率。

I. INTRODUCTION

视频编解码器利用视频信号的空间和时间相关性来实现压缩效率。源信号中的噪声因素减弱了这种相关性,阻碍了编解码器的性能。视频信号去噪是一种很有前景的解决方案。

采用各种去噪方法去除重构帧中的量化噪声在视频压缩研究中有着悠久的历史。Dubois和Sabri[1]指出,噪声和信号之间的主要区别在于噪声是不相关的,而视频信号具有很强的时间相关性。Boyce[2]建议使用自适应运动补偿帧平均方法来减少噪声。该算法是逐块的,并且在无位移帧平均和运动补偿帧平均之间切换。这些方法成功地降低了噪声并提高了视频帧的视觉质量。在VP8中,提出了一种内环去噪算法,以生成非显示帧,该帧被编码并存储在帧缓冲器中,用作其他显示帧的参考帧[3]。后来,针对H.264/AVC[4]和HEVC[5]提出了类似的想法。不同的滤波算法,如自适应维纳滤波器、非局部均值[6]、块匹配和三维滤波(BM3D)[7]在环路去噪框架[8]中进行了评估。其他作品[9]、[10]通过在高维空间中进行分组和协作过滤,利用自然视频序列中的时间和空间冗余,提高了视觉质量。

在各种编码器实现中,包括libvpx VP8、VP9[11]和HEVC[12],早就发现了从源视频信号中去除噪声作为目标压缩效率的预处理阶段的好处。它们通常使用常规块匹配运动搜索构建运动轨迹,并比较轨迹上的每对像素,其差值将用于确定时间滤波器系数。滤波后的帧被馈送到视频编解码器中,并将其重建与原始(无滤波)帧进行比较以计算失真。实验表明,它可以获得显著的压缩性能增益。

本文提出了一种用于源信号时域滤波的非局部均值滤波核。它不是比较一对像素之间的差异来决定滤波器系数,而是比较分别以两个像素为中心的两个像素块之间的L2范数距离。然后将该距离相对于帧噪声水平进行归一化,该噪声水平也是从源帧估计的,并用于确定滤波器系数。我们的实验证明,在整体压缩性能方面,所提出的非局部均值方法优于[11]和[12]中的先验滤波方法。

II. DENOISING SCHEME IN VIDEO COMPRESSION

针对分层金字塔编码结构,特别设计了降噪方案。接下来我们将讨论视频信号的去噪、时域滤波核及其与编解码器的集成。

A. Noise Removal and Bit Rate Reduction

在视频压缩中,编码过程\((E)\)是首先将源视频信号\(V\)分解为重构表示和残差信号\(R\),然后将\(V\)转换为码流的过程。在有损压缩中,剩余信号在量化阶段被丢弃。设\(rate(·)\)表示比特流中组件的比特率。编码器设置速率\((R)=0\)。

现在考虑源视频信号\(V\)被噪声\(N\)损坏,设\(V^*\)表示真实信号(无噪声)。由于量化过程是编码过程引入的伪影,量化步长是量化噪声的唯一确定因素,我们假设量化噪声\(R\)与源视频信号生成过程中由于物理条件引入的噪声\(N\)无关。源信号可以写成:

编码过程变成:

在这个模型中,编码器在压缩过程中保留了真实信号声\(V^*\)加上噪声声\(N\)。然而,噪声是不需要的信息,它降低了视觉质量(除了故意添加噪声的情况,如膜粒噪声),衰减了重构帧之间的时间一致性,最终降低了压缩效率。因此需要降低声\(rate(N)\),或者理想情况下设置声\(rate(N)=0\)。

B. Video Denoising in Hierarchical Coding Structure

去除噪声并不一定能提高视频编码的压缩效率。去除噪声信号不可避免地会降低客观指标(例如,PSNR),因为指标是根据源视频信号计算的。

我们的解决方案是只对分层编码结构中的关键帧和0层帧进行去噪。在AV1中,每组图片(GOP)的层次结构有固定的长度,如图1所示。分层编码结构最重要的特点是不同层的比特率分配。视频信号按照金字塔结构无序编码,其中底层帧以较高的比特率预算编码,并作为上层帧的参考帧。该方案显著提高了编码效率。在AV1中,关键帧和0层帧占用比特率预算的百分比最大。图2显示了不同层的平均编码帧大小示例,其中包括mobile_cifhighway_cif的示例剪辑。

我们的实验表明,朴素的均匀视频去噪(在每个帧上不加区别地应用去噪)并不能提高AV1的压缩性能。原因是高层帧的比特率预算太小,无法在比特率降低和PSNR降低之间进行权衡。只有关键帧和层0处的帧具有显著比特率节省的潜力。

去噪的效果如图3所示的例子所示。在本例中,对150帧进行编码,并显示第一个GOP的PSNR值。我们观察到,去噪后,虽然关键帧的PSNR值下降了约2 dB,但后续帧的PSNR值增加了。这是因为去噪后的关键帧对接下来的帧有更好的参考作用,导致该GOP的PSNR增加。同时,实现了关键帧上比特率预算的减少。因此,整体压缩性能得到显著提高。

C. GOP Based Temporal Filter for HEVC

Wennersten等人[12]提出了一种基于gops的HEVC时间滤波器。它对第0层和第1层的帧进行过滤。对待过滤帧前后的帧进行运动补偿,寻找最佳匹配样本。滤波器系数取决于样本之间的差异,以及量化参数(QP)。滤波后的样本值\(f(i)\)由下式计算:

其中,\(p_j(i)\)是第j个运动补偿帧的采样值,\(p_0(i)\)为当前帧的样本值,\(w_{j,a}(i)\)表示可用帧数为\(a\)时第\(j\)个移动补偿帧的权重。\(N\)是候选帧数。对于亮度通道,权重\(w_{j,a}(i)\)定义为:

如果当前poc是16的倍数,则\(s1=1.5\),否则\(s1=0.95\);\(s2=0.4. \)s_{j,a}[/latex]确定为:

对于色度通道,权重\(w_{j,a}(i)\)定义为:

其中\(s3=0.55\)。

D. Non-local Mean Temporal Filtering Scheme

在本节中,我们提出了AV1的非局部时间滤波方案。与第II-C节中描述的滤波器相比,我们强调了两个主要因素:使用(1)patch difference和(2)noise level自适应确定滤波器系数。

与已有工作类似,我们的方法将当前帧划分为M × M块。对于每个块,运动搜索应用于当前帧之前和之后的帧。只有具有最小均方误差(MSE)的最佳匹配patch才被保留为邻居帧的候选patch。当前块也是一个候选patch。将N个候选patch组合在一起生成过滤后的输出。

设\(f(i)\)为过滤后的样本值,\(p_j (i)\)为第\(j\)个patch的样本值。过滤过程为:

其中\(w_j(i)\)是总共N个patch中的第\(j\)个patch的权重。

与第II-C节描述的滤波器不同,我们采用基于patch的差异而不是样本对样本的差异来确定滤波器系数。基于patch的差分的优点是它不会引入系统噪声[6],这是去噪的理想属性。权重由patch差确定为:

其中,\(D_j(i)\)为当前块与第\(j\)个候选补丁之间的差的平方和:

其中\(p_0\)指当前帧,\(Ω_i\)是补丁窗口,一个L×L正方形。\(h\)是控制由欧氏距离测量的权值衰减的关键参数。

基于补丁的算法参数的选取问题引起了人们的研究兴趣。\(h\)的大小对滤波系数有显著影响。一般情况下,在补丁差不变的情况下,\(h\)的增加会导致除当前帧外的参考补丁的权重更高,表明时间滤波更强。在我们的应用中,\(h\)由声源的噪声水平决定,这样滤波器系数适用于不同噪声的视频。设\(σ\)表示噪声的标准差,我们将\(h\)表示为相对于\(σ\)的单调递增因子:

其中\(t1 = 4\), \(t2 = 0.7\), \(t3 = 0.5\),这是实验确定的。通过这种方式,当视频被更高的噪声破坏时,应用了更强的平滑。

值得一提的是,我们发现,将\(h\)表述为\(σ\)的平稳增长函数提供了比我们之前在[14]中的工作更好的压缩性能,在[14]中,我们假设存在一个中心噪声水平,大多数视频的噪声都处于一个小范围内,从而得出\(h = C × exp(1 – σ) × σ\)。这样的公式适用于许多视频,但当我们在一个大的视频数据集上进行测试时,这个假设就不成立了,因为任何噪声级别都可能出现。

III. EXPERIMENTAL RESULTS

提出的时间滤波在libaom AV1框架[15]中实现。我们还在[12]中实现了基于gop的时间滤波器进行比较。注意,在[12]中,只使用当前帧前后的两个帧进行过滤,而在提议的方法中使用了三个帧。因此,参数\(s_{j,a}总是设置为0.3。这两种过滤器只应用于关键帧和0层帧,块大小[latex]M = 32\),窗口大小\(L = 5\),总共\(N = 7\)参考帧。参数\(σ\)由当前帧用[16]估计。

我们评估了720p和1080p视频的压缩性能,speed 1 (-cpu-used =1),在恒定质量模式下(-end-usage =q),最大帧数为150。压缩效率的提高分别通过PSNR、SSIM和VMAF的BD率降低来衡量。负值表示更好的编码性能。

表i显示了[12]和我们提出的滤波器相对于没有时间滤波的基线的平均性能。两种滤波器都显著提高了编码效率。提出的非局部均值滤波器在[12]上的相对编码性能如表II所示。显然,使用基于批处理的距离和噪声水平感知的核估计有一定的编码优势。

仔细观察单个视频片段的编码性能可以发现,编码增益较大的视频片段都是噪声水平相对较高的视频片段,如vidyo1_720p60, vidyo3_720p60。对于噪音水平非常低的视频,我们的方法可能会提供边际性能增益,如屏幕内容视频:life 1080p30。

图4显示了一个可视化示例。绘制了源图像和使用[12](中间行)中的滤波器和我们的滤波器(最后一行)的滤波图像之间的Y、U、V通道差异。从Y通道的差分图像中,我们观察到我们的滤波器比现有滤波器去除的结构信息更少。从U通道和V通道的差分图像中,我们可以看到我们的滤波器比其他滤波器更好地捕捉到源图像中呈现的强噪声。

IV. CONCLUSION AND FUTURE WORK

在这项工作中,我们提出了一个非局部平均时间滤波方案的视频压缩。对分层编码结构中的关键帧和底层帧进行滤波。滤波器系数的设计既考虑了贴片差又考虑了噪声水平。实验表明,它优于其他用于libvpx VP8, VP9和HEVC HM编码器的时间滤波器。

REFERENCES

[1] Eric Dubois and Shaker Sabri. Noise reduction in image sequences
using motion-compensated temporal filtering. IEEE Transactions on
Communications, 32(7):826–831, 1984.
[2] Jill M Boyce. Noise reduction of image sequences using adaptive
motion compensated frame averaging. In In 1992 IEEE International
Conference on Acoustics, Speech, and Signal Processing, volume 3,
pages 461–464. IEEE, 1992.
[3] Yaowu Xu. Inside webm technology: The vp8 alternate reference
frame. http://blog.webmproject.org/2010/05/inside-webm-technologyvp8-alternate.html, 2010.
[4] Eugen Wige, Peter Amon, Andreas Hutter, and Andre Kaup. In- ´
loop denoising of reference frames for lossless coding of noisy image
sequences. In 2010 IEEE International Conference on Image Processing,
pages 461–464. IEEE, 2010.
[5] Eugen Wige, Gilbert Yammine, Wolfgang Schnurrer, and Andre Kaup. ´
Mode adaptive reference frame denoising for high fidelity compression
in hevc. In 2012 Visual Communications and Image Processing, pages
1–6. IEEE, 2012.
[6] Antoni Buades, Bartomeu Coll, and J-M Morel. A non-local algorithm
for image denoising. In 2005 IEEE Computer Society Conference on
Computer Vision and Pattern Recognition (CVPR’05), volume 2, pages
60–65. IEEE, 2005.
[7] Kostadin Dabov, Alessandro Foi, Vladimir Katkovnik, and Karen
Egiazarian. Image denoising by sparse 3-d transform-domain collaborative filtering. IEEE Transactions on Image Processing, 16(8):2080–
2095, 2007.
[8] Eugen Wige, Gilbert Yammine, Peter Amon, Andreas Hutter, and
Andre Kaup. Efficient coding of video sequences by non-local in- ´
loop denoising of reference frames. In 2011 18th IEEE International
Conference on Image Processing, pages 1209–1212. IEEE, 2011.
[9] Kostadin Dabov, Alessandro Foi, and Karen Egiazarian. Video denoising
by sparse 3d transform-domain collaborative filtering. In 2007 15th
European Signal Processing Conference, pages 145–149. IEEE, 2007.
[10] Matteo Maggioni, Giacomo Boracchi, Alessandro Foi, and Karen
Egiazarian. Video denoising, deblocking, and enhancement through
separable 4-d nonlocal spatiotemporal transforms. IEEE Transactions
on image processing, 21(9):3952–3966, 2012.
[11] The WebM Project. https://chromium-review.googlesource.com.
[12] P. Wennersten. Encoder-only gop-based temporal filter. ITU-T SG 16
WP 3 and ISO/IEC JTC 1/SC 29/WG 11, Document: JCTVC-AI0023-
v2, 2019.
[13] Joseph Salmon. On two parameters for denoising with non-local means.
IEEE Signal Processing Letters, 17(3):269–272, 2009.
[14] Cheng Chen, Jingning Han, and Yaowu Xu. Video denoising for the
hierarchical coding structure in video coding. IEEE Sigport, 2020.
[15] Alliance for Open Media. https://aomedia.googlesource.com/aom/.
[16] Shen-Chuan Tai and Shih-Ming Yang. A fast method for image noise
estimation using laplacian operator and adaptive edge detection. In 2008
3rd International Symposium on Communications, Control and Signal
Processing, pages 1077–1081. IEEE, 2008.