关键词: 编码 , 帧间预测
1 引言
在H.264视频编码中,对于帧间预测,一个16×16的宏块(MB)可分成16×16,16×8,8×16,8×8进行运动估计,其中8×8还可以进一步分为8×4,4×8,4×4的子块。这样,每个细分的模块都去寻找更精确的匹配块,可以增加预测精度提高压缩率。但是,由于每种分类都要进行运动估计,这样做直接的代价就是巨大的计算量。
针对多模式预测带来的计算量增加的问题,近年出现的帧间模式选择算法得到了深入的研究,其中利用阈值提前截止的模式选择的思想得到非常广泛的应用,在只有较小性能损失的代价下,减小计算复杂度。如文献提出如果发现16×16模式已经适用,就直接跳过对16×8和8×16的模式检查,否则全搜索;文献提出利用多级阈值,且阈值依QP变化的方法等。本文的研究也基于通过阈值预判的方法进行宏块选择。
2 帧间模式快速选择算法
2.1 帧间模式选择使用自适应阈值的算法
利用阈值进行预判确实可以在视频质量下降可忽略情况下使编码复杂度尽量降低,然而以上方法有一定的局限性。文献中提出的算法只考虑了3种模式,在很多情况下仍然使用全搜索,文献虽然提出了可变的阈值,但是它的阈值只是随着QP变化而变化的,并没有考虑到不同视频自身的特性。由于不同视频序列特点不同,即使是同一个视频序列内部的不同帧也有着不同的特点,而影响阈值的因素又较多。基于以上观点,本文提出了一种利用统计分类的方法,通过对帧间预测模式进行分类,并选取自适应阈值对宏块模式进行选择。
一般情况下16×16模式使用率最高并且其SAD(Sum of Absolute Difference)值一定会经过计算,所以可建立16×16模式的SAD值(文中简称sad16)和最终选择的模式之间的关系,这是一个标准的模式分类问题。笔者通过视频中相邻帧之间的时间相关性,通过前一帧的模式对应的sad16分布情况,训练得到下一帧的阈值,从而对下一帧的宏块模式进行选择。具体方法如下:
1) 分类
首先将H.264的多种帧问模式分为两类:BSM(BigSize Mode),包括16×16,16×8,8×16模式,SSM(SmallSize Mode),包括8×8,8×4,4×8,4×4。经过对一些CIF格式的测试视频序列的统计可以发现,一般情况下BSM的概率要大于SSM的概率(见表1),又由上文所述,SSM的计算量更大,所以可以在BSM和SSM之间设置一个阈值T,代表了对模式预测精度的可接受程度。如果小于阈值T则该宏块只选择BSM,如果大于阈值T则该宏块对两种模式都进行计算。
2) 统计
分别计算两种模式下的sad16,经过测试发现sad16值普遍小于8 000,为了便于统计,将计算得到的sad16值左移7位即除以128,将sad16分布在64个取值区间内。按照原始模式选择算法对一帧中的每个宏块进行模式选择,记录其对应的sad16值,从而统计该帧中每个模式对应的不同sad16区间内宏块个数的分布。由于SSM的值比较小,为了便于观察,将其统计结果乘以10。公式如下
式中:k为sad16的64个取值区间,取值为[0,63];sad16∈k代表sad16值在区间k内;若该宏块被判断为BSM模式则nBSM=1,nSSM=0;若该宏块被判断为SSM模式则nSSM=1,nBSM=0。图1和图2分别为两种较具代表性的CIF序列foot-ball和foreman相邻两帧的统计分布图。
由图1,2的统计结果可以看出:取BSM模式的宏块占大多数,且对应的sad16主要分布在较小值区域,在较大值区域也存在但较少;而取SSM模式的宏块占少数,且对应的sad16主要分布在较大值区域,但是数量不多(图1,2中SSM模式已乘10)。通过其他一些测试序列也可以得到相同结论。因此,可通过取一个阈值T,在只计算sad16的情况下,判断该宏块是否可直接决定为BSM模式。当sad16T时,既计算BSM模式也计算SSM模式。由图1,2中还可看出,不管是运动较剧烈的football序列还是运动较平缓的foreman序列,任取的相邻两帧的分布图都非常相似,所以可以基于序列相邻两帧间的时间相关性,利用前一帧的分布来预测下一帧的阈值。
3) 误判率
本算法对计算量的节省较多,而且视频质量几乎没有下降,其代价是一些SSM模式的宏块被判断为BSM,而损失了一些压缩率。如图3所示,阈值取T时,阴影部分所示本应为SSM,但由于sad16在阈值T左面,而被判断为BSM,虽然阴影部分属于误判部分,但是由于阴影部分在阈值左面,属于sad16相对较小区域,所以最终的SAD变化较小,压缩率损失不大。则选取阈值的标准就是:使BSM模式尽量多地在阈值T左面,以减少判决时间;使SSM模式尽量在阈值右面,以减少损失的压缩率。
2.2 4种自适应阈值选取方法
基于上文分析的选取阈值的标准,如何根据前一帧的统计结果设置下一帧的阈值有很多种方法,本文初步提出了4种阈值计算的方法:
1) 最小值阀值法(minimum value thresh,MVT)
该方法取BSM曲线的最大sad16,取SSM曲线的最小sad16,然后取两者之中较小的一个作为阈值,如图4所示。
阈值计算公式为
MIN(sad16,SSM)一般是取SSM时sad16的最小值,而为了避免有些帧不存在SSM的情况,选取MAX(sad16,BSM)进行比较,取二者最小值。由于MIN(sad16,SSM)一般是不断变大的,而MAX(sad16,BSM)的值本身就很大,所以可以给它们乘以一个小于1的比例因子,以控制它的大小。则修正后的阈值计算公式为
式中:α1,α2∈(0,1)为修正系数,可取α1=1/2,α2=3/4。
2) 面积百分比阈值法(area percent thresh,APT)
该方法计算BSM曲线的总面积,取该总面积的β%的面积所对应的sad16作为阈值,如图5所示。
阈值计算公式为
式中:β∈(0,100)为面积百分比因子,取β=75效果较好。
3) 最高点阈值法(highest point thresh,HPT)
该方法取BSM曲线中达到的最高点所对应的sad16作为阈值,如图6所示。
阈值计算公式为
4) 衰减因子阈值法(attenuation factor thresh,AFT)
该方法取BSM曲线中达到的最高点,越过最高点后,取该高度的(1-ω)高度所对应的sad16作为阈值,如图7所示。
阈值计算公式为
式中:ω∈(0,1)为衰减因子,取ω=0.75效果较好,可取TAFT>THPT的值。
本文只是实验了4种计算阈值的方法,利用本文2.1得到的统计图以及模式分类思想还可使用其他计算方法得到可用的阈值。
2.3 算法流程
由上一帧宏块级别的步骤4记录的每个宏块的信息,按照本文所述几种方法,计算本帧inter模式选择需要的阈值T,并利用T对本帧中的每个宏块进行分类,具体步骤如下:
1) 将16×16,16×8,8×16作为备选模式,计算sad(16×16),sad(16×8),sad(8×16),取最小值设为sadmin;
2) 若sadmin
3) 将16×16,16×8,8×16,8×8(其中8×8包括子块subblock 8×4,4×8,4×4)作为备选模式,计算sad(8×8),与之前计算的sad(16×16),sad(16×8),sad(8×16)比较,求之中的最小值,选择该模式,跳至步骤4;
4) 结束该宏块模式选择,记录该宏块相关信息以备计算下一帧阈值。
3 仿真结果
仿真条件:先用MPEG-2编码器对6个CIF(352×288)序列mobile,football,bus,news,table,foreman的前100帧进行MPEG-2编码,设定参数N=12,M=3,码率6 Mbit/s得到源视频。转码过程参考MPEG-2解码器和T264编码器实现。帧率为30 f/s,OP为30,GoP为200。实验平台为Intel P4 2.0 GHz,内存512 Mbyte,操作系统为Windows XP。使用自适应阈值算法且其中的阈值为最小值阈值方法,简称ATH_MVT,其他简称类似。经实验得到最佳经验因子:ATH_APT算法中取β=75,ATH_AFT算法中取ω=0.75。仿真结果见表2(给出3个典型序列:较多细节的mobile,运动较剧烈的football,较平稳的news的结果,其他序列结果略)。
由仿真结果可知:
ATH_MVT方法在搜索时间和编码时间的减少上性能一般,除运动较剧烈的football序列外,其搜索时间减少大都在38%以上,其编码时间减少大都在26%以上。该方法PSNR下降在0.01dB以内,码率(bitrate)上升在0.39%以内,性能损失较小。
ATH_APT方法在搜索时间和编码时间的减少上具有较好的性能,其搜索时间减少大都在45%以上,其编码时间减少大都在30%以上,值得一提的是,对于运动相对较剧烈的football序列,它比其他方法更好的省时效果;该方法PSNR下降在0.01 dB以内,码率上升在1.1%以内,性能损失稍大。
ATH_HPT方法在搜索时间和编码时间的减少上对于所有序列都是最差的,其搜索时间减少最低为7%左右,其编码时间减少最低为5%左右;该方法视频质量最佳,PSNR值不低于原始算法,码率上升在0.47%以内,性能损失较小。
ATH_AFT方法在搜索时间和编码时间的减少上有最好的性能,除football序列外,其搜索时间减少大都在50%以上,其编码时间减少大都在30%以上。该方法视频质量较佳,PSNR值基本等于原始算法,码率上升在0.15%以内,性能损失很小。
图3中的阴影部分为SSM的误判部分,利用公式
将使用了自适应阈值算法判定的SSM个数与原算法中判定的SSM的个数作比较得到的误判率见表3(依然只列出3个典型序列)。其中TH_HPT(使用最高点阈值法的原算法)的误判率相对较小,其他3种方法的误判率相对稍大,但最大也不超过30%。
综合考虑:TH_MVT各个方面性能表现比较平庸;TH_HPT虽然有更小的误判率,但是其搜索时间和编码时间的节约很小,并不实用;TH_APT更适合于视频运动较剧烈且对性能损失要求不很严格的情况;TH_AFT方法取得的阈值在一般情况下具有最好的效果,它能使视频编码在保持良好性能的情况下更节省编码时间,在4种方法中是针对一般序列的较好方法。
4 小结
基于相邻帧之间的时间相关性并通过模式识别中分类统计的方法,本文提出了一种H.264编码中帧间模式选择的算法,并针对该算法给出了4种计算阈值的方法。经过多个测试序列的实验证明:跟原始算法相比,本文提出的算法在性能下降可忽略情况下使编码时间有显著节省,其中TH_AFT的阈值选取方法针对一般序列得到的效果最佳。本文算法可进一步进行扩展,如增加多级阈值以及设计更好的阈值计算方法等。
评论