去块率波 Deblocking filter
基于块的视频编码的一个典型特点就是在图像中会出现偶发的可察觉的块结构,这是由于重构块的边缘像素与块内部像素相比恢复精度要低,块效应是目前压缩编码最明显的视觉失真之一。在H.264/ AVC视频编码标准中,块效应有两种来源。最显著的一个是在Intra和Inter帧预测残差编码中的整数4×4变换,对变换系数的粗量化会导致可见的块边缘不连续。第二个是来自运动补偿预测。预测从可能的不同参考帧中把内插像素数据拷贝出来形成运动补偿块,由于几乎没有正好合适的数据,被拷贝块的数据引起的边缘不连续性会上升;另外,在拷贝过程中参考帧中存在的不连续性又被搬到将要被补偿块的内部。虽然H.264/AVC使用的4×4变换尺寸多少使这种效应变得不很明显,但为了增强编码性能,一个去块效应滤波器仍旧是很有用的工具。
滤波器被应用到每个解码模块以减少由块效应所引起的失真.在编码端,进行反变换之后,再应用去块效应滤波器(在重建和存储宏块用于将来预测之前);在解码端,在重建和显示之前,应用去块效应滤波器.滤波器平滑了块的边界,改善了解码帧的质量.滤波后的宏块被用于将来帧的运动补偿预测,这能够提高压缩性能,因为滤过的图像比一个有块效应的未滤波的图像更接近原始图像.滤波器的默认操作如下,编码端可以选择滤波器的强度或者禁止使用滤波器.(JM18.6中的字段Macroblock结构体中的DFDisableIdc用来控制滤波器的使用或禁止,0表示使用滤波器,1表示禁止)
边界强度 滤波输出的选择依赖与边界强度和边界上图像象素的梯度.边界强度参数BS依据一下原则进行选择(编码是逐行帧时) : 1) p或q是帧内编码的,同时边界是宏块边界,则BS=4(最强的滤波强度) 2) p或q是帧内编码的,同时边界不是宏块边界,则BS=3 3) p和q都不是帧内编码的,同时p或q包含编码系数,则BS=2 4) p和q都不是帧内编码的,同时p和q都不包含编码系数,p和q使用不同的参考帧或者使用不同数目的参考帧或者两者运动矢量差值大于一个亮度象素,则BS=1,否则BS=0 应用这些原则的结果是在可能有明显块效应出现的地方滤波强度很大,例如帧间编码宏块的边界以及包含编码系数的块之间的边界. 滤波器判决 集合(p2,p1,p0,q0,q1,q2)的一组象素值在下列情况下才进行滤波: 1) BS>0 2) |p0?q0| < α and |p1?p0| < β and |q1?q0| < β. α和β是标准中定义的阈值,它们随着两个块p和q量化参数QP的增长而增长.滤波器选择的效果就是当在原始图像块边界有明显变化时,关掉滤波器.当QP很小的时候,除了边界上的很小梯度,其他都应该是图像本身的特征(而不是块效应),所以应该保留,因此阈值α和β很小.当QP很大的时候,块效应可能更明显,所以α和β很大,更需要滤波更多的边界象素点. 滤波器的实现 1)BS属于{1,2,3} 输入是p1,p0,q0,q1,使用一个四阶滤波器,产生输出结果p'0和q'0.如果|p2-p0|小于阈值β,则使用另一个四阶滤波器,即输入是p2,p1,p0和q0,则输出结果是p'1(仅仅亮度分量);如果|q2-q0|小于阈值β,则使用另一个四阶滤波器,即输入是q2,q1,q0和p0,则输出结果是q'1(仅仅亮度分量); 2)BS=4 如果|p2-p0|小于阈值β并且|p0-q0|小于round(α/4),并且是亮度块,则: p'0是对p2,p1,p0,q0,q1进行五阶滤波得到的;p'1是对p2,p1,p0,q0进行四阶滤波得到;p'2是对p3,p2,p1p0和q0进行五阶滤波得到的.否则,p'0是对p1,p0,q1进行三阶滤波得到的. 如果|q2-q0|小于阈值β并且|p0-q0|小于round(α/4),并且是亮度块,则: q'0是对q2,q1,q0,p0,p1进行五阶滤波得到的;q'1是对q2,q1,q0,p0进行四阶滤波得到;q'2是对q3,q2,q1,q0和p0进行五阶滤波得到的.否则,q'0是对q1,q0,p1进行三阶滤波得到的.