LOOP RESTORATION,环内重建滤波器,是一个重要的增强图像质量处理方法。它包含了两种滤波器,编码器会从两者中选择其一。Wiener Filter(维纳滤波器)采用可分离的对称设计。SelfGuided(自导向投影滤波器)使用两个重建信号的线性组合来近似真实信号。编码器通过比较滤波结果,选择合适的参数,并传输给解码器。
图像重建是一个比较成熟的领域,它包含了很多专业技术可用,比如 deblocking、deblurring、deringring、debanding、denoising、constrast enhancement、sharpening 和 resolution enhancement。
switchable restoration framework(可切换的恢复框架)
在AV1
中实现的 restoration 工具是可切换的恢复框架,该框架中 restoration 工具在每个 tile 之间切换。restoration 的 tile size 是可选的,包括256x256
、128x128
、64x64
。通常情况下,对高分辨率的源,选择更大的 tile size。
对每一帧和每个组件(Y/CbCr),frame_restoration_type
符号会被发送。对于 Y 组件,符号有如下几个值:
- RESTORE_NOEN: 不恢复帧。
- RESTORE_WIENER: 帧中的每个 tile 可能不恢复或者使用 wiener 滤波。
- RESTORE_SGRPROJ:帧中的每个 tile 可能不恢复或者使用 self-guided 滤波。
- RESTORE_DOMTXFMRF: 帧中的每个 tile 可能不恢复或者使用 Domain Transform Recursive 滤波。
- RESTORE_SWITCHABLE: 帧中的每个 tile 可能不恢复或者使用任何支持的滤波工具。
对 chroma components 来说,只有上面的前三个滤波。
根据每个 component 的帧恢复类型,对每个 tile 会有额外的信息来表示实际的恢复类型,如有需要,可能也会有额外的信息。编码器会根据使用的 restoration 来对合适的 RD。解码器只是将受到的信息解码出来并用到滤波器上。
注意:除了 domain transform filter外,其他的滤波器在解码器至少需要 3 行未滤波的像素。此外,解码器操作足够简单,对硬件非常友好。也正因为这个原因,AV1 解码器中删除了 Domain Transform filter。
Wiener Filter 维纳滤波器
Degraded 帧的每个像素都经过维纳滤波,维纳滤波的系数存在码流中。因为归一化和对称性,对于垂直和水平滤波器,只需要从编码端传递三个参数。编码器决定使用的滤波抽头(filter tap),解码端只是简单的使用从码流中获取的滤波抽头。
分析DAV1D
解码中,维纳滤波主要分为三步:
- 填充数据(padding),此步骤主要目的是为后面的滤波做准备,将后面用到的像素汇集到一起。因为此步骤并没有改变一些像素的值,只是为了后面的滤波更加方便,所以该步骤在优化时,可以去掉,直接进行滤波,这样就少了一步数据拷贝,可以提升解码效率,在它的 ARM 汇编的实现中,就是这样做的。
- 水平滤波。该步通过水平滤波,将上面的填充数据滤波到另外一个临时数组中,水平滤波后的数据时为下一步的垂直滤波做数据准备的。
- 垂直滤波。该步通过垂直滤波,将水平滤波结束的数据重新放回最初原始数据的位置,从而完成对像素的整个维纳滤波。