VVC/VTM: 自适应环路滤波(ALF, Adaptive Loop Filtering)中维纳滤波(Wiener Filtering)的公式推导 | 您所在的位置:网站首页 › 视频编解码流程怎么做的 › VVC/VTM: 自适应环路滤波(ALF, Adaptive Loop Filtering)中维纳滤波(Wiener Filtering)的公式推导 |
0 前言
自适应环路滤波(ALF)并不是在 H.266/VVC 标准制定过程中才被提出来的技术,实际上其早在 H.265/HEVC 标准制定时就基本确定了现有形式的雏形,只是由于当时硬件算力的限制未能加入到 HEVC 标准中。详细可阅读以下的论文。随着硬件算力的提升与一些优化方法的提出,以及人们对更高效率的编解码算法的期望,ALF 自然就成了 VVC 标准中不可或缺的部分。由于 ALF 是一个十分有效的手段,也就吸引力不少人去研究,很多率失真改进方法不断被提出,所以基本每一次会议之后都能看到一些不同的地方。我第一次详细地接触研读 ALF 是在 VTM2 发布的时候,后来到了 VTM4 再去看代码时已经多了很多没见过的东西。但总之,其内核是不会改变的,所以这里我主要就其滤波的原理进行介绍,这些目前在网上的资料是比较少的,也可以让大家能够更好地理解 VTM 代码里的相关实现。 [1] C. Tsai et al., Adaptive Loop Filtering for Video Coding, in IEEE Journal of Selected Topics in Signal Processing, vol. 7, no. 6, pp. 934-945, Dec. 2013. ALF 模块处于去块效应滤波(Deblocking Filtering, DF)和样点自适应补偿(Sample Adaptive Offset, SAO)之后。相比于 DF 和 SAO,ALF 更加贴近于我们对图像滤波的一般理解,也就是说其可以表示为图像与卷积核之间的卷积运算。而至于所使用卷积核,当然不是什么高斯模糊、边缘检测之类的,视频编解码算法里降低码率和误差才是王道。靠滤波来直接降低码率自然是不行的,那是熵编码干的活,那什么滤波可以降低误差呢?没错,就是维纳滤波(Wiener Filtering, WF)。维纳滤波是一种基于最小均方误差准则、对平稳过程的最优估计器,其输出与期望输出之间的均方误差为最小。然而,要注意的是,维纳滤波并不是一种现成的滤波器,其只是确立了一种准则,具体还是要自己设计的,在信号与系统里也就是找到相应的系统冲激响应,在离散图像里也就是要找到相应的卷积核。因此,下面的内容将就该卷积核的求导进行详细的介绍。 1 滤波器形状虽然维纳滤波并没有限制所用的滤波器形式,但我们还是要综合考虑其实现的难度以及所能带来的增益。在图像处理中,最方便、直观的滤波方式就是采用一个矩形的卷积核,ALF 也遵循这种习惯。不过,很显然,卷积核的尺寸越大,所获得的增益一般来说会越大,但其所带来的计算复杂度也就越高,而且这种增益和复杂度之间的关系并不是线性的。另外,维纳滤波是和原始数据相关的,而解码端是不可能接触到原始数据的,那就意味着我们必须要把解码端所求得的滤波系数编到码流中进行传输,所以我们也不能把卷积核弄得太大。 考虑以上因素,H.266 定义了两种形状的滤波器,其中对亮度分量使用 7x7 的滤波器,而对色度分量采用 5x5 的滤波器。为了减少传输滤波器系数的码字以及降低滤波的计算复杂度,ALF 使用了菱形且中心对称的滤波系数矩阵,其形状如图 1 所示,也就是只有菱形内的像素会参与滤波,而中心对称的像素使用相同的滤波系数,其中滤波器中心的位置即是当前滤波的像素位置。对于亮度分量,H.266 定义了最多 25 组滤波系数,像素所属分组基于重建后的图像以 4x4 小块为单位根据该块以及周围像素的梯度信息进行推导,该块内所有像素均属于同一组。而对于色度分量,Cb,Cr 各自只定义一组系数。三个分量独立进行率失真优化与系数推导以及最终的滤波。具体亮度分量像素的分类在标准文档中有详细介绍,这里不多说。
对于 ALF 来说,由于其卷积核是中心对称的,如图 1 所示,所以在求解过程中可以将相同系数的像素值先合并再计算,即 求得相应的滤波系数后,我们还得通过率失真优化(Rate-Distortion Optimization, RDO)才能确定是否采用这个结果,因为前面已经提到了,我们必须把这些系数编到码流中供解码端使用,所以滤波所能减小的误差不一定能够弥补码字的损失。至于 RDO 的具体流程这里不作介绍,我们主要关注怎么去快速地求得滤波后的误差。 一个直观的想法是,我们利用求得的滤波系数,对集合中每一个像素进行滤波,那么就可以得到滤波后的像素值了,相应的均方误差(MSE)自然也就可以求得了。然而,其所需的计算复杂度也是非常高的,更不用说 RDO 过程中这种计算还得重复很多次了。如果 ALF 使用这种方法,那它也别想成为 VVC 标准的一部分了。实际上,由于维纳滤波的特殊性,其 MSE 是可以跳过实际滤波这步操作而直接快速求得的,也就是说,在 RDO 过程中,我们根本就不需要进行真正的滤波。 根据 MSE 的定义,有
似乎到这里相关的内容就讲完了,但实际上 VTM 代码中并没有使用这个公式来求 MSE,因为这里有一部分的计算和其他模块的计算重复了。没错,那就是不使用 ALF,即直接使用 DF 和 SAO 的输出作为最终输出时的 MSE,而这个 MSE 是我们在 RDO 过程中必须用到的,毕竟这是确定 ALF 有没有用的基准。那为什么上面的公式会产生冗余呢?这里包含了一个简单的小技巧。 我们令卷积核中心的系数(即当前滤波的像素位置的系数)减 1,即
这里主要是对 ALF 中所使用到的维纳滤波的原理以及一些优化的技巧进行了详细的介绍,但这些只是 ALF 模块的比较小的组成部分。ALF 之所以能有那么大的改进,还离不开一些精妙的设计以及复杂的 RDO 过程,这方面的提案也是非常多的,在这里就不进行介绍了,毕竟我也看不完。就这样。。。 |
CopyRight 2018-2019 实验室设备网 版权所有 |