摘 要: 针对JVT-H017码率控制算法中跳帧策略没有很好地考虑图像的运动复杂程度,仍采用类似于MPEG-4 Q2中的简单方法的问题,提出了一种基于运动复杂度的跳帧算法。此方法充分利用了序列的运动程度,较好地缓解了由于物体剧烈运动所带来的缓存上溢现象,优化了图像的质量。
关键词: JTV-H017;码率控制;运动复杂度;跳帧
H.264[1]是最新的国际视频编码标准,它不仅使视频压缩比以往标准有明显提高,而且具有良好的网络亲和性,特别是对 IP互联网、无线移动网等易误码、易阻塞、QoS不易保证的网络视频传输性能有明显的改善。因此,H.264已成为现今图像压缩研究的一个热点。同时,码率控制作为视频压缩算法的一个重要方面,也引起了研究者的很大重视。
在H.264码率控制经典算法里,JVT-H017[2]因对实际码率和PSNR的控制更加准确,并能更好地逼近限制的码率,而与JVT-G012[3]一起成为目前最常用的H.264码率控制算法。但JVT-H017算法仍然存在明显的不足[4]: 同时引用率失真(R-D)模型和MAD线性模型会增加编码的计算量;算法中图像组GOP(Group of Pictures)码率的分配方法和HRD机制限制了前后质量平缓度的进一步提高;编码后的跳帧策略仍然采用类似于MPEG-4 Q2中的简单方法,严重影响了运动剧烈图像的质量。本文在介绍JVT-H017码率控制算法的基础上,提出了一种利用运动复杂度作为跳帧判别的算法,合理地分配缓存空间给运动剧烈的帧,较好地保留了图像的细节,进一步提高了图像的质量。
1 JVT-H017码率控制算法
JVT-H017码率控制策略包含3个层次:GOP层、帧层和基本单元层。其中基本单元层指的是同一帧中一组连续的宏块,每个基本单元层至少包含一个宏块。
1.1 GOP层码率控制
GOP层码率控制主要任务是计算当前GOP 中剩余图像帧的比特数,初始化即时解码刷新(IDR)和第一个存储帧的量化参数。当第i个GOP的第j帧被编码时,当前GOP中剩余帧的比特数计算如下:
1.2 帧层码率控制
帧层的码率控制包括编码前和编码后两个阶段。
1.2.1 编码前阶段
编码阶段是计算每一帧的量化参数。对于存储帧和非存储帧,方法是不一样的。本文介绍的是只有存储帧的情况。这一过程分两个步骤完成:
(1)确定每个帧的目标码率
①确定当前GOP中每个存储帧的目标码率
每一个存储帧的目标缓冲由第一个IDR或存储帧的编码比特和平均复杂度得到。在编码完第i个GOP的第1个存储帧后,目标缓冲的初始值为:
(2)计算量化参数和执行率失真优化(RDO)
首先采用式(9)计算与目标比特关联的量化步长,相应的量化参数QPi(j)由量化步长和高级视频编码(AVC)的量化参数计算得到:
1.2.2 编码后阶段
编码一帧以后,系数a1、a2及c1、c2采用类似MPEG-4 Q2部分的线性回归模型进行更新。在此过程中,实际编码产生的比特加入到缓存中。为保证更新后的缓存占用率不要过高,采用类似MPEG-4 Q2部分的跳帧策略进行调整。
1.3 基本单元码率控制
基本单元码率控制和帧层码率控制的方法类似,为每个基本单元预测MAD,计算目标比特,用二次R-D 模型计算基本单元层的QP时需考虑:(1)对当前帧的第一个基本单元,QP需设为前一帧所有基本单元量化参数的平均值;(2)当前帧中还有未编码的基本单元,而分配给它们的剩余比特数却小于零。这时,当前基本单元的QP应相应地增大;(3)其他情况下,通过二次R-D模型来获得QP。
2 改进的跳帧算法
在实际的编码中,如果每个GOP都超过了预先分配给它的比特数,这时缓冲就会溢出,从而导致跳帧现象,使得图像的质量下降[4]。JVT-H017码率控制算法采用的跳帧方法仍是MPEG-4 Q2中的简单方法,即只是简单地设置缓存区占有度上限达到80%时,就执行跳帧。(同样在以往的跳帧控制算法中[5],一般都只是将缓存的上限定为80%来作为跳帧的依据,当缓存容量超过80%时,将此帧定为跳帧)。相反,当缓存容量低于25%时,也将此帧定为跳帧,但是这样处理没有充分考虑到简单的跳帧会影响运动剧烈的图像的细节表现,导致图像质量严重下降。于是参考文献[6]根据高运动复杂度对应高比特数、低运动复杂度对应低比特数这一比特分配法则,利用过滤掉运动平稳的帧而保存运动剧烈的帧,并为运动剧烈的帧分配更多缓存空间的思想,提出了用前一帧预测得到的比特数与前面已编码帧的实际比特数的平均值的比值作为衡量跳帧的标准。但参考文献[5]并未考虑到出现比特数较多和比特数较少的帧交错的帧序列这一情况。若前一帧比特数较少,当前帧比特数较多,则得到的比值偏小;反之,得到的比值偏大。可见用此方法作为跳帧的判断方法,准确率并不高。所以本文算法从图像复杂度算法本身入手,并考虑到相邻帧之间具有很强的相关性,重新定义一个跳帧判别方法,力求得到的跳帧判别方法能较准确地优化图像质量。
为了更好地适应AVS编码器的实时应用,减少B帧延时带来的影响,本文只考虑有I帧、P帧的图像格式。由于I帧编码需要较多的比特数,它将占据多个帧间间隔传输,因此,本文为了减小缓冲延时,紧邻I帧的前两个P帧仍按原算法进行跳帧。即从第3个P帧开始定义当前P帧的运动复杂度因子ci:
3 实验结果与分析
为了对算法进行分析,在JM8.6上对本跳帧算法进行仿真。实验中分别使用QCIF序列foreman和CIF序列mobile,共编码100帧,GOP的结构是 IPPP…IPPP…,帧内编码刷新周期为20帧,第一帧的量化步长为28,a= 0.6,b=0.8,w1=60%,w2=70%,a1=3/2,a2=1/2。在JM8.6现有的码率控制算法的基础上,分别对跳帧策略与参考文献[2]和参考文献[5]中的跳帧策略进行测试,截取其中的20~40帧进行显示。比较3种算法的PSNR。在相同的条件下,本文提出的跳帧算法相对其他两个跳帧算法有所改进,更加准确地做到了跳过平稳运动的图像,保留运动剧烈的图像这准则。从表1、表2可以看出,本文提出的跳帧算法,使信噪比有所提高,优化了图像的质量。
本文针对JVT-H017码率控制算法中跳帧策略仍然采用类似MPEG-4 Q2的简单方法这一缺点,提出的跳帧算法合理地利用了图像运动复杂度这一尺度来作为判别标准,与参考文献[2]的(JVT-H017)相比,使得图像信噪比有所提升,优化了图像质量。但是,本算法并没有考虑到出现场景切换和B帧存在的图像序列的跳帧问题,所以将来的工作将是在此算法的基础上,提出一种更好的优化算法,使其能提高不同图像序列的图像质量。
参考文献
[1] 余兆明,查日勇,黄磊,等.图像编码标准H.264技术[M].北京:人民邮电出版社,2005.
[2] MA Si Wei, LI Zheng Guo, WU Feng, et al. JVT-H017-2003 proposed draft of adaptive rate control[S]. 2003.
[3] MA Si Wei, LI Zheng Guo, WU Feng, et al. JVT-G012 -2003 proposed draft of adaptive rate control[S]. 2003.
[4] 李记苗,刘彦明,高峰.H.264码率控制及其改进策略[J].计算机与数学工程,2006(6):52-54.
[5] 郑从卓,李均利,陈刚,等.AVS实时编码的VBR码率控制[J].计算机程,2009(35):240-242.
[6] 周骏华,石旭刚,宋玮.一种基于运动复杂度的新的H.264码率控制算法[J].浙江工业大学学报,2006(6):672-675.