一种HEVC样点自适应补偿快速算法
2021-04-23王卫坤杨秀芝陈建
王卫坤, 杨秀芝, 陈建
(福州大学物理与信息工程学院, 福建 福州 350108)
0 引言
视频编码联合组(joint collaborative team on video coding, JCT-VC)于2013年正式颁布了高性能视频编码(high efficiency video coding, HEVC)标准[1], 采用基于块的混合编码框架. 在对变换系数的量化过程中, 高频交流系数的量化失真会在解码图像的强边缘周围产生波纹现象, 称为振铃效应[2], 严重影响视频的主客观质量. 为削弱振铃效应对视频质量的影响, H.265/HEVC标准中增加了新的环路滤波模块: 样点自适应补偿技术(sample adaptive offset, SAO)[3]. SAO技术从像素域入手, 对每一个像素值进行种类判别, 对于被判定为存在特定种类振铃效应的像素值, 则增加对应的补偿值来削弱振铃效应带来的失真, 从而有效地提高解码视频的主客观质量. 同时, 经过补偿的重构像素更有利于参考, 可以提高预测精度, 减小后续编码图像的预测残差, 从而降低编码码率. 然而, SAO技术自身计算复杂度极高, 给后续视频帧的预测过程带来较大的延时, 严重影响编码效率. 因此, 通过对算法进行优化来减少SAO编码耗时对编码性能的提升具有重大意义.
近年来, 不断有专家学者提出新的观点和方法用于改进SAO技术. 文献[4]利用帧内预测过程中的角度模式信息来预测SAO的最优边界补偿模式, 简化了SAO模式判别过程. 文献[5]在文献[4]的基础上做了进一步的改进, 即利用帧内预测模式信息预判出最优的SAO边界补偿模式之后, 在该SAO模式的信息统计过程中对像素值进行1/2下采样, 有效地减少了SAO编码耗时. 文献[6]提出一种基于边界补偿模式融合、 边带补偿模式预决策和融合隔离的SAO算法来降低SAO的复杂度, 此方案主要针边带补偿模式进行优化, 而对复杂度更高的边界补偿模式改进较小. 文献[7]将时域中若干帧的相同位置的编码树单元(coding tree unit, CTU)划分为一个CTU组, 并由组中前一部分CTU确定CTU组的主导SAO模式, 而后部分CTU自适应地复用主导SAO模式, 该方案显著减少了SAO编码耗时. 文献[8-9]依据CU划分深度等信息来判断图像块的纹理复杂度, 以此来确定SAO的开关, 两种方案在CTU划分方式较复杂的情况下优化较小. 文献[10]利用帧间预测模式信息、 CTU空间域相关性、 亮度分量和色度分量相关性, 提出一种提前终止SAO的机制, 然而此方案中的改进措施无法应用于所有的编码配置. 文献[11]在帧级和CTU级两个层面分别提出一种针对360°全景视频的SAO的优化方案, 减少SAO编码耗时. 文献[12-13]为基于GPU的SAO优化算法, 能够有效减少SAO编码耗时, 但是方案比较依赖GPU设备的特性. 文献[14]提出一种基于主要边缘一致性(dominant edge assent, DEA)的快速SAO模式判别方法, 通过判断CTU的主要边缘方向来预测CTU的最优边界补偿模式, 加快SAO模式判别过程.
本研究提出一种新的HEVC快速样点自适应补偿算法, 利用边缘方向提取算法获取CTU的边缘方向特性, 并据此来简化SAO模式判别过程. 算法在性能损失较小的情况下显著地减少了SAO编码耗时, 并且适用于任意类型的视频帧以及所有的编码配置.
1 SAO原理概述
SAO分为模式判别和像素滤波两个过程, 模式判别又分为信息统计和模式决策两个部分, 整体流程如图1所示.
图1 SAO整体流程
模式判别过程以CTB为基本单位, 为评估CTB中不同种类的振铃效应所带来的影响, 需要遍历所有的SAO模式. 在信息统计过程中, 每种SAO模式均按特定的分类规则将重构像素划分为不同的种类, 并且统计每个种类所包含的像素个数以及该种类像素在图像中对应位置的原始像素与重构像素之间的差值之和. 模式决策过程利用统计得到的信息计算出当前CTB在每一种模式下的相对率失真代价, 选择其中代价值最小的模式作为当前CTB的最优SAO模式, 模式决策的最后阶段, 将CTU的亮度、 色度CTB分量的最优SAO模式对应的总代价与左融合、 上融合模式的代价相比较, 代价值最小的模式即为CTU的最优SAO模式. 最后, 在最优SAO模式下, 对CTU进行逐像素的SAO滤波, 消除振铃效应. SAO模式判别过程的耗时占据整个SAO过程耗时的93%[5]. 因此, 通过优化算法减少模式判别过程遍历的模式数量, 可以显著降低SAO编码延时. SAO的补偿模式可以分为边界补偿(edge offset, EO)和边带补偿(band offset, BO)两种, 1.1与1.2节将简要介绍这两种模式.
1.1 EO模式
EO模式将CTB中的每一个像素值与其相邻像素值进行大小比较, 然后根据比较结果对该像素值进行归类, 对不同种类的像素值使用不同的补偿值进行补偿. 根据相邻像素值的位置差异, 可以将EO模式分为4种类型, 分别是水平方向(EO_0)、 垂直方向(EO_1)、 135°方向(EO_2)和45°方向(EO_3), 如图2所示.
图2 4种EO类型(c表示当前像素, a和b表示相邻像素)
对于每一种类型, 根据图3所示的像素值大小关系将当前重构像素划分为4个不同的种类, 并利用率失真优化准则获取各个种类的像素所对应的最优补偿值. 不属于这4个种类的像素即为较平坦的像素, 无需补偿.
图3 EO模式像素分类
1.2 BO模式
BO模式根据像素的强度值进行归类, 将像素范围等分为32个边带. 对于8比特像素值, 其范围为0~255, 每条边带包含8个像素值, 即位于[8i, 8i+7]范围内的像素值属于第i个边带, 其中i∈[0, 31]. 每个边带根据自身像素特点进行补偿, 同一边带使用同一个补偿值. H.265/HEVC标准规定, 一个CTB只需选取其中4条连续边带进行补偿, 使得BO模式和EO模式的补偿值数量保持一致.
2 SAO优化算法
若一个CTB的最优SAO模式被判定为其中一种类型的EO模式, 则当前CTB中只有一种方向的图像边缘振铃效应可以得到较好的改善. 然而SAO的模式判别过程要对所有的SAO模式进行遍历, 其中包括4种方向的EO模式, 这造成了大量的时间浪费, 大大增加了计算复杂度. 图像中可能包含多种方向的图像边缘, 但其中主要的边缘方向通常只有少数几种, 因此可以通过获取图像中主要的边缘方向来提前预测当前CTB的最优EO模式, 从而简化SAO模式判别过程.
本算法通过边缘方向提取算法获取亮度CTB中纹理丰富区域的边缘方向列表. 然后根据得到的边缘方向列表分析该CTB的边缘方向分布特征. 在进行SAO模式判别时, 只对其中一种或两种数量较多的边缘方向所对应的EO模式进行遍历. 最后利用CTU中亮度分量和色度分量的相关性减少色度分量在SAO模式判别过程中遍历的EO模式数量, 从而显著减少SAO编码耗时.
2.1 确定边缘方向提取区域
图4 边缘方向提取区域示例(数字表示当前CU的深度)
对于一个特定大小的图像块, 纹理丰富的区域决定了其主要的边缘方向, 而且这些区域更容易受到振铃效应的影响. 所以本算法在进行边缘方向提取之前, 先将图像块划分为纹理丰富区域和平坦区域, 并且只对纹理丰富的局部区域进行边缘方向提取, 从而减少边缘方向提取所消耗的时间, 降低算法本身的复杂度. HEVC编码器在将CTU划分为CU的过程中, 根据图像内容自适应地选择最优划分方式. 其中平坦区域用较大的CU编码可以减少所用的比特数, 提高编码效率. 根据这一特点, 将CU深度较大(CU尺寸较小)的区域设为纹理丰富的区域, 而将CU深度较小的区域设为平坦区域. 具体地, 在一个CTU中, 将CU深度大于1的区域设为纹理丰富的区域, 进行边缘方向提取; 而CU深度为0和1的区域则被设为平坦区域, 省略边缘方向提取过程. 如图4所示, 只有红色方框中的部分是需要进行边缘方向提取的区域. 在当前情形下, 相比于对所有区域都进行边缘方向提取的方案, 此方法可以节省50%的提取时间.
2.2 获取边缘方向列表
在确定了一个CTU的边缘方向提取区域之后, 对该CTU的亮度分量进行边缘方向提取, 得到当前亮度CTB的边缘方向列表. 并据此判断该亮度CTB的边缘方向分布情况, 以减少当前亮度CTB在SAO模式判别过程中遍历的EO模式数量, 从而减少SAO编码耗时. MPEG-7中的边缘直方图描述符(edge histogram descriptor, EHD)[15]可以用来获得一副图像的边缘方向分布. 本算法对EHD算法进行了调整和改进, 用于获取亮度CTB的边缘方向列表. 具体算法流程如下:
1) 首先将当前亮度CTB中需要提取边缘方向的区域划分为4 px×4 px大小的图像块, 此时图像块尺寸较小, 边缘方向趋于单一, 便于提取和归类. 将图像块的边缘方向归为五类, 如图5所示, 其中0°、 90°、 135°、 45°四种情形分别对应SAO的EO_0、 EO_1、 EO_2、 EO_3四种模式, 最后一种情形表示图像块包含非单一边缘方向的情况.
图5 图像块边缘方向
图6 图像块划分
2) 对每个4 px×4 px图像块, 将其4等分成2 px×2 px的子块, 并对每一个子块的像素值进行求和, 将第k块的像素值的和表示为S(k), 如图6所示.
3) 边缘方向滤波器如图7所示. 将经过求和的图像块分别与图7所示的5个边缘方向滤波器进行卷积, 获取图像块在不同边缘方向上的边缘值, 具体的卷积过程如下式所示.
图7 边缘方向滤波器
(1)
其中: 与f0、f90、f135、f45滤波器进行卷积可以分别获得图像块在0°、 90°、 135°、 45°方向上的边缘值, 依次记作E0,E90,E135,E45; 而与fn滤波器进行卷积可以筛选出含有非单一边缘方向的图像块, 将此边缘值记为En.
4) 得到图像块的5个边缘值后, 选择其中最大的边缘值所对应的方向作为该图像块的边缘方向, 即:
max{E0,E90,E135,E45,En}≠0
(2)
5) 重复第2)、 3)、 4)步, 直至获取区域内所有4 px×4 px图像块的边缘方向. 分别统计边缘方向为0°、 90°、 135°和45°的图像块个数, 其中含有非单一边缘方向的图像块(最大边缘值为En的图像块)不参与统计. 按照个数从大到小的规则对4种边缘方向进行排序, 即可获得当前亮度CTB的边缘方向列表. 该列表表明亮度CTB中每种边缘方向的含量, 列表中各种边缘方向的含量从头至尾依次降低, 将方向列表中排在首位的边缘方向设为CTU的主要边缘方向, 位置排在第二的方向设为CTU的次要边缘方向.
6) 根据边缘方向列表中的主要边缘方向和次要边缘方向决定亮度分量在SAO模式判别过程中遍历的EO模式数量, 简化SAO模式判别过程. 具体做法为: 在当前CTU进行亮度分量的SAO模式判别过程中, 若主要边缘方向个数为0, 则不遍历EO模式, 只遍历BO模式; 若主要边缘方向个数不为0且次要边缘方向的个数小于30, 则只遍历主要边缘方向对应的EO模式和BO模式; 若次要边缘方向的个数大于30, 则遍历主要边缘方向和次要边缘方向对应的EO模式和BO模式.
2.3 色度分量SAO模式判别优化
一个CTU由一个亮度CTB(Y分量)和两个色度CTB(Cb分量和Cr分量)组成, H.265/HEVC标准规定, 两个色度CTB的SAO模式必须一致, 这样可以有效降低算法复杂度, 减少SAO参数编码比特数, 这利用了两个色度分量之间的相关性. 为进一步简化边缘方向提取过程, 本算法不对色度分量进行边缘方向提取, 而是利用亮度和色度分量之间的相关性来减少色度分量的EO模式遍历数量, 从而进一步优化SAO模式判别过程, 减少SAO编码耗时. 具体做法为: 将2.2中得到的边缘方向列表中排在最后的边缘方向设为当前CTU的低含量边缘方向, 在进行当前CTU的色度分量的SAO模式判别时, 不对低含量边缘方向对应的 EO模式进行遍历. 例如边缘方向列表为{0°, 135°, 45°, 90°}, 则当前CTU的低含量边缘方向为90°, 在色度分量SAO模式判别时不遍历EO_1模式. 若边缘方向列表中各种边缘方向的个数均为0, 则当前CTU的色度分量SAO模式判别过程只遍历BO模式.
3 实验结果与分析
本算法在HM-16.7平台上验证, 实验对6类不同分辨率的视频序列进行了测试, 共包含21个序列, 编码器配置为全I帧(AI)、 随机访问(RA)、 低延时B帧(LB)、 低延时P帧(LP), 量化参数QP设置为22、 27、 32、 37, 最大CU尺寸为64, 每一个序列在任意配置、 任意QP值的条件下均测试50帧. 算法性能通过BDrate[16]和节省时间两个指标来表征, BDrate值越小, 表示性能越好, 节省时间是指提出的算法减少的SAO编码时间, 计算方式为:
(3)
实验结果如表1所示. 表中给出了所有序列的Y-BDrate以及每种配置下节省的SAO编码时间, 其中, 在AI、 RA、 LB、 LP四种配置下, 本算法分别可以减少31.75%、 56.85%、 52.81%、 51.51%的SAO编码时间, 同时分别只有0.228%、 0.419%、 0.568%和1.313%的性能损失. 表1还给出了关闭SAO时编码器的性能, 可以看到, 与关闭SAO时相比, 本算法造成的性能损失较小.
表1 实验结果
表2给出本算法与近几年部分参考文献的性能对比. 文献[5]在4种配置下平均节省75.5%的SAO编码时间, 算法在AI配置下取得了较好的性能, 而在RA、 LB、 LP配置下性能损失较多; 文献[7]在4种配置下平均节省75%的SAO编码时间, 算法更适用于时域相关性较强且运动幅度较小的视频内容, 在AI和LB配置下性能损失略大; 文献[14]同样利用了提取CTU主要边缘方向来预测最优EO模式的方案, 算法通过边缘方向一致性算法直接获取CTU整体的主要边缘方向, 因此该算法更适用于整体边缘方向较单一且无局部复杂纹理的CTU, 算法在LP配置下取得了较好的效果, 而在AI配置下算法的Y-BDrate损失了0.4%, 相对原始SAO算法损失略大; 本算法在AI配置下性能损失小于文献[14], 在LB配置下本算法比文献[14]更节省时间, 而在RA配置下, 本算法在性能损失和节省时间两个方面均优于文献[14].
表2 与此前算法的性能对比
4 结语
本算法通过分析CTU的边缘方向特征, 减少CTU在SAO模式判别过程中遍历的EO模式数量, 大大简化了SAO模式判别过程, 显著减少SAO编码耗时. 实验结果表明, 本算法在性能损失较小的条件下, 在AI、 RA、 LB、 LP四种配置下分别节省了31.75%、 56.85%、 52.81%、 51.51%的SAO编码时间. 此外, 若待处理图像中包含过于复杂的纹理, 本算法在边缘方向提取过程中就会容易受到来自编码噪声的影响, 导致性能损失增大, 可以据此对算法做进一步的改进.