去区块滤波器

去区块滤波器(英语:Deblocking Filter缩写DBF)又称去块效应滤波器是一种减少在区块边界产生视觉上瑕疵的滤波器。这种视觉瑕疵可称为区块效应(Blocking Effect),这种效应主要构成原因是因为以区块为基础(Block-Based)的编解码器(Codec)所造成的人造边界(Blocking Artifacts)。以区块为基底的编解码器有很多种,H.264/高阶视频编码(Advanced Video Coding, AVC)以及H.265/高效率视频编码(High Efficiency Video Coding, HEVC)[1]都是这类型的编解码器,而这些编解码器均会在解码(Decode)过程中利用去区块滤波器将区块效应的影响降低以改善视频影像的质量。

介绍

以区块为基础的编解码器在预测(Prediction)或是转换(Transform)编码时,无论是高阶视频编码中的宏区块(Macroblock)或是高效率视频编码中的编码树单元(Coding Tree Unit)都会将影像分成区块再做编码。因此影像重建时会造成在区块间边缘处不连续的现象,这个现象称为区块效应,而这些区块边缘间视觉上的不连续称为人造边界。人造区块主要成因可在细分成两个,第一个是因为预测时出现不准的地方称为残量(Residual),残量会利用离散余弦变换(Discrete Cosine Transform, DCT)做量化(Quantization),由于量化与反量化会产生误差,因此会在区块边界上产生视觉上的不连续。第二个原因是来自运动补偿,同一个画面内相邻区块可能不是从前几个编码影像中相邻区块获取来做预测,因此造成不连续的现象。同样地,画面内预测的方式也可能会造成影像不连续。[2] 去区块滤波器主要有三个工作,分别是边界强度计算(Boundary Strength Computation)、边界分析(Boundary Analysis)及滤波器应用(Filter Implementation)。

  1. 边界强度计算:主要是去计算边界强度(Boundary Strength, Bs)这个参数,边界强度呈现出相邻区块边界不连续的程度,而这个参数会跟量化的方式、区块类型、移动向量以及边界取样的梯度有关。
  2. 边界分析:因为区块边缘不连续的现象可能真的是对象边缘所产生,并非所谓的人造边界,这个工作主要在判断是否为人造边界。
  3. 滤波器的应用:做完前面两个工作可以决定边界强度以及判断是否真的为人造边界,这个工作主要对人造边界依造对应的边界强度选择该应用的滤波器。

高阶视频编码(AVC)的去区块滤波器

高阶视频编码的去区块滤波器会对每个宏区块做滤波,其滤波顺序为由左上到右下。下面详细介绍高阶视频编码如何做去区块编码,首先将一个16x16的宏区块切割成更小的4x4区块,如图一所示。每个4x4的区块会做到滤波的边界为左边跟上面的边界,分别属于垂直边界与水平边界。先利用水平滤波器对垂直边界做滤波之后再利用垂直滤波器对水平边界做滤波,图一内的红色数字为做滤波的顺序。特别注意到如果4x4区块的边界为影像的边界则不做区块滤波。

 
图一、高阶视频编码中去区块滤波器将宏区块分割成更小的4x4区块,粗线为要做滤波的边界,红色数字为滤波顺序。

边界强度

每一个4x4的亮度区块中需要做滤波的区块都会计算出一个边界强度。色度区块的边界强度是对亮度区块已经求得的边界强度做取样,如图二所示。

 
图二、亮度与色度边界强度的示意图,红字为垂直边界强度,蓝字为水平边界强度。

计算边界强度(Bs)以决定两个4x4的区块间不连续的程度。高阶视频编码的边界强度值从0到4。若两个区块皆属于画面内编码(Intra-coded)且边界属于宏区块的边界,则这两个区块间的边界强度为4。若其中一个为画面内编码或是不在宏区块的边界上,则这两个区块间的边界强度为3。若这个区块的转换系数非0,则这两个区块间的边界强度为2。最后如果使用不同的参考影像或是两个区块间的移动向量(Motion Vectors)大于等于4,则这两个区块间的边界强度为1。剩下的情况,两个区块间的边界强度皆为0。总结以上叙述得到边界强度的判断流程如图三所示。

 
图三、决定边界强度的流程图。

边界分析

 
图四、水平滤波器对垂直边界做滤波的示意图。

边界强度如果大于0则对这个边界进行分析,判断是否为人造边界。图四是利用水平滤波器对垂直边界做滤波的示意图,一行有八个点p3、p2、p1、p0、q0、q1、q2以及q3,p0及q0之间为两区块的边界。判断是否为人造边界的条件如下所示:

  1. Bs != 0
  2. |p0 - q0| < α(IndexA
  3. |p1 - p0| < β(IndexA
  4. |q1 - q0| < β(IndexB

α与β两个函数一般利用查表法计算值,而IndexA和IndexB计算方式如下

IndexA = Min(Max(0,QP + OffsetA), 51)
IndexB = Min(Max(0,QP + OffsetB), 51)

其中OffsetA和OffsetB为编码器的参数,QP为量化参数(Quantization Parameter)。如果上面四个条件是都成立则p0与q0之间的边界为人造边界。

高效率视频编码(HEVC)的去区块滤波器

高效率视频编码(HEVC)的去区块滤波器是以高阶视频编码的为基础,但不像高阶视频编码采用4x4的区块大小,高效率视频编码采用8x8的区块大小,这个限制减少最糟情况的运算复杂度而不降低视觉上的质量。高效率视频编码还改进去区块滤波器可以让互不相重叠的区块平行做处理,边界强度也从0到4变为0到2。[1][3]

参考资料

  1. ^ 1.0 1.1 G.J. Sullivan; J.-R. Ohm; W.-J. Han; T. Wiegand. Overview of the High Efficiency Video Coding (HEVC) Standard. IEEE Transactions on Circuits and Systems for Video Technology. 2012-12 [2013-06-27]. (原始内容存档于2019-08-08). 
  2. ^ Applechen. Deblocking Filter(去方块滤波). 2006-03-20 [2013-06-27]. (原始内容存档于2017-08-01). 
  3. ^ A. Norkin; G. Bjontegaard; M. Narroschke; M. Ikeda; K. Andersson; M. Zhou; G. Van der Auwera. HEVC Deblocking Filter. IEEE Transactions on Circuits and Systems for Video Technology. 2012-12 [2013-06-27]. (原始内容存档于2019-08-08).