H.265去块滤波
好的,我们来详细解析HEVC视频编码标准中的去块效应滤波器(Deblocking Filter)。这是编码器环路和解码器流程中的一个至关重要的步骤,属于环路滤波(In-loop Filtering)的一部分。
1. 为什么需要去块滤波?(Why is Deblocking Needed?)
视频压缩是基于块(Block-based)的处理流程。无论是预测(Intra/Inter)、变换(Transform)还是量化(Quantization),都是以块为单位独立进行的。这种独立处理会导致在块的边界处产生不连续,从而在重建图像上出现视觉上很突兀的“格子”或“方块”效应,这就是块效应(Blocking Artifacts)。
去块滤波有两个核心目标:
- 提升主观视觉质量: 通过平滑块边界上的人工痕迹,使图像看起来更自然,减少观众的视觉疲劳。
- 提高编码效率: 去块滤波是在编码环路(In-loop)内进行的。这意味着经过滤波后的“干净”图像将被用作后续帧的参考帧。一个更高质量的参考帧能提供更精确的运动补偿预测,从而减少残差,最终节省码率。
在HEVC中,环路滤波包含两个步骤:去块滤波 (Deblocking Filter, DBF) 和 样点自适应偏移 (Sample Adaptive Offset, SAO)。我们这里聚焦于第一步:去块滤波。
2. HEVC去块滤波的核心思想与H.264的区别
HEVC的去块滤波继承了H.264的基本思想,但做出了关键的简化和优化,使其更适应HEVC的大块和并行处理架构。
- 滤波网格 (Filtering Grid):
    - H.264: 在 4x4 的块网格上进行滤波。
- HEVC: 在 8x8 的块网格上进行滤波。这是最核心的区别。HEVC的预测和变换单元尺寸更大,在8x8网格上滤波可以大幅减少需要判断和处理的边界数量,显著降低了计算复杂度,更利于并行处理。
 
- 滤波决策 (Filtering Decision):
    - HEVC的决策过程更“智能”和内容自适应。它会先判断边界的“强度”,再根据边界两侧的像素值差异来决定是否需要滤波,以及使用“强”还是“弱”滤波模式。
 
3. 详细滤波流程
对每个8x8块的垂直边界和水平边界,HEVC都会执行一套决策流程。我们以垂直边界为例,水平边界同理。
ASCII图表:滤波边界两侧的像素
代码段
      |
p3 p2 p1 p0 | q0 q1 q2 q3
      |
      |  <-- 8x8 块边界
      |
- p0, p1, p2, p3是左侧块边界的4个像素。
- q0, q1, q2, q3是右侧块边界的4个像素。
3.1. 边界强度 (Boundary Strength, BS) 计算
这是决策的第一步:判断这个边界有多“重要”,应不应该被滤波。BS的值可以是 0, 1, 或 2。
- BS = 2(最强):- 当边界是帧内预测(Intra)块的边界时。Intra预测不依赖其他帧,其边界最容易产生不连续,需要最强的滤波。
 
- BS = 1(中等):- 边界是帧间预测(Inter)块的边界,并且满足以下任一条件:
        - P块或Q块中至少有一个块的残差被编码(即非零残差)。
- P块和Q块的运动矢量(MV)不相同(指向了不同的参考帧或不同的位置)。
 
 
- 边界是帧间预测(Inter)块的边界,并且满足以下任一条件:
        
- BS = 0(不滤波):- 如果不满足以上任何条件。最典型的情况是:P和Q块都是Inter模式,它们的运动信息完全相同,且都没有编码残差(例如,一个大的Skip区域)。这种情况下,这两个块在预测时就是连续的,无需滤波。
 
3.2. 滤波开关决策与模式选择
如果 BS > 0,就需要进一步判断。这个决策依赖于两个从QP(量化参数)派生出的阈值:
- β(beta): 一个用于判断边界是否是“平坦”区域块效应的阈值。
- t_c(tc): 一个用于裁剪(clipping)滤波强度的阈值。
决策逻辑(简化版):
- 计算梯度: 首先,计算边界两侧像素的梯度和连续性,例如计算 d = |p2 - 2*p1 + p0| + |q2 - 2*q1 + q0|等指标。这个值反映了边界两侧像素本身的平滑程度。
- 是否为人造边界?: 比较 d和阈值β。- 如果 d < β,说明边界两侧的像素本来是比较平滑的,现在的不连续很可能是编码引入的块效应。因此,执行滤波。
- 如果 d >= β,说明边界两侧像素本身就有较大的梯度,这可能是一条真实的边缘或纹理。为了保护图像细节,不执行滤波。
 
- 如果 
- 选择强/弱滤波: 如果决定滤波,还会根据 |p0 - q0|等跨边界的像素差值与t_c的关系,来选择使用强滤波还是弱滤波。
4. 滤波模式:强滤波与弱滤波
4.1. 弱滤波 (Weak Filter)
用于处理轻微的块效应。它计算一个小的修正值 Δ,然后对边界像素进行微调。
- 计算 Δ:基于p1, p0, q0, q1的值计算出一个修正量。
- 裁剪 Δ:将Δ的绝对值限制在t_c以内,防止过度平滑。
- 应用修正:
    - p0' = p0 - Δ
- q0' = q0 + Δ
- 在某些条件下,p1和q1也会被微调。
 
4.2. 强滤波 (Strong Filter)
用于处理 BS=2(Intra边界)等场景下较严重的块效应。它采用一个3抽头或5抽头的平滑滤波器,对边界像素进行加权平均。
例如,p0 和 q0 的新值可能是这样计算的(简化公式):
- p0' = (p2 + 2*p1 + 2*p0 + 2*q0 + q1 + 4) >> 3
- q0' = (q2 + 2*q1 + 2*q0 + 2*p0 + p1 + 4) >> 3
这个过程实际上是用边界两侧的多个像素来共同决定新的边界像素值,从而达到强力平滑的效果。
5. 色度滤波 (Chroma Filtering)
色度分量(Cb, Cr)的去块滤波过程被大大简化:
- 决策跟随亮度: 是否对色度块边界进行滤波,完全由其对应的亮度(Luma)块边界的决策决定。如果亮度边界的 BS > 0,那么就对色度边界进行滤波。
- 只用弱滤波: 色度滤波只使用一种类似于弱滤波的线性滤波器,并且 t_c阈值更大,允许的修改范围更小。
H.264 vs. HEVC 去块滤波总结
| 特性 | H.264/AVC | HEVC (H.265) | 
|---|---|---|
| 滤波网格 | 4x4 | 8x8 | 
| 边界强度 | 0-4,更复杂的计算规则 | 0-2,规则更简化 | 
| 滤波器 | 模式多,滤波器抽头复杂 | 强/弱两种模式,滤波器抽头更简单 | 
| 决策逻辑 | 复杂的阈值表和判断条件 | 基于QP派生的 β和t_c进行内容自适应决策 | 
| 复杂度 | 较高,不利于并行 | 较低,更适合大规模并行处理架构(如GPU) | 
导出到 Google 表格
结论: HEVC的去块滤波器通过采用更大的8x8滤波网格、简化的边界强度判断和更直接的内容自适应决策逻辑,实现了在保证滤波效果的同时,显著降低了计算复杂度,并更好地适应了并行化处理的需求。这是一种在效果和效率之间取得更优平衡的巧妙设计。