随着5G的成熟和广泛商用,带宽越来越高,让传输视频变得更加容易。移动设备算力的提升、存储容量的提升,也使得视频技术的应用越来越广泛。视频相关的技术,特别是视频压缩技术,因其专业性,深入开发的门槛较高,在实时通信场景中,视频压缩技术更面临严峻的挑战。因为在实时通信场景下,不仅对时延和设备适配的要求很高,对带宽适应的要求也非常高,因此开发一款满足实时通信要求的编解码器,难度很大。
此前,我们已经在《深入浅出理解视频编解码技术》一文中简要介绍了视频编解码基本框架,也在《揭秘视频千倍压缩背后的技术原理之预测技术》深入分析了该框架中的预测技术,今天我们将继续深入剖析其中的环路滤波模块。
PART 01 什么是环路滤波?
基于块的混合编码框架一直是多种视频编解码标准的核心。在编码视频的时候,人为地将视频分割成不同大小的块,再进行预测和补偿,然后再对预测残差进行变换和量化,这一过程都是基于块进行的,在重建视频的时候,在不同的块的边界上就会出现不连续性,这样的不连续性,也就是常说的“块效应”,如图1-1。
通常人眼会对这样的不连续性比较敏感,很容易感受到视频的清晰度下降。块效应的产生,一方面是由于基于块的变换和量化操作,量化误差导致不同的块的重建样本产生了不同重建值,从而产生了边界;另外,由于运动补偿时,相邻的编码块的预测值,并不一定来自同一帧的相邻块,也会引入虚假边界;类似的,帧内预测不同的预测模式,生成预测值的方式不同,也会引入虚假边界。
为了减少视频中块的不连续性带来的主观质量下降,可以对重建视频进行滤波操作,如图1-2,经过滤波之后,视频的主观质量有了明显地改善,虚假的块边界平滑了,更为接近原始图像。从图中也可以发现,平坦区域,块效应更加明显,纹理丰富的区域(树叶),有自然的图像边界,也有编码引入的块边界,块效应相对不明显,同时,环路滤波器的设计也需要考虑区分“真”、“假”边界,防止对图像本身已经有的自然边界进行平滑,导致失真。
在较早的编码标准中,如MPEG-2,该操作都是在后处理阶段进行的,即视频流在解码重建后,输出之前进行滤波,以减少主观上的不舒适性。从H.263附录J开始,引入了“环路滤波”,之所以叫“环路”或者“In-loop”,是因为该滤波器在解码的闭环当中,如图红色模块所示,码流中的语法元素解析后,进行反量化和反变换,并与预测值叠加,得到重建图像,该重建图像将先进行环路滤波,再输出显示,同时作为参考图像,以便于后续的视频帧进行运动补偿。
由于环路滤波的引入,在提升视频主观质量的同时,也提高了预测的准确性,也进一步提高了编码效率。H.264的环路滤波只有去块滤波一种;从HEVC/H.265开始,环路滤波模块引入了多种类型的滤波器,例如HEVC中的SAO(Sample Adaptive Offset)[1]、AV1中的CDEF(Constrained Directional Enhancement Filter)[2]、LR(Loop Restoration)[3]、VVC中的LMCS(Luma Mapping With Chroma Scaling)、ALF(Adaptive Loop Filter)[4]等。本文将简要介绍HEVC中的去块滤波和AV1中的CDEF,以深入理解环路滤波的作用和效果。
PART 02 HEVC中的去块滤波器
环路滤波的主要功能是去除块效应,设计去块滤波器的主要难点在于对于某一个块边界,是否要进行滤波,以及滤波的强度应该是多少。对块边界进行过度的平滑操作,会导致原有的图像纹理丢失;然而较低强度的平滑,却无法完全去除虚假边界。
因此,去块滤波器不但要考虑图像本身的纹理特性,也要考虑编码时采用的编码参数,如此才能将真正因为编码引入的人为边界去除。HEVC中,8x8的块的水平和竖直的边界是去块滤波的滤波对象,去块滤波器取边界两侧各4个像素点进行滤波。如此一来,去块滤波以8x8为基本单位,并且不同的8x8的样本之间无重叠,可以进行并行处理,提高处理速度。但并非所有的8x8边界都要进行处理,只有满足一定的条件才会进行:
- 该边界是预测单元或者变换单元的边界;
- 块边界的强度非零;
- 边界两侧样本的局部特征满足一定的统计特性。
边界强度
边界强度将决定是否滤波以及滤波器的强度。边界强度可能的取值为0,1,2。取值为0,即不进行滤波操作。边界强度取决到边界两侧的编码块是否是Intra模式,是否有非零系数,是否有不一致的运动方向,是否参考了不同的帧等。这里充分考虑了编码失真才会引入虚假边界这一事实,避免对自然的平坦区域进行不必要的滤波操作。
局部特征
当边界强度非零,将进行一步检查图像的局部统计特征。基本的思路是,假设边界两侧的样本连续变化,这些样本将在一条直线上,换言之,像素点的梯度是一个常量;反之,如果边界两侧的梯度相差较大,则有虚假边界引入,如图3所示。当然,偏离程度与量化参数是相关的,标准给出了不同量化参数下的阈值。为了降低运算的复杂度,只计算第一行(列)和第四行(列)样本偏离直线的程度。同时,该偏离程度也与滤波的强度有一定的联系,它决定了滤波的两种模式,即普通滤波和强滤波。
▲ 图3 块边界两侧样本的局部特性
去块滤波器
普通滤波和强滤波两种模式由边界两侧像素点的梯度根据一定的规则进行决策。在普通滤波模式下,可能修改边界两侧最近的各一个或者各两个像素点,其中p0或者q0的滤波器的冲激响应为(3 7 9 −3)/16,p1或者q1的滤波器的冲激响应为(8 19 −1 9 −3)/32。在强滤波模式下,边界两侧各三个像素点会被修改,对p0、p1、p2的滤波器的冲激响应分别为(1 2 2 2 1)/8、(1 1 1 1)/4、(2 3 1 1 1)/8。
HEVC中的去块滤波与H.264相比,复杂度大大降低了。一方面HEVC的去块滤波是以8x8的块为基本单位,而264是4x4为基本单位;另一方面,HEVC的变换核尺寸和预测单元的尺寸都变大了。除此之外,HEVC的去块滤波的并行度也有了改进,8x8的块的边界两侧各取4个点进行滤波操作,多条边界使用到的像素点互不重叠,可以并行处理;竖直边界和水平边界以帧为单位进行,比H.264以宏块为单位进行更能进一步提高并行度。
PART 03 AV1中的CDEF
CDEF滤波器的基本作用是在保持视频图像细节的前提下,使用非线性的空域滤波器来消除编码中出现的失真。视频中的各种纹理细节,方向多种多样,CDEF首先检测纹理的方向,然后沿纹理的方向进行自适应滤波。
CDEF的纹理检测
为了保持图像本身的纹理细节,滤波操作应当按照纹理的基本方向进行,避免将纹理本身当作失真进行处理,造成质量下降。CDEF被置于去块滤波操作之后,在重建图像上进行纹理检测。纹理检测的基本单元是8x8的块,这样做的好处,既能有效地处理纹理 又可以便于将滤波操作进行并行处理(SIMD优化)。CDEF设计了8种纹理方向,如图4所示。
▲ 图4 CDEF的纹理方向定义 [2]
一个8x8的重建图样块内的像素,搜索某一个方向时,按照该方向定义的不同的分组,对像素进行分组并求其均值,以均值填充分组内的像素,形成一个8x8的“纹理方向预测块”。然后计算它与8x8的重建图像块的平方差的和。各个方向采用相似做法,从而选择最小平方差的和所对应的方向作为最优方向进行滤波操作。
以图5为例,该8x8的重建图像为45度的纹理(第一行方块所示),8组方向如第二行方块所示,按照方向所定义的像素分组,生成了每种方向的“纹理方向预测块”(第三行方块所示),以及对应的RMS(实际运算中只需要计算“纹理方向预测块”的平方和,便可以得到最佳方向)。按照文章[2]给出的该操作的计算复杂度,它和HEVC中8x8的IDCT的复杂度相当。需要指出的是,最佳纹理方向的决策,是标准定义的一部分,需要编码和解码做到完全一致。
▲ 图5 CDEF选择最佳方向示例[2]
Constraint function
CDEF使用非线性低通滤波器来消除编码出现的失真,同时又能保持图像中原有的纹理不被过度模糊。该滤波器的特点是,滤波系数的位置是基于前文中得到的纹理方向的;同时,横穿纹理方向上,当相邻的像素与被处理的像素差别较大时,减少其影响,以防止纹理被过度平滑,即引入了Constraint function。以一维信号为例,该滤波器可以表达为:
其中是滤波器的系数,f(d,S,D)是Constraint function,其表达式为:
它与被滤波的像素与相邻像素的差别大小有关。如果差别较小,f(d,S,D) =d ,就是线性低通滤波器;如果差别较大,f(d,S,D) ,该位置滤波器系数将被忽略。参数S控制了像素差的阈值,参数D控制了f(d,S,D)何时取0。
滤波器的抽头系数
只沿着纹理的方向进行滤波,有的情况下,无法去除纹理两侧出现的假纹理(Ringing失真)。因此,除了在纹理方向上的像素点之外的其它像素点,也要参与滤波。为此,CDEF设计了两组滤波器抽头系数,一组Primary taps,一组Secondary taps。Primary taps就是沿着纹理方向的,而Secondary taps使用了与纹理方向呈45度角的十字,如图7所示。
▲ 图7 Primary taps and Secondary taps[2]
与纹理方向检测一样,非线性滤波操作也以8x8的像素块为基本单元,8x8块内的像素共用同一组滤波参数,为了尽可能的并行处理,滤波器的输入都是去块滤波后的像素,CDEF滤波后的像素不会用作后续CDEF滤波器的输入。滤波器的参数在帧级和块级都有相应的语法元素进行传输,可以满足不同的纹理特性的滤波处理。通常需要在编码器中设计合理的算法,进行CDEF滤波参数的选择。
随着深度学习的蓬勃发展,特别是卷积神经网络在图像恢复、超分、识别、分类等领域表现得非常优秀。深度学习在视频压缩,特别是视频质量恢复和环路滤波领域涌现了许多优秀的算法。卷积神经网络可以更好地提取图像里的纹理等特征,通过学习得到不同纹理特征的对应的网络参数,与人工地基于先验知识(例如CDEF的纹理方向)的滤波算法相比,理论上具有更大优势。例如VRCNN[5]、PRN[6]、RHCNN[7]、Content-Aware CNN[8]、MFRNet[9]等。JVET也专门建立了Exploration Experiments,许多优秀的提案正致力于将深度神经网络应用于视频压缩标准中。环路滤波技术作为混合编码框架中的组成部分,在视频压缩中对提升视频主观质量发挥了至关重要的作用。
[1] Fu, Chih-Ming, et al. "Sample adaptive offset in the HEVC standard," IEEE Transactions on Circuits and Systems for Video technology 22.12 (2012): 1755-1764.
[2] Midtskogen, Steinar & Valin, Jean-Marc. (2018). The Av1 Constrained Directional Enhancement Filter (Cdef). 1193-1197. 10.1109/ICASSP.2018.8462021.
[3] D. Mukherjee, S. Li, Y. Chen, A. Anis, S. Parker and J. Bankoski, "A switchable loop-restoration with side-information framework for the emerging AV1 video codec," 2017 IEEE International Conference on Image Processing (ICIP), 2017, pp. 265-269
[4] M. Karczewicz et al., “VVC in-loop filters,” IEEE Trans. Circuits Syst. Video Technol., early access, Apr. 9, 20217
[5] Dai, Yuanying, et al. "A Convolutional Neural Network Approach for Post-Processing in HEVC Intra Coding" arXiv:1608.06690, 2016.
[6] D. Wang, S. Xia, W. Yang, Y. Hu, and J. Liu, “Partition tree guided progressive rethinking network for in-loop filtering of HEVC,” in 2019 IEEE International Conference on Image Processing (ICIP). IEEE, 2019, pp. 2671–2675.
[7] Y. Zhang, T. Shen, X. Ji, Y. Zhang, R. Xiong, and Q. Dai,“Residual highway convolutional neural networks for in-loop filtering in HEVC,” IEEE Transactions on Image Processing, vol. 27, no. 8, pp. 3827–3841, 2018.
[8] C. Jia et al., "Content-Aware Convolutional Neural Network for In-Loop Filtering in High Efficiency Video Coding," in IEEE Transactions on Image Processing, vol. 28, no. 7, pp. 3343-3356, July 2019
[9] D. Ma, F. Zhang and D. R. Bull, "MFRNet: A New CNN Architecture for Post-Processing and In-loop Filtering," in IEEE Journal of Selected Topics in Signal Processing, vol. 15, no. 2, pp. 378-387, Feb. 2021