Adaptive Loop Filter (ALF)

Karczewicz, Marta, et al. “VVC in-loop filters.” IEEE Transactions on Circuits and Systems for Video Technology 31.10 (2021): 3907-3925.

A. Filter Shapes, Linear Filtering and Adaptive Clipping

ALF被应用于SAO的输出样本。亮度和色度分量分别支持7×7菱形和5×5菱形两种滤波器形状,如图2所示。在图2中,每个正方形对应于亮度或色度样本,中心正方形对应于待滤波的DC样本。为了减少信令开销和乘法次数,滤波器系数使用点对称。每个整数滤波器系数\(c_i\)用7-bit分数精度表示。此外,为了保持DC中性,一个滤波器的系数之和必须等于128,这是具有7-bit分数精度的1.0的定点表示(1):

\(\begin{aligned}2\sum_{i=0}^{N-2}c_i+c_{N-1}=128. & \left({\mathbf{1}}\right)\end{aligned}\)

在等式(1)中,对于 7 × 7 和 5 × 5 滤波器形状,系数 N 的数量分别等于 13 和 7。

通过将系数 \(c_i\) 应用于重构样本值 \(R(x, y)\)来导出坐标 (x, y) 处的滤波样本值 \(\tilde{R}(x,y)\),如下所示(2):

\(\begin{aligned}\tilde{R}(x,y)=&\left[\sum_{i=0}^{N-2}c_i\left(R\left(x+x_i,y+y_i\right)+R\left(x-x_i,y-y_i\right)\right) \\
+c_{N-1}R\left(x,y\right)+64\right]>>7,& \left({\mathbf{2}}\right)\end{aligned}\)

其中 \((x + x_i, y + y_i)\) 和 \((x − x_i, y − y_i)\) 是对应于第 i 个系数 \(c_i\) 的重构样本的坐标。 由于等式(1)的约束,等式(2)可以写为(3):

\(\begin{aligned}
\tilde{R}\left(x,y\right)& =R\left(x,y\right) \\
&+\left\{\left[\sum_{i=0}^{N-2}c_i\left(R\left(x+x_i,y+y_i\right)-R\left(x,y\right)\right)\right.\right. \\
&\left.+\sum_{i=0}^{N-2}c_i\left(R\left(x-x_i,y-y_i\right)-R\left(x,y\right)\right)+64\right] \\
&\left.>>7\right\}.& \left({\mathbf{3}}\right)
\end{aligned}\)

基于等式(3),通过将待滤波样本\(R(x, y)\)与其相邻样本之间的差的加权和添加到重构样本\(R(x, y)\)来获得滤波样本 \(\tilde{R}(x,y)\)。

等式(3)中的系数对于处于与待滤波样本相同的相对几何位置的所有样本是相同的。与仅考虑图片样本的几何接近度的线性滤波器不同,诸如双边滤波器的非线性滤波器也可以基于样本值的相似性来调整其系数。因此,双边滤波器可以在保留边缘的同时有效地去除噪声。为了允许ALF滤波器考虑样本之间的空间关系和值相似性,在等式(3)中添加clip相邻样本值和当前待滤波样本之间的差的可能性。当启用非线性ALF时,方程(3)修改如下:

\(\begin{aligned}
\tilde{R}\left(x,y\right)& =R\left(x,y\right) +\left[(\sum_{i=0}^{N-2}c_if_i+64)>>7 \right] & \left({\mathbf{4}}\right)
\end{aligned}\)

其中

\(\begin{aligned}f_i&=\min\left(b_i,\max\left(-b_i,R\left(x+x_i,y+y_i\right)-R\left(x,y\right)\right)\right)\\ &+\min\left(b_i,\max\left(-b_i,R\left(x-x_i,y-y_i\right)-R\left(x,y\right)\right)\right) & \left({\mathbf{5}}\right)\end{aligned}\)

\(b_i\)是由clipping索引\(d_i\)确定的系数\(c_i\)的clipping参数。\(b_i\)推导如下:

\(\left.b_i=\left\{\begin{array}{ll}2^{BD},&\text{when }d_i=0\\2^{BD-1-2d_i},&\text{otherwise}\end{array}\right.\right.\left({\mathbf{6}}\right)\)

其中BD是样本比特深度,\(d_i\)可以是0、1、2或3。

B. Luma Sub-Block Level Filter Adaptation

子块级滤波器自适应仅应用于亮度分量。每个4×4亮度块根据其方向性和2D拉普拉斯活动进行分类。首先,计算水平、垂直和两个对角线方向的样本梯度值:

\(\begin{aligned}
H_{k,l}=\left|2R\left(k,l\right)-R\left(k-1,l\right)-R\left(k+1,l\right)\right|, \\
V_{k,l}=\left|2R\left(k,l\right)-R\left(k,l-1\right)-R\left(k,l+1\right)\right|, \\
D0_{k,l}=\left|2R\left(k,l\right)-R\left(k-1,l-1\right)-R\left(k+1,l+1\right)\right|, \\
D1_{k,l}=\left|2R\left(k,l\right)-R\left(k-1,l+1\right)-R\left(k+1,l-1\right)\right|. & \left({\mathbf{7}}\right) \end{aligned} \)

基于样本梯度,子块水平梯度\(g_h\)、垂直梯度\(g_v\)和两个对角线梯度\(g_{d0}\)和\(g_{d1}\)计算如下:

\(\begin{aligned}
g_h=\sum_{k=i-2}^{i+5}+\sum_{l=j-2}^{i+5}H_{k,l}, \\
g_v=\sum_{k=i-2}^{i+5}+\sum_{l=j-2}^{i+5}V_{k,l}, \\
g_{d0}=\sum_{k=i-2}^{i+5}+\sum_{l=j-2}^{i+5}D0_{k,l}, \\
g_{d1}=\sum_{k=i-2}^{i+5}+\sum_{l=j-2}^{i+5}D1_{k,l},
& \left({\mathbf{8}}\right)\end{aligned}\)

索引\(i\)和\(j\)是指4×4亮度块中左上角样本的坐标。从等式(8)中可以看出,覆盖目标4×4块的10×10亮度窗口内的样本梯度之和用于对该块进行分类。为了降低复杂性,只计算10×10窗口中间隔样本的梯度,如图3所示。其他采样梯度的值设置为0。

其次,分配方向性D,子块水平和垂直梯度的最大值和最小值的比值:

\(g_{h,v}^{max}=max(g_h, g_v),g_{h,v}^{min}=min(g_h,g_v) \left({\mathbf{9}}\right)\)

以及两个子块对角线梯度的最大值和最小值之比:

\(g_{d0,d1}^{max}=max(g_{d0}, g_{d1}),g_{d0,d1}^{min}=min(g_{d0},g_{d1}) \left({\mathbf{10}}\right)\)

相互比较并且与一组阈值t1和t2进行比较:

步骤1:如果\(g_{h,v}^{max} \le t1\cdot g_{h,v}^{min}\)和\(g_{d0,d1}^{max} \le t1\cdot g_{d0,d1}^{min}\),D都设置为0(块被归类为“texture”)。

步骤2:如果\(g_{h,v}^{max} / g_{h,v}^{min}>g_{d0,d1}^{max} /g_{d0,d1}^{min}\),则在步骤3中计算方向性D,否则在步骤4中计算。。

步骤3:如果\(g_{h,v}^{max}>t2\cdot g_{h,v}^{min}\),D设置为2(块被归类为“强水平/垂直”),否则D设置为1(块被分类为“弱水平/垂直“)。

步骤4:如果\(g_{d0,d1}^{max}>t2\cdot g_{d0,d1}^{min}\),D设置为4(块被归类为“强对角线”),否则D设置为3(块被分类为“弱对角线”)。

只有在前面的步骤中没有分配给D的值的情况下,才执行上述D计算中的每个后续步骤。第三,活动值A计算为:

\(A=\left(\sum_{k=i-2}^{i+5}\sum_{l=j-2}^{j+5}\left(V_{k,l}+H_{k,l}\right)\right)>>\left(BD-2\right). \left({\mathbf{11}}\right)\)

A被进一步映射到0到4的范围:\(\hat A=Q_{min(A,15)}\),其中\(Q_n=\{0, 1, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 4\}\)。最后,每个4×4亮度块被分类为25类中的一类:

\(C=5D+\hat A \left({\mathbf{12}}\right)\)

每个类都可以分配自己的滤波器。

在对每个4×4亮度块进行滤波之前,根据表I中指定的子块梯度值,对滤波器系数应用几何变换,如90度旋转、对角线或垂直翻转,如图4所示。这相当于将这些变换应用于滤波器支持区域中的样本。目标是对齐不同块的方向性,以减少ALF类的数量,进而减少滤波器系数。应用几何变换允许具有水平边的4×4块和具有垂直边的4×4块都具有相同的方向性D。

C. Coding Tree Block Level Filter Adaptation

除了亮度4×4块级滤波器自适应外,ALF还支持CTB级滤波器自适应。亮度CTB可以使用为当前slice计算的滤波器集或者为已经编码的slice计算的一个滤波器集。它还可以使用16个离线训练的过滤器集中的一个。在每个亮度CTB内,所选滤波器集中的哪个滤波器应应用于每个4×4块,由该块的等式(12)中计算的类别C确定。

Chroma仅使用CTB级滤波器自适应。一个片中的色度分量最多可以使用8个滤波器。每个CTB可以选择这些过滤器中的一个。

D. Syntax Design

滤波器系数和clipping索引被携带在ALF APS中。ALF APS可以包括多达8个色度滤波器和一个具有多达25个滤波器的亮度滤波器组。对于25个亮度类别中的每一个,还包括索引\(i_C\)。具有相同索引\(i_C\)的类共享相同的滤波器。通过合并不同的类,减少了表示滤波器系数所需的比特数。滤波器系数的绝对值使用后面跟有非零系数的符号位的0阶Exp-Golomb码来表示。当clipping被启用时,还使用两位固定长度代码来用信号通知每个滤波器系数的clipping索引。APS内的ALF系数和clipping索引所需的存储最多为3480比特。解码器可以同时使用多达8个ALF APS。

滤波器控制语法元素包括两种类型的信息。首先,ALF开/关标志在序列、图片、Slice和CTB级别用信号通知。只有在相应级别启用亮度ALF时,才能在图片和切片级别启用色度ALF。第二,如果在图片、Slice和CTB级别启用ALF,则在该级别用信号通知滤波器使用信息。如果图片内的所有Slice都使用相同的APS,则参考ALF APS ID以Slice级别或图片级别进行编码。亮度分量可以参考多达7个ALF APS,色度分量可以参考1个ALF APS。对于亮度CTB,用信号通知指示使用哪个ALF APS或离线训练的亮度滤波器集的索引。对于色度CTB,索引指示使用参考APS中的哪个滤波器。

E. Line Buffer Reduction

为了减少ALF的存储需求,VVC采用了行缓冲边界处理。在VVC中,行缓冲器边界被放置在水平CTU边界之上的4个亮度样本和2个色度样本。当将ALF应用于行缓冲区边界一侧的样本时,不能使用行缓冲区边缘另一侧的样本。

图5给出了两个例子,其中4×4亮度块与行缓冲区边界相邻。当将ALF应用于图5(a)中的行E至H中的4×4亮度块时,如果没有行缓冲区边界处理,则需要使用DBF和SAO过滤的行B至K的样本。在较低的CTU可用之前,DBF和SAO过滤器不能应用于行A到D。因此,在没有行缓冲器的情况下,ALF不能应用于行E至H中的样本,直到较低的CTU可用为止。结果,除了行A到D之外,从E到K的7个亮度行将必须存储在用于亮度ALF的行缓冲器中。类似地,4个附加色度行将必须存储在色度ALF的行缓冲器中。

图5还说明了当对与行缓冲区边界相邻的4×4亮度块进行分类时样本梯度值的计算。为了计算与行缓冲区边界相邻的样本梯度值(标记为×),应用重复填充来替换无法使用的样本。例如,在图5(a)中,用行E中的样本替换行D中的样本。行缓冲区边界另一侧的所有样本梯度值都设置为0。由于我们将一些样本梯度值设置为0,从而减少了样本梯度的总和,因此方程(11)中的A推导按如下比例缩放:

\(A=\left(\sum_{k=i-2}^{i+5}\sum_{l=j-2}^{j+5}\left(V_{k,l}+H_{k,l}\right)\cdot 3 \right)>>\left(BD-1\right). \left({\mathbf{13}}\right)\)

行缓冲区边界滤波应用如图6所示的对称样本填充,其中p12标记待滤波样本,p0至p24是SAO之后的样本值,p’0至p’24是修改后的样本值。当待滤波样本的滤波器形状不越过行缓冲区边界时,在滤波过程中使用SAO之后的样本值。否则,将在滤波过程中使用修改后的值。与重复填充相比,对称样本填充已被证明可以产生不太明显的视觉伪影。然而,当要滤波的样本位于最靠近行缓冲区边界的行中时,如图6(a)所示,2D滤波器等效于水平滤波器,它仍然会引入明显的视觉伪影。

通过将滤波器强度减少8倍来最小化这些伪影,从而得出以下公式,其中等式(4)中的偏移7被偏移10代替:

\(\tilde{R}\left(x,y\right)=R\left(x,y\right)+\left[\left(\sum_{i=0}^{N-2}c_if_i+512\right)>>10\right]\)

F. ALF Encoder Design in VTM

这里描述VTM-9.0中的ALF编码器实现。编码器通过最小化率失真成本来计算ALF语法元素的值,所述率失真成本是失真的加权和,所述失真被测量为原始样本和应用ALF滤波器之后的样本之间的平方误差,以及传输ALF语法元素所需的比特数。滤波器系数是通过求解Wiener-Hopf方程来计算的。采用平方误差估计方法,允许在不执行实际滤波操作的情况下计算滤波失真。针对clipping 索引的所有可能组合收集计算滤波器系数和估计失真所需的统计信息。分别收集每个CTB的统计数据,在亮度成分的情况下,收集每个CTU的每个类别的统计数据。

1) 亮度分量:对于每个图片,基于该图片的统计信息,获得亮度分量的新滤波器集,表示为FY,D,如下所示:
(1) 编码器通过合并启用ALF的CTB的统计信息来导出滤波器集FY,D。在第一次迭代中,假设为所有CTB启用ALF。
(2) 基于使用导出的滤波器计算的速率失真成本和CTB的统计来为每个CTB确定是否应用ALF滤波器。

步骤1)和2)重复4次。

当设计在步骤1)中设置的亮度滤波器时,编码器首先为25个亮度类别中的每一个计算滤波器。然后将合并算法应用于这25个滤波器。在每次迭代中,通过合并两个滤波器,该算法将滤波器的数量减少1。为了确定应该合并哪两个滤波器,对于每对剩余的滤波器,编码器通过分别合并两个滤波器和相应的统计数据来重新设计滤波器。使用重新设计的滤波器,然后估计失真。编码器以最小的失真合并该对。获得25个滤波器组,第一组具有25个滤波器,第二组具有24个滤波器,以此类推,直到第25组包含单个滤波器。选择最小化率失真成本的集合,包括对滤波器系数进行编码所需的比特。

在设计滤波器时,迭代计算clipping 索引和N−1滤波器系数,直到平方误差不减小。在每次迭代中,clipping 索引的值都会逐一更新,从索引d0开始,一直到达到索引dN−2。更新索引时,最多测试3个选项:保持其值不变、增加1或减少1。针对这3个值计算滤波器系数和近似失真,并选择使平方误差最小化的值。在第一次迭代开始时,clipping 索引的值被初始化为2,或者当合并两个滤波器时,di的值被设置为这些滤波器的对应剪裁索引的平均值。

亮度分量还可以使用离线训练的滤波器集和可用ALF APS中携带的亮度滤波器集。通过访问APS,从最近发信号到最后一个,编码器获得多达7个亮度滤波器组,这些滤波器组表示为FiY,APS,其中i=0,。。。,NAPS−1。亮度ALF语法元素的最终值是通过选择滤波器集Fij的最佳组合来获得的,其中i=0,1和j=0,。。。,NAPS

· 16个离线训练的滤波器集,
· FY,D,如果i=1,
· F0Y,APS ,…, Fj-1Y,APS, 如果j>0

2) 色度分量:基于当前图片统计,计算色度滤波器组FC,D。导出8个色度滤波器组,表示为FiC,D,其中i=1,2,。。。,7, 8.滤波器组FiC,D包含i个滤波器。滤波器组FiC,D如下获得:

1) 当前图片被均匀地划分为i个区域。对于每个区域,通过合并该区域中所有CTB的统计信息来计算色度滤波器。
2) 对于图片中的每个色度CTB,ALF开/关标志和来自集合FiC,D的滤波器索引被确定为最小化估计的速率失真成本。
3) FiC,D中的每个滤波器通过合并色度CTB的统计来重新设计,其中在步骤2)中为其选择了当前要重新设计的滤波器。
4) 步骤2)和3)重复i+1次。

选择使速率失真成本最小化的滤波器组FiC,D作为色度滤波器组FC,D。最后,编码器从可用的APS中选择FC,D或滤波器组之一,以用于色度分量。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注