赵海国
(湖南理工学院 数学学院, 湖南 岳阳 414006)
H.264解码器主要负责将压缩的视频数据解码并进行图像重建. 在 H.264解码器反变换量化过程中,由于DCT 变换系数的量化过程相对粗糙, 使得反量化过程恢复的变换系数带有误差, 造成图像块边界上的视觉不连续; 而且, 由于运动补偿块可能是从不同帧的不同位置上的内插样点数据复制而来, 运动补偿块的匹配不可能是绝对准确的, 在复制块的边界上也会产生数据不连续的情况, 使得反变换量化后图像出现明显的方块效应.
为了去除 H.264 编解码算法带来的方块效应, 改善图像的主观效果, H.264使用了去块效应滤波器.去块效应滤波器在提高压缩效率的同时, 对块边界的像素值进行调整, 使得块与块之间的界限不再那么明显, 减少了方块效应, 但其计算复杂度也大大提高了. 因此, 研究 H.264的去块滤波算法, 降低去块滤波的计算复杂度, 提高解码器的运行效率是非常有必要的.
H.264标准中, 滤波器是以16×16像素大小的宏块为单位, 以4×4像素大小的块为基础, 对整个重建图像进行滤波. 图l为图像中一个宏块(MB)的亮度块、色度块以及滤波时用到的相邻块, 数字0~23表示宏块中的4×4块(0~15为亮度块, 16~23为色度块), 字母a~p表示滤波时用到的相邻块.
图1 MB的亮度块和色度块
一个宏块MB的基本滤波顺序原则:
(1)如果此宏块边界是一幅图像边缘(即真实边界)则不滤波;
(2)先亮度块再色度块;
(3)从左到右对宏块的4条垂直块边界进行水平滤波;
(4)从上到下对宏块的4条水平块边界进行垂直滤波.
图2 计算滤波强度BS的流程图
滤波过程主要分为两步: 第一步是边界滤波强度 BS的计算, 第二步是根据不同的滤波强度对边界像素进行不同程度的滤波.
每个 4×4亮度块都定义了边界强度 BS. 针对不同的 BS的块边界, 选择的滤波器和所需滤波像素点也不同. 色度块的边界强度与相应的亮度块保持一致. 边界强度的判别过程如图2所示.
计算边界滤波强度 BS时, 不妨设m, n分别表示两个相邻的4×4块, 则计算BS的过程可用下面的伪代码表示:
if(m或n是帧内编码)
{BS=3;
if(块边缘是宏块边缘) BS=4;
}
else if(m或 n残差变换系数不都为0) BS=2;
else if(m或n参考帧不同或运动矢量不同) BS=I;
else BS=0;
由BS的计算过程可知, 边界块BS的取值取决于块的编码信息: 当BS=4时, 采用最强滤波; 当BS=0时, 不采用滤波; 当BS=1、2、3时, 采用标准滤波模式; 针对不同BS的块边界, 选择的滤波器和所需的滤波像素点也不同, 色度块的边界强度和相应的亮度块的边界强度一致. 这样, 根据不同的情况给予不同的滤波, 可使得去块滤波达到最佳效果.
滤波过程的第二步是根据不同的滤波强度BS对边界像素进行不同程度的滤波. 滤波时要区分图像中的真实边界和由DCT 变换系数量化而造成的假边界, 为了保持图像的逼真度, 应该在滤除假边界的同时尽量保持图像真实边界不被滤波.
滤波过程主要包括边界滤波强度 BS的计算以及根据不同的滤波强度对边界像素进行不同程度的滤波两步, 对应使用getstrength ( )(计算BS)和edgeloop( )(滤波)两个主要函数. 在滤波过程中二者的运算量见表1.
从表 1中可看出, 滤波 90%以上的运算量集中在边界滤波强度BS的计算上, 要降低滤波的复杂度,应该从BS的快速计算上改进滤波算法. 快速算法的提出是基于利用图像的数据相关性对 BS进行预判的思想. 在图像的很多区域内同一块内的相邻像素是高度相关的, 尤其是在平坦区域. 更重要的一点是,根据H.264标准中滤波器的滤波原理, 最小的滤波单元是4×4的块, 因此穿过同一边界属于同一相邻块区域的相邻列的BS具有极高的相关性, 因此可以对某些列像素的BS进行预判, 而不必对同一边界的16列像素点的BS一一进行比较计算. 根据上述理论分析, 只要计算出同样相邻4×4块内的第一列像素点的BS, 其余三列像素点的BS可以直接根据第一列的BS进行预判, 一般直接取第一列的BS值即可. 同样的,对于宏块的垂直边界滤波采用相同的算法, 这样就跳过了大量的比较判断, 省去了重复的计算过程, 在很大程度上降低了滤波过程的复杂度.
表1 复杂度分析数据统计结果
基于H.264标准的软件参考模型JM86使用不同的测试序列对快速去块滤波算法作性能测试, 测试结果表明(见表 2): 对于BS计算模块部分, 快速算法可节省约 70%的滤波运算量, 对整个解码器而言, 解码100帧的情况下, 解码总耗时降低5%左右.
表2 改进算法与原算法BS运算量比较
由于H.264编码预测模式是基于宏块的, 又根据图2中滤波强度BS的判决原则, 可以从宏块帧内模式和帧间模式编码信息两方面引入一种快速预判算法.
有关帧内模式的快速预判: 由图2可以发现BS=3或BS=4仅取决于宏块编码预测模式是否为帧内模式以及是否为宏块边缘, 而H.264编码模式的确定是基于宏块的, 因此在宏块滤波开始时通过宏块编码预测模式信息, 判断如果该宏块为帧内模式则可预判当前整条滤波边BS[0]~BS[15]均为4或3, 以减少图2中模块的循环判决次数以及获得m、n块编码信息模块的运算次数, 降低滤波强度BS的计算量.
有关帧间模式的快速预判: 根据图像的空间相关性, 在图像很多区域内同一宏块的相邻像素有很高的相关性, 特别是平坦区域. 统计发现帧间预测的大块分割模式(16×16, 16×8, 8×16)占据编码模式60%以上的比例. 而16×16, 16×8, 8×16分割模式大分割块内各4×4滤波块参考帧及运动矢量信息都是相同的.
根据 BS判决原则, 当每条滤波边像素所在4×4块的残差系数为0时, BS为 0, 则可根据帧间具体模式来提前预判当前整条滤波边BS, 具体预判为: (1)当滤波宏块为帧间 16×16模式时, 预判当前滤波边(如图3所示, 垂直滤波时b、c、d, 水平滤波时 f、g、h)BS[0]~BS[15]为0; 预判后进入4×4块残差系数判决,如果有残差系数则更改BS为2, 否则保持原判; (2)当滤波宏块为帧间16×8模式时, 预判当前滤波边(如图3垂直滤波时b、c、d, 水平滤波时f、g)BS[0]~BS[15]为0; 预判后进入4×4块残差系数判决,如果有残差系数则更改BS为2, 否则保持原判; (3)当滤波宏块为帧间8×16模式时, 预判当前滤波边(如图3垂直滤波时b、d, 水平滤波时f、g、h)BS[0]~BS[15]为0; 预判后进入4×4块残差系数判决, 如果有残差系数则更改BS为2, 否则保持原判; (4)垂直滤波时8×16模式下的c边和水平滤波时16×8模式下的g边在参考帧和运动矢量上判决结果是一样的, 可以只对第一像素作参考帧及运动矢量比较, 来预判c、g整条边BS[0]~BS[15]为1或0; 预判后进入4×4块残差系数判决, 如果有残差系数则更改BS为2, 否则保持原判. 使用以上预判可以减少图2中模块的循环判决次数与运算, 降低滤波强度BS的计算量.
图3 可预判的帧间模式宏块图
基于H.264标准的软件参考模型JM86使用不同的测试序列对基于BS预判的去块滤波优化算法作性能测试, 测试结果表明, 在相同图像质量的情况下, 基于BS预判的去块滤波优化算法比H.264耗时降低约75%(见表3), 对整个解码器而言, 解码300帧的情况下, 解码总耗时降低20%左右(见表4).
表3 优化算法与原算法滤波时间表
表4 优化算法与原算法解码总时间表
为了去除 H.264 编解码算法带来的方块效应, 改善图像的主观效果, H.264使用了去块效应滤波器.去块效应滤波器的滤波过程主要包括边界滤波强度 BS的计算和根据不同的滤波强度对边界像素进行不同程度的滤波两步, 其中90%以上的运算量集中在边界滤波强度BS的计算上. 利用图像的数据相关性对BS进行预判, 引入快速去块滤波算法, 可以实现 BS的快速计算, 改进了滤波算法. 实验测试表明, 在不影响图像质量的前提下, 快速算法较标准中原算法节省约 70%的滤波运算量, 解码总耗时降低 5%左右.进一步分析滤波过程中边界滤波强度BS的判决原则, 结合图像的空间相关性, 引入基于BS预判的去块滤波优化算法——有关帧内模式的快速预判和有关帧间模式的快速预判, 减少了计算BS的过程中模块的循环判决次数与运算, 降低滤波强度BS的计算量. 实验测试表明, 在不影响图像质量的前提下, 基于BS预判的去块滤波优化算法较标准中原算法滤波耗时降低约 75%, 解码总耗时降低 20%左右, 有效地提高了H.264解码器的运行速度.
[1]毕厚杰.新一代视频压缩编码标准[M].北京: 人民邮电出版社, 2005
[2]王继山, 李 挥.一种快速去块滤波器结构[J].微电子学与计算机, 2005, 22
[3]吴启宗, 朱秀昌. H.264中的去方块滤波[J]. 有线电视技术, 2005, 16
[4]韩 峥, 唐 昆.H.264去块滤波快速算法的设计与实现[J].电视技术, 2006, 6
[5]Lam K H.Reduced complexity deblocking filter for H.264 video coding[C]. The Ninth Asilomar Conference on Signals, Systems and Computers, October 28-November 1, 2005.