Video Coding / SAO

VVC环路滤波:自适应样点补偿滤波器

概述

由于量化是在频域进行,而高频系数的量化失真往往更大,图像边缘一般都是高频部分,所有边缘部分的失真会更大,解码后边缘部分会出现上下波动,这就是振铃效应。重建值在原始值上下波动。

将重建值进行分类,对波峰补偿一个负值,对波谷补偿一个正值。所以 SAO 的关键部分在于对重建像素进行分类。

VVC 中的 SAO与HEVC中基本一致,以CTB为单位对样本分group,分别对不同的group进行补偿。group index和offset被写入码流。包括两种补偿方式,边界补偿(Edge Offset,EO)和边带补偿(Band Offset,BO)。其中EO是根据样点值与周围样点值的关系来分类,而BO是根据样点本身的值来分类。

  • 和 HEVC 中的 SAO 基本一致
  • BD-rate 增益只有 0.1%
    • 如果没有 ALF 的话增益会高很多,能达到 0.8% 或 1%
    • 在主观质量上提升挺多
    • 复杂度低,可以适用于低延迟场景
  • 主要减小了振铃效应
  • 可以使用 EO(边界补偿)和 BO(边带补偿)
    • 对每个 CTB,当使用EO时:
      • 一个 CTB 只能使用一种 EO 类型
      • 4 种类的偏置会传输
    • 对边带补偿,整个样值范围被分成不同的边带
      • 样值被分类为某种边带
      • 对每种边带,传输偏置

补偿模式

RDO选出用EO,BO或merge。

EO

  • 通过RDO为该CTB选择使用一种梯度模式

  • 确定梯度模式后,计算该CTB中的当前像素c和相邻2个像素ab之间的关系,分为4类,每类分配一个offset,offset由RDO过程产生。规定1,2时,offset值必须是正数;对于3,4时,offset必须是负数。对于不属于以上四个类别的像素值不进行补偿。

BO

根据样点值分为32个等间距的band(每一个band的范围是8),每个样点都会属于一个特定的区间。选择4个连续的band里的像素值进行补偿。需要补偿的边带起点和补偿值通过RDO选择。

为什么4个连续的band?

  • 一个CTU中大部分的pixel的取值应该会集中在很少的几个band中,使用连续的4个band能够覆盖大部分的pixel。
  • 因为EO模式使用了4个offset值,为了不增加码率,BO复用了这4个offset值的syntax,这样不需要另外再增加syntax来专门表示。

参数融合(merge)

某一个CTB的SAO的参数可以直接使用相邻CTB的参数(色度亮度同时),只需指定是哪个相邻块(左方或上方)

syntax

结果

下表显示了在有/无ALF和CC-ALF的VTM-9.0中启用SAO对SDR内容的BD-rate改进。anchor为SAO禁用。

  • 当ALF和CC-ALF被启用时,在四个测试条件下,启用SAO的平均YUV BD-速率增益为0.2%。

  • 当ALF和CC-ALF被禁用时,SAO不仅平均实现了1.3%的YUV BD-速率增益,而且还提供了主观的好处,如图所示。

启用SAO的BD-rate改进与ALF部分重合。然而,考虑到SAO在HEVC中得到了很好的部署,而且所需的计算复杂度很低,SAO被保留在VVC中,以允许使用SAO来进一步提高客观和主观质量,特别是当ALF被禁用时。

代码