文章目录
VTM中环路滤波的顺序:LMCS,deblocking filter,SAO 和ALF。其中deblocking filter和SAO 与HEVC中的相同。
Adaptive Loop Filter (ALF)
ALF代码详细过程见博文:https://blog.csdn.net/baidu_28446365/article/details/89927944
关于自适应滤波的原理,建议参考论文《Adaptive Loop Filtering for Video Coding》
ALF,自适应环路滤波,对于每个4x4的小块,根据direction and activity of local gradients从25个滤波器中选择一种对其进行滤波。
简单来说,ALF将每个4x4的小块分为25种(根据方向性和梯度值),同一种类的小块使用同一种滤波器进行滤波,那么编码器总共只需要传输25组滤波器的滤波系数。
因此提高ALF效率的关键主要在于以下几点:如何准确的进行块分类,如何选择滤波的形状,如何传输滤波器系数可节省比特数。
1.滤波形状(Filter shape)
使用如下所示两种钻石形状的滤波器,5x5大小的适用于色度分量,7x7适用于亮度分量。
2.块分类(Block classification)
对不同的小块使用不同的滤波器,因此需将这些小块进行分类,以区分出小块要使用的滤波器是哪一种。
对于亮度分量,每个4x4小块被分为25个种类,类别Idx计算规则如下:
其中D和A分别表示当前块的Direction和Activity;计算之前需要先用1-D拉普拉斯算子计算当前块的水平、垂直和两个对角方向的gradient如下:i和j为4x4小块左上角像素点的坐标,R(i,j)表示坐标(i,j)处的重建像素。
为了降低块分类的复杂度,VTM采用了基于下采样的1-D拉普拉斯计算,下采样如图所示
水平垂直方向上D的最大最小值如下
对角线方向上D的最大最小值如下
根据上述四个值以及阈值和,设置D的值,规则如下:
A的计算公式如下:
然后将其归一化到[0,.4]范围内,得到量化后的A。
对于色度分量,无需进行块分类,直接使用同一种滤波器。
3.滤波系数的几何变换(Geometric transformations of filter coefficients)
为了简化滤波操作,在滤波器前对滤波系数进行变换操作(旋转、垂直翻转、对角翻转),具体进行哪一种翻转取决于第一步中计算得到的gradient。
几何变换包括三种,对角翻转Diagonal、垂直翻转Vertical flip、旋转Rotation:
其中K为滤波器尺寸,为滤波系数坐标,例如(0,0)表示左上角,(K-1,K-1)表示右下角。
根据4个gradient决定变换方式:
4.滤波参数signal(Filter parameters signalling)
ALF滤波器参数被标记在slice header中。最多标记25租滤波器参数。为了减少比特开支,不同类别的滤波器参数可以merge。
滤波过程可以在CTB level用标志位flag进行控制。对于色度分量CTB,用alf_chroma_ctb_present_flag表示色度CTB是否进行ALF。
The filter coefficients are quantized with norm equal to 128.??为了进一步降低复杂度, a bitstream conformance is applied,中心位置的系数控制在,其他位置的系数控制在。
5.滤波过程(Filtering process)
样点R(i,j)滤波后得到,L为filter length,为滤波系数,为decoded filter coefficients.