AVS2中的环路滤波

基于块的编码方法都是先对一幅图像进行分块,然后以块为单位进行变换量化,这样或多或少的会造成细节信息的损失,因此解码出来的图像就会存在噪声,影响图像的主观质量。最普遍的噪声就是在块的边界会出现不连续,这样在边界处会形成一条明显的线,称为块效应。除了块效应,由于信息的丢失,尤其是高频信号,图像上还会出现振铃效应和模糊效应等。码率越低时,这些噪声信号越明显。虽然没法完全消除噪声,但是可以将其减弱。一般有两种方法——后处理和环路滤波。后处理的方法是在编码环路之外进行的,并不包含在编码标准中。后处理的方法通常只对部分视频有良好的去块和去振铃的作用,但无法适用于所有的视频,而且对当前图像像素值的修复产生的增益也无法传导到其他帧,因此,几个常用的编码标准在制定时都采用了环路滤波的方法。环路滤波是在编码环路中进行,在编码标准中有统一规范的过程。AVS2中的环路滤波模块有三个:去块滤波器(DB,Deblocking)、样本自适应补偿(SAO,Sample Adaptive offset)和自适应环路滤波(Adaptive Loop Filter)。

图1  AVS2编码框架中环路滤波的位置

去块滤波

图2  重建图像中的块效应

块效应的产生来自于两个方面:一是基于块的编码标准在进行压缩编码时,是以块为单位进行,经过量化和反量化的过程后,块与块之间像素点的差值被放大,从而在重建图像中形成一条明显的直线;二是在运动估计过程中,选取的参考块是从不同的参考帧的不同位置复制过来的,这些匹配块并不是绝对准确的,所以在边界上就会产生像素值的不连续。

图3  8×8块的边界示意图

为了解决块效应的问题,AVS2中引入了去块滤波器。去块滤波器是在8×8的块上实施的,按照光栅扫描的顺序,对每个滤波块进行滤波。先滤波垂直边界,再滤波水平边界。为了避免过度滤波造成图像细节的损失,先要判断是否需要进行滤波。AVS2中规定了几种不需要滤波的情况:

  • 待滤波的边界是图像边界,则该边界不需要滤波;
  • 禁止跨slice滤波时,如果待滤波边界是slice边界,也不进行滤波;
  • 待滤波的边界不是CU、PU和TU边界中任何一个;
  • 待滤波的边界在CU内且不是TU的边界,而且CU的编码类型是skip/direct模式。

在不同的QP和不同的编码模式下,边界处像素值不连续的程度不同,因此,不能对所有的块效应采用相同强度的滤波器。为了便于区分,AVS2定义了一个控制滤波强度的变量——边界强度BS(Boundary Strength)。BS等于0时表示不滤波。除此之外BS有4个等级,1,2,3和4。BS等于0时表示不滤波。假设边界左右两边的平坦度变量分别为FL和FR,综合平坦度为FS,且初始值均为0。边界滤波强度BS的推导过程如下,其中Alpha和Beta的大小与量化参数QP有关:

  1. |p0-q0|<Alpha且|p0-q0|>1,则需要进行滤波;否则,BS=0,不进行滤波。
  2. |p0-p1|<Beta,则FL+=2;
  3. |p0-p2|<Beta,则FL++;
  4. |q0-q1|<Beta,则FR+=2;
  5. |q0-q2|<Beta,则FR++;
  6. FS=FL+FR;
  7. 当FS = 6时,若p0 = p1, 并且q0 = q1,则边界强度Bs = 4。否则Bs = 3;

当FS = 5时,若p0 = p1, 并且q0 = q1,则边界强度Bs = 3。否则Bs = 2;

当FS = 4时,若FL = 2,则Bs = 2。否则,Bs = 1。

当FS = 3时,并且abs(p1 – q1) < Beta, 则Bs = 1。否则, Bs = 0。

当FS为其它值时,Bs = 0。

  1. 如果BS不等于0,对于色度块的边界,BS减1。


图4  Alpha、Beta和QP的关系(图片来源:《Advanced Video Coding System》)

 

样本自适应补偿

去块滤波虽然能减轻块边界的块效应,但对块内部的振铃效应和模糊效应却没什么作用。因此,在去块滤波之后,AVS2加入了样本自适应补偿技术SAO。SAO的思想是给每个像素点补偿一个偏移值,从而减少样本的平均误差。为了降低编码复杂度,AVS2与HEVC类似,以LCU为单位实施SAO,不同的是AVS2为了方便编解码器的实现,SAO的参数设置的基本单元为LCU向左上偏移4个像素。Deblocking只应用于块边界,而SAO应用于整个滤波单元,包括块边界。样本的补偿方式分为两种:边缘补偿(EO,Edge Offset)和区间补偿(BO,Band Offset)。

边缘补偿EO

在EO模式下,待补偿的样本被划分为4种类型:水平方向、垂直方向、135度对角方向和45度对角方向。每个LCU选择一种类型,然后再根据3个相邻像素点的大小关系,查表得到补偿值。

图5  EO的四种类型

对于种类1和种类2的样点,正值的补偿会使边界更加平滑,负值的补偿使边界更加尖锐。而对于种类3和种类4的样点,相应的补偿将会起到相反的效果。为了减少传输SAO参数的码率,在一个LCU中不同种类的采样点可以采用不同的补偿值,但对于同一种类的样点必须使用相同的补偿值。

图6  EO的4个种类的样点补偿示例

 

区间补偿BO

在BO模式下,根据样本的像素值对样本进行分类,将像素值等分成32个区间。例如,对于8比特的样本,像素值的范围是0到255,那么每个区间的宽度就为8,即[8k,8k+7]这个范围属于第k个区间,k的取值范围为[0,31]。每个区间会根据落在区间内样本的特点选取一个补偿值,同一区间内的所有样本都根据这个补偿值进行样本补偿。因为在LCU内样本的像素值分布较为集中,所以 AVS2只将包含样本较多的4个区间进行补偿值传输到解码端,并且只将这4个区间的位置和对应的补偿值传输到解码端,从而降低编码的开销。

图7  区间补偿BO示例(图片来源:《Advanced Video Coding System》)

自适应环路滤波

为了进一步减少视频压缩引起的失真,AVS2还设计了一种自适应环路滤波器ALF,作用于进行SAO后的重建图像。ALF利用了维纳滤波的思想,在编码端利用原始图像和重建图像计算最小二乘滤波器系数,再用滤波器对重建图像进行滤波,降低压缩后图像中的压缩失真,提高图像质量。在这一过程中,需要计算和编码的是ALF的参数,即滤波器的系数。

图8  ALF滤波器形状

AVS2中采用的是一个7×7十字加3×3方形的中心对称滤波器,虽然利用了17个样点,但是只需要传输9个系数就可以了。对于亮度分量,ALF将图像按照LCU对齐的原则均匀划分为16个区域,对每个区域分别计算对应的ALF系数。对训练得到的ALF系数依次计算相邻区域(按照类Hilbert扫描序号上相邻的区域)合并后得到的率失真代价,选择率失真代价最小的区域进行自适应合并,从中选择率失真代价最小的合并结果,合并区域共用相同的滤波系数。对Cb和Cr两个色度分量,分别设计一套滤波系数。根据率失真代价决定是否对待编码图像进行滤波,亮度和色度分量分别通过帧级标志和LCU级标志来控制ALF滤波器是否使用。

图9  类Hilbert扫描方式

考虑到训练ALF参数造成的编码延时,AVS2设计了一种低延时模式(LL),利用相邻已编码重建的图像进行ALF参数训练,从而降低延时。利用当前编码重建图像训练ALF参数的方式称为高效模式(HE)。

在基于LCU的解码中, ALF是在去块滤波和SAO之后进行的,LCU下边界的几行像素需要用到下方LCU的像素值,因此下方LCU做完去块滤波和SAO之后,当前LCU才能进行ALF。为了解决这一问题,AVS2采用了虚拟边界技术来限定ALF不允许跨LCU的上下边界,虚拟边界位于每个LCU横向边界上方4个像素点位置。如果ALF没有使用虚拟边界的像素点,滤波过程保持不变;如果ALF用到了虚拟边界的像素点,那么需要将滤波器用到的跨虚拟边界的像素值进行调整,使得滤波器不再使用跨虚拟边界的像素及其水平对称位置的像素,从而保证ALF在当前LCU内部进行。调整过程如下图所示:

图10  跨越虚拟边界时的ALF滤波过程

(图片来源:AVS提案M3493)

 

总结

环路滤波在视频编码体系里有着重要的作用,不仅能够极大地减少压缩失真,提高视频的主观质量,还能在一定程度上提高客观性能。因此,环路滤波在新一代的视频标准里得到了广泛的应用。