HEVC:Encoder-only GOP-based temporal filter(基于GOP的时域滤波)

Encoder-only GOP-based temporal filter


前言

HEVC在HM的编码器中提出了仅供编码器的时域滤波器。该过滤过程是在编码器端作为预处理步骤完成的。首先读取要编码的所选图片之前和之后的源图片(最新的代码中选取的是之后的4帧图像),并将与所选图片相关的基于块的运动补偿方法应用于这些源图片。然后,使用运动补偿后的样本值对所选图片中的样本进行时域滤波。
滤波器强度的设置取决于所选图片所处的时间层以及QP值的大小。只有时间层是0和1的图片会被过滤,并且层0的图片的滤波器强度比层1的图片更强。根据所选图片中的样本值与运动补偿图片中的同位样本之间的差值来调整每个样本过滤器的强度,使得运动补偿图片和所选图片之间的小差异比较大的差异被过滤得更强烈。
据官方文档,当允许 2 个图片lookahead时,该方法在HM-16.20中平均 Y/U/V BDBR是 -4.5%/-6.4%/-5.9% (RA)、-3.3%/-4.5%/-5.3% (LDB) 和 -5.0%/-6.0 %/−6.3% (LDP) 。当没有图片lookahead时,LD的BDBR为 -0.2%/-0.9%/-1.5% (LDB) 和 -1.4%/-1.8%/-2.2% (LDP)。 所有的这些数据都是使用未过滤的源序列计算的。
在HM中,该算法的开关为m_gopBasedTemporalFilterEnabled。


一、简介

HM编码器的目标是最小化每个块的速率 * λ+失真度量。
如果下一张图片是相同的,则编码块也可能未修改地用于该图片。在这种情况下,应该最小化速率 * λ+2 * 失真。同样,可以更改 lambda。HM通过在不同的时间层设置不同的QP来近似这一点。
如果下一张图片仅略有不同,则编码块仍可能未修改地用于该图片。在这种情况下,应该最小化速率*λ+失真1+失真2。不是分别计算两个失真,而是可以计算编码块与两个图片原始版本的平均值之间的失真。这就是对原始图片进行时间过滤的动机。如果原始图像不同,过滤强度会迅速下降,因为为第一张图片编码的块不再可能被重新用于第二张图片。

二、算法

1. GOP Based Temporal Filter

在读取图片之后和编码之前直接引入时域滤波器。以下是更详细描述的步骤。
第1步:图片被编码器读取
第2步:如果图片在编码层次结构中足够低,则在编码之前对其进行滤波。否则,图片将在没有过滤的情况下进行编码。在RA中,POC % 8 == 0的图片会被滤波,而在LD中, POC % 4 == 0 的图片会被滤波。在AI模式下,图片从不被滤波。
在RA模式下,总滤波器强度so根据下面的等式设置。
在这里插入图片描述
其中 n 是读取的图片数量。在LD模式下,so为定值,0.95。
第3步:读取所选图片(以下称为原始图片)之前和/或之后的两张图片。在边缘情况下,例如如果是第一张图片或接近最后一张图片,则仅读取可用图片。
第4步:对于所读取的图片,针对每个8x8的块做运动估计。运动估计是与原始图片做对比进行的。
在这里插入图片描述

在实际运动估计过程中,本算法使用分层运动估计方案,层 L0、L1 和 L2,如上图所示。通过对所有读取的图片和原始图片的每个2x2块做平均值来生成下采样图片(即图 1中的L1)。L2是使用相同的下采样方法从L1导出的。也就是说L1是1/2下采样图像,L2是1/4下采样图像。
首先,对L2中的每个16x16块进行运动估计。为每个选定的运动矢量计算平方差,并选择对应于最小平方差的运动矢量。然后在做L1中的运动估计时将所选运动矢量用作初始值。然后做上述相同的操作选择最优的运动矢量。最后使用L0上的插值滤波器为每个8x8块估计子像素运动。
本算法使用了 VTM中的6抽头插值滤波器:
在这里插入图片描述
第5步:根据每个块的最佳匹配运动,对原始图片前后的图片进行运动补偿。
第6步:分别处理亮度以及色度块,如以下步骤所述。
第7步:新的样本值In使用以下公式计算。
在这里插入图片描述
其中Io为原始样本的样本值,Ir(i)为运动补偿图片i对应样本的强度,wr(i,a)为可用运动补偿图片数量为a时运动补偿图片i的权重。
在亮度通道中,权重wr (i,a) 定义如下:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

对于 i 和 a 的所有其他情况:sr (i,a)=0.3
在这里插入图片描述
对于色度通道,权重 wr (i,a) 定义如下:
在这里插入图片描述
其中 sc=0.55,σc=30。
第8步:过滤器应用于当前样本。生成的样本值单独存储。
第9步:使用被过滤的图片进行编码。

HM中的实现主要是在这个函数中:

    if (m_gopBasedTemporalFilterEnabled)
    {
      temporalFilter.filter(pcPicYuvOrg, m_iFrameRcvd);
    }
  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

sheldonma

感谢大佬赏饭

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值