本文为新一代通用视频编码H.266\VVC原理、标准与实现的简化笔记。
定义:在视频编码过程中进行滤波,滤波后的图像用于后续编码。
目的:1、提升编码图像的质量。2、为后续编码图像提供高质量参考,获得更好的预测效果。
VVC中主要采取的技术有:色度与亮度缩放(Luma Mapping Chroma Scaling, LMCS)、去方块滤波(De-Blocking Filter, DBF)、样点自适应补偿(Sample Adaptive Offset, SAO)、自适应滤波(Adaptive Loop Filter, ALF)。
DBF用于降低方块效应、SAO用于改善振铃效应、ALF可以减少解码误差,在编码环路中,一般是先去方块滤波、样点自适应补偿和自适应环路滤波的顺序。LMCS一般对编码前的图像进行预处理。
亮度映射与色度缩放
包括两个部分:1、基于自适应分段线性模型的亮度映射;应用在像素级,利用亮度值范围及广电转换特性来提高视频的编码效率。2、基于亮度的色度残差缩放:应用在色度块级,通过补偿亮度信号映射对色度信号的影响。
解码端LMCS框架结构如下图所示:
LMCS技术
基本思想:在指定的位深下更好地使用允许的亮度值范围。
10bit视频亮度值范围为[64,940]。在编解码过程中,前向映射将范围[64,940]映射到[0,1023]中,再进行变换、量化等模块的处理。或者一个亮度范围较小的视频,没有充分利用允许的亮度值,因此LMCS就是将原始域亮度值映射到允许的亮度值范围。
基于分段线性模型的亮度映射
VVC中,前向映射函数FwdMap使用一个分段线性模型,反向映射函数InvMap为逆函数。
根据视频的位深将原始域的码值范围划分为16个相等的片段,每个片段的码字数量由OrgCW表示,变量InputPivot[i]表示原始域内各片段的边界点。
有InputPivot[i] = i * OrgCW;
映射域内各片段的边界点表示MappedPivot[i],MappedPivot[i+1]-MappedPivot[i]的值就是映射域中第i个片段的亮度值个数,表示为SignalledCW[i]。
色度缩放
前向缩放将原始域色度值转换到映射域,有
色度缩放以TU为单位,同一个TU使用相同的缩放因子,也使用分段线性模型,同一个片段色度缩放因子相同。色度缩放偏移量deltaCRS由自适应参数集LMCS_APS标识。
LMCS的实现
介绍的是VTM中使用的LMCS模型参数的构建方法,对于SDR\HDR-PQ\HDR-HLG视频的特性不同,模型参数不同。对于SDR和HDR-HLG视频,基于局部亮度方差,针对PSNR指标进行优化。对于HDR-PQ视频,针对加权PSNR进行优化,基本思想为空间平滑区域分配相比复杂区域更多的码字。
- SDR\HDR-HLG视频
1、统计分析视频内容,在原始域划分片段,分配初始码字
2、根据图像内容调整片段的码字数量
3、如果分配的码字总数大于允许的最大码字数,从第一个片段开始,每个片段减少相同的数量,知道妈祖条件,得到最终每个片段分配的码字数量SignalledCW[i].
4、根据亮度样本映射前后的相对值及平均局部方差,确定LMCS片类型、高码率自适应和色度调整自适应参数。
- HDR-PQ视频
1、计算映射模型曲线的斜率
2、积分映射模型曲线的斜率
3、归一化
4、计算每个片段的码字数量。
LMCS的相关语法元素
SPS层
sps_lmcs_enabled_flag:为1的时候标识使用LMCS
PH层
ph_lmcs_enabled_flag:当前图像是否使用LMCS
ph_lmcs_aps_id:当前按图片中的slice所应用的LMCS APS的aps_adaptation_parameter_set_id
ph_chroma_residual_scale_flag:当前图片是否使用色度残差缩放
SH层
sh_lmcs_used_flag:当前slice是否使用LMCS
APS层
lmcs_min_bin_idx:LMCS过程中使用的最小bin索引
lmcs_delta_max_bin_idx:最大bin索引与15之间的差值
lmcs_delta_cw_prec_minus1:加1用于kmcs_delta_abs_cw[i]的比特数
lmcs_delta_abs_cw[i]:第i个区间的码字绝对增量值
lmcs_delta_sign_cw_flag[i]:标识变量LmcsDeltaCW[i]的符号
lmcs_delta_abs_crs:表示变量LmcsDeltaCrs的绝对码字值
lmcs_delta_sign_crs_flag:表示变量LmcsDeltaCrs的符号
去方块滤波
方块效应:图像中编码块边界的不连续性。因为各块的变换量化编码过程相互独立,导致相邻块边界的不连续性。因为在运动补偿的过程中,相邻块的预测值可能来自不同图像的不同位置,可能导致预测残差信号在块边界产生数值不连续的问题。会传递到后续编码图像。
H.264、H.265就采用了环路去块滤波,能够自适应的根据不同的视频内容、不同的编码方式选择不同强度的滤波参数,对其进行平滑处理。
H.266针对采用子块编码技术的子块边界进行滤波,针对大块亮度分量的长抽头滤波,针对色度分量的强滤波。去块滤波模块会对CU边界、变换子块边界(SBT\ISP模式及大尺寸CU隐式分割时引入的变换单元边界)及预测子块边界(SbTMVP模式和仿射模式引入的预测单元边界)进行滤波处理。
基本步骤:
- 先确定带滤波的边界,确保去块滤波过程应用于所有的子块边界和CU边界。
- 遵循先亮度分量后色度分量,先垂直方向后水平方向的原则对CU中含有的边界进行滤波。边界两侧采用滤波操作的像素数由边界两侧块的大小决定。
去块滤波包括两个环节:滤波决策和滤波操作。去块滤波算法对不同的视频内容及不同的编码参数具有自适应的能力,对不同的块边界自适应选择是否滤波、边界的滤波强度及最大滤波长度。
滤波决策
目的:对所有满足滤波尺寸条件的边界,根据视频内容及编码参数,确定最大滤波航长度、边界的滤波强度及滤波参数。
1、获取最大滤波长度
根据CU的大小、子块的大小、子块与CU边界的距离初步确定相邻块的每行最多可修改的像素个数。
2、获取边界的滤波强度(BS)
根据边界块的编码参数初步判断边界块是否需要滤波及其滤波参数。
3、滤波强度的选择
根据人眼的掩盖效应,只有平坦区域的不连续块边界才是滤波的对象,而滤波操作也会消除强纹理区域应有的纹理信息。需进一步对视频内容进行分析,根据边界两侧块内像素值的变化和编码参数确定。根据边界块内像素值的变化程度判断内容特性,也根据边界区域的内容特性判断。
滤波强度分为:不滤波、短抽头滤波(分为强滤波、弱滤波)、长抽头滤波。
会根据像素的变化率和平坦度计算出边界区域纹理度,值越大,表示区域越不平坦。纹理度大到一定程度,关闭滤波。阈值与量化参数设计有关。
H.266中新增了基于亮度分量强度的自适应去方块滤波(luma-adaptive de-blocking filter)。根据重建像素的平均亮度水平为QP添加偏移量去调整去方块滤波强度,用来补偿在线性光域使用非线性转换函数造成的失真。
对于色度分量,较为平坦,所以不需要计算平坦度。
滤波操作
滤波操作包括的类型
- 亮度分量的长抽头滤波
- 亮度分量的短抽头强滤波
- 亮度分量的短抽头弱滤波
- 色度分量的强滤波
- 色度分量的弱滤波
长抽头滤波的目的是保留块边界处的斜面或线性信号,针对大块边界修改更多的像素值,滤波器与像素位置相关。
相关语法
sps层
sps_virtual_boundaries_enabled_flag是否允许环内滤波过程跨越虚拟边界
sps_virtual_boundaries_enabled_flag虚拟边界信息是否在SPS层中存在
pps层
pps_loop_filter_across_tiles_enabled_flag标识tile的边界处是否执行环路滤波操作
pps_loop_filer_across_slice_enabled_flag标识slice的左边界及上边界处是都执行环路滤波操作
pps_deblocking_filter_control_present_flag标识PPS层中是否存在控制去方块滤波的语法元素
pps_deblocking_filter_override_enabled_flag标识Slice头部是否存在语法元素pps_deblocking_filter_override_enabled_flag
pps_deblocking_filter_diabled_flag在pps_deblocking_filter_diabled_flag不存在的情况下,是否对各个slice执行去方块滤波
ph层
ph_luma_beta_offset_div&ph_luma_tc_offset_div2去方块滤波参数默认的补偿值
sh层
sh_deblocking_params_present_flag标识slice头部是否存在去方块滤波
sh_deblocking_filter_disabled_flag标识当前slice是否进行去方块滤波
sh_luma_beta_div2&sh_luma_tc_offset_div2当前slice的去方块滤波参数的补偿值
样点自适应补偿
H.266采用基于块的变换,并在频域对变换系数机型量化,由于高频变换系数的量化失真,解码后会在边缘周围产生波纹现象,称为振铃效应。
样点自适应补偿技术:从像素域入手抑制振铃效应,对重建曲线中出现的波峰增加负值,对波谷增加正值。
SAO技术
H.2662中的SAO技术以CTB为基本单位,对不同类型的像素使用不同的补偿值。
补偿形式:边界补偿(EO)和边带补偿(BO)
边界补偿
通过比较当前像素与相邻像素的大小对当前像素进行归类,对同类像素补偿相同数值。使用一维3像素分类模式
边界补偿分为4种模式:水平方式、垂直方式、135°方向、、45°方向。在任意一种模式,将重建像素归为5个种类。对应谷状、凹角、凸角、峰状。
边带补偿
根据像素强度进行归类,将像素范围分为32条边带,同一边带使用相同的补偿值。一个CTB只能选4条连续的边带,只对这4条边带的像素进行补偿。
SAO参数融合
参数融合是指对于一个CTB,其SAO参数直接使用相邻块的SAO参数。
SAO实现
1、快速SAO模式判别
SAO最终的补偿模式可以从8种情况中选择:不补偿、EO_0模式、EO_1模式、EO_2模式、EO_3模式、BO模式、左相邻参数融合模式、上相邻块参数融合模式。对于非参数融合模式,像素又被分为很多类,每类有多个候选补偿值。
通常通过率失真性能选择最优的一组SAO参数(模式、补偿值、边带信息)
2、在VTM10.0种的实现
整体流程:信息统计、亮度分量CTB的SAO模式、色度分量CTB的SAO模式、CTU的最优SAO模式、CTU的SAO滤波。
自适应环路滤波
ALF技术包括亮度ALF、色度ALF、和分量间的ALF。基于维纳滤波原理,通过原始图像信息和重建图像信息建立维纳-霍夫方程求解一系列最小误差的滤波器系数。
维纳滤波
是一种使滤波输出与期望输出间均方无法最小的线性滤波器。求偏导求解线性方程组可以得到一组滤波系数使滤波输出与期望输出间的MSE最小。维纳滤波器系数与重建图像内容无关。有效权衡滤波器性能和滤波器系数数量需要进行考虑。
ALF技术
VVC中根据视频内容自适应地在有限个滤波系数集中选择一组滤波器,对重建视频进行滤波。
滤波系数集包含M个滤波器子集,每个滤波器子集包含与视频内容相关的N类滤波器。解码端针对每个CTU,ALF根据子集缩影确定滤波器子集,根据像素块的内容确定滤波器类,即可以确定该像素块使用的滤波器系数。编码端根据像素块内容确定滤波器类,然后哦利用率失真确定最优滤波器子类,并对子集索引进行编码。
滤波器系数集:包括固定子集和APS子集。
亮度ALF
滤波系数集包含16个固定子集和最多8个APS子集,每个子集包含25组滤波器类。
滤波器子集
VVC中,亮度ALF包含16个固定子集,共包含64组滤波系数。根据子集索引和类别,查表得到滤波器编号。再根据滤波器编号,查表得到对应相应滤波器的系数。
滤波器类
更具内容特性,选择一个滤波器类。
1、拉普拉斯梯度
2、方向性因子D:体现梯度方向
3、活动性因子A:体现梯度的强弱,查表获得
4、滤波器类:索引为filtIdx = 5D+A
滤波器模板
以中心对称的7x7菱形。每组滤波系数对应4种滤波器模板:不变换、对角线变换、垂直翻转、旋转变换。
利用4个梯度方向确定滤波器模板的变换方式。
滤波过程
根据之前得到的7x7滤波器模板,对4x4亮度块中的每个像素进行滤波处理。
滤波器构建
将slice分为4x4的块,根据梯度计算每个4x4块的方向性和活动度,进而得到每个块的滤波器类。针对每个滤波器类,将所采用该滤波器的4x4块作为一个整体,利用维纳-霍夫方程,求该滤波器类的系数。
优化方法
- 不对所有的CTU进行ALF
- APS滤波系数需要编码传输,合并减少25类滤波器可以提高压缩效率。
色度ALF
比较简单,只使用APS子集。对色度分量,每个APS子集都包含8组滤波器。采用中心对称的5x5菱形滤波器模板。不需要对滤波器模板进行变换。针对色度分量,将slice分为8个区域,每个区域内分别包含连续整数个CTU,为每个区域计算一组滤波器系数,得到8组滤波器。
分量间ALF
利用亮度值进行CCALF,对色度值进行补充和修正。可以通过亮度信息进行ALF补偿色度分量的细节,改善色度分量的重建质量。对于色度分量,每个APS子集包含4个滤波器,采用3x4的菱形滤波器模板。通过减弱CCALF在高QP编码区域的应用防止产生色度纹理过丰富的伪影。
参数过多,详见标准定义。