标题:Post-processing in HEVC 链接:https://www.elecard.com/page/post_processing_in_hevc 整理人:陈予诺 本文是对 ELECARD Video Compression Book 第五章的翻译,本章节主要介绍如何对解码图像实施后处理,以减少HEVC中量化效应的影响。
HEVC算法旨在对视频帧进行块处理,以消除视频数据中的空间或时间冗余,本质上是通过对被编码块中的样本值进行预测来消除冗余。帧内预测主要进行空间处理,涉及从相邻块的像素值中预测当前块内的像素值,帧间预测通过使用先前编码帧的图像区域进行预测来消除时间冗余。残差信号,即编码图像与预测图像之间的差值,经过离散二维傅立叶变换(DFT),得到的频谱系数按级别进行量化。在最终编码阶段,量化后的频谱系数值序列与相关的预测、频谱变换和量化信息一起进行熵编码。编码器中的空间和时间预测使用解码图像进行,这确保了编码器和解码器之间的预测结果相同。解码过程包括对频谱系数进行反量化和进行逆离散傅立叶变换(IDFT),恢复的差异信号被加到预测结果中。
编解码过程可能会显著扭曲原始图像。当频谱系数被量化时,就会引入失真。HEVC标准提供了一种选择,对解码图像应用额外的后处理,以减少量化效应。这种后处理可以包括去块效应滤波器(deblocking filter, DBF)和取样自适应偏移(Sample Adaptive Offset, SAO)过程。
第一个后处理阶段,去块效应滤波器,旨在减少边缘效应(也称为块效应)。在编码过程中,每个视频帧被分成大小相等的正方形块,称为最大编码单元(Largest Coding Units, LCU)。每个LCU可以分成四个正方形编码单元(Coding Units, CU),每个CU又可以分成四个更多的CU。这些划分形成了一个CTU(Coding Tree Unit)四叉树。在编码过程中,CTU中的最低级CU会被划分为称为预测单元(Prediction Unit, PU)的块。
之后,对从正在编码的图像减去预测结果得到的2D差异信号应用2D频谱变换。频谱变换矩阵的大小由变换单元(Transform Unit, TU)的大小确定。HEVC规定了4种可能的变换单元大小:4×4、8×8、16×16和32×32。频谱系数的量化导致了解码图像中的块效应,这在下图中清晰可见。该图显示了在应用去块滤波器之前的解码图像的一部分。由于明显的原因,这种效应会同时在PU和TU边界处显现。
去块效应滤波过程修改了位于 变换单元或预测单元 垂直和水平边界线 附近的像素值,这些边界线形成了一个间距为8像素的等距网格。滤波首先应用于垂直线,然后应用于水平线。
在进行滤波之前,为每个4像素线段选择一个边界强度(Boundary Strength, BS)参数值。该值由用于线段两侧图像区域的预测模式确定。如果其中至少一个是使用帧内预测编码的,则为BS分配数值2。如果两个区域都是基于先前编码图像的一个连续区域进行互预测的,则该线段的BS参数值为0。否则,BS等于1。在BS = 0的4个像素段周围的区域被排除在滤波之外。
下一步涉及选择滤波器类型以及要进行滤波的区域的宽度和位置,这里的标准是左右边界周围的3×4像素表面与平面偏离的程度。让我们通过使用传统符号分析靠近垂直线段的图像区域来考虑选择过程的示例。
如果区域P位于边界的左侧,并且第零线和第三线的样本强度值在水平坐标(距离边界的距离)上表现出近线性依赖关系,则被认为是“足够平坦”的。
在这里,
代表水平坐标。与线性关系的接近程度通过在
和
点处的斜率差来估计,即通过
来计算样本的上行,以及通过
来计算样本的下行。对于位于边界右侧的区域
,相应的数量
和
也会被计算:
根据将各种组合的量
和
与相应的阈值进行比较,决定要使用的滤波器类型以及在边界附近平滑的区域的宽度和位置。阈值是从标准中以表格形式指定的
和
的值获得的,其中每个量化参数
的值确定了频谱系数的量化步长,表中的
阈值的索引包含BS参数。
当边界附近的样本强度变化很大,即下列条件未满足时:
将要平滑的区域的宽度设置为零,并且边界附近的像素不被处理。
另外,当
需要在“强”和“弱”filter之间做出选择。当满足以下条件时:
强滤波被应用于边界附近,在这种情况下,要平滑的区域跨越边界线每一侧的3个样本。
强滤波逐行应用,
和
的新值被计算为第
行中样本
和
的线性组合:
其中
,系数
,
,
,
的值,如下表所示。
表 1
当一个或多个条件不满足时,即强滤波不适用时,将计算要滤波的区域的宽度,并逐行验证弱滤波的适用性。要使用弱滤波进行平滑处理的样本数量在区域
和
中是独立确定的。
如果
,则对于
区域中的每一行,最靠近边界的两个样本会改变它们的值。否则,在过滤期间,每行只会改变一个
样本的值。
必须在
区域中验证相应的条件。如果
,则对于
区域中的每一行,最靠近边界的两个样本会改变它们的值。如果不满足此条件,则在过滤期间每行只会改变一个
样本的值。
基于数量
,计算样本
和
的新值:
如果
,则第
行将被排除在滤波之外,否则将使用以下方程计算新值:
上述关于应用去块效应滤波器过程的描述并没有真正解释用于强滤波的系数
、
、
和
的性质,以及在弱滤波情况下用于计算样本值的量
。我在文献中找不到这些系数的推导,它们为什么是这样的呢?我们可以在这里进行一些推测。
让我们从
开始。将笛卡尔坐标系的原点放在样本
和
之间的中点,使得这些样本的坐标分别变为
和
。在这种情况下,样本
的坐标为
,样本
的坐标为
。
利用最小二乘法,我们通过四个样本
绘制一条直线
。考虑一组样本
,其值取自坐标为
的点。为了用线性函数近似
,即构建方程为
的直线,我们需要选择参数
和
的值,以使
的均方偏差与由
给出的值最小化。通过将参数
和
的导数置为0,可以轻松找到参数的极值点:
解这个方程组得到
和
:
和
可以表示为:
。(在所选的坐标系中,关系
成立。) 将
坐标和
值代入
和
的方程中,我们有:
相对于
(其中
)的偏差为
相对于
(其中
)的偏差为
算术平均值(考虑到偏差
和
的相反符号)为
等于用于弱滤波的
值,精确度为
或更高。因此,量
由点
和
相对于通过四个点
和
使用最小二乘法绘制的直线的平均偏差确定。
这个阶段称为取样自适应偏移(SAO),旨在部分补偿由于光谱系数量化而导致的损失。为此,在解码后添加偏移量到某些图像像素的值。这些偏移量在编码阶段计算,并作为每个LCU的表传输到编码流中。通过它们的强度选择要更改的像素,因此这种转换是非线性的。在HEVC中有两种可能的SAO类型:带偏移(Band Offset, BO)和边缘偏移(Edge Offset, EO)。
对于BO后处理,所有LCU中的像素值在编码阶段被分为32个均匀间隔的带。计算每个带中原始和解码图像像素之间的平均偏移。视频编码器保存四个连续带的偏移值以及这个四元组中第一个带的编号在编码流中。在SAO阶段解码图像后,将偏移添加到由编码器选择的带中的像素值。
对于EO后处理,编码器根据对解码图像像素的值进行分类,选择四个模板之一。可能的模板如下图所示。要分类的样本被指定为p,两个相邻样本的值被指定为n0和n1。每个LCU的编码流中添加所选择模板的编号。
对大量测试视频序列的编码结果说明HEVC视频编码系统中的去块效应滤波器绝对有效。这项技术在量化参数值较高时、当边缘效应特别强时尤其有用。减小量化参数值使得解码图像更少出现方块效果,从而降低了去块效应滤波器的有效性。
然而,关于第二个后处理阶段的有效性,却无法得出如此明确的结论。当使用SAO时,编码器会向编码流中插入描述用于校正解码图像像素值的偏移所使用的额外数据,这在任何情况下都会略微降低压缩比。另一方面,启用SAO可以改善图像质量。因此,有时使用SAO在压缩比与图像质量方面提供了一定的、适度的收益。然而,也会出现由SAO引起的 比特率增加 却没有被 图像质量的提高 所补偿的情况。