TM5码率控制算法的改进
2010-06-13龚志勇
龚志勇,胡 佳
(中国电子科技集团公司第五十四研究所,河北石家庄050081)
0 引言
动态视频压缩算法(如MPEG-2、MPEG-4、H.264等)都采用预测编码与变换编码相结合的结构,不同类型帧(I帧、P帧)采用不同的编码方式,I帧编码后产生的比特数是一般是P帧的3~4倍;同时图像内容的千差万别,相同类型帧编码后产生的比特数也会有很大差异,这种不断变化的输出码率和信道很难有一个好的匹配。如果编码后的数据直接送到无线信道上传输,会造成信道或拥塞、或空闲,大大降低了信道利用率。码率控制的目的是为了解决恢复图像失真尽可能小的情况下,充分利用信道传输带宽,满足时延的要求并使得输出缓冲区不发生上溢或下溢。
TM5算法是一种经典的码率控制算法,在深入研究TM5算法原理的基础上,对TM5算法中的不足进行了改进,并进行了测试验证。
1 TM5码率控制算法
仅考虑编码算法中 I帧和P帧的码率控制算法,TM5码率控制算法采用下面3个步骤来实现码率控制。
1.1 目标比特分配
根据已编码帧信息预测待编码帧的复杂度,分配待编码帧的比特数。复杂度度量为:
式中,S为图像被编码后产生的比特数;Q为已编码图像中每一宏块的量化参数的平均值。
使用式(2)和式(3)计算待编码图像可用的比特数,Ti和Tp分别表示I帧和P帧可用的比特数。
式中,Kp为P帧的复杂度加权系数;Xi和Xp为I帧和P帧根据式(1)计算的复杂度;R为当前GOP中未编码图像可以使用的bit数;bit_rat为信道传输码率;picture_rate为每秒钟编码的图像帧率,每个GOP编码完后,rate;N为GOP的长度。
1.2 码率控制
根据缓冲区占用度确定宏块的参考量化因子,以便调节码率使得实际编码比特数和目标比特数保持一致。
采用式(4)和式(5)计算缓冲区的占用度:
I帧和P帧的缓冲区占用度分别用di和dp表示,初始值为是在当前编码图像中,截止到宏块j-1(包括j-1宏块)时编码产生的所有比特数。MB_cnt是编码图像中包含的宏块数,当编码新的一帧图像时,缓冲区的占用度初始值设置为:
在每一宏块编码时刻的缓冲区的占用度确定之后,针对不同帧类型,按式(7)算法该宏块的参考量化参数:
1.3 自适应量化
结合宏块的实际空域活动特性,确定宏块的量化参数。宏块的活动性actj由宏块中的4个8*8的子块来决定,actj=1+min(vblk1,vblk2,vblk3,vblk4),每个8*8的子块的活动性由式(8)计算:
式中,n为子块序号为第n个字块中的样值,这些样值是原始图像的样值,p_meann是第n个子块样值的平均值,即
得到宏块的绝对活动性actj之后,可以根据上一帧编码图像的平均活动性来获得宏块的相对活动性
avg_act是当前编码图像前一帧中所有宏块绝对活动特性的平均值。
根据第2步中计算获得的Qj和本步中的N_actj,可以计算出宏块j的量化参数:
TM5算法首先从帧的层次进行了比特分配,又根据缓冲区占用度从宏块级进行了精细的码率控制,并确定了宏块的一个基准量化参数,最后根据每一个宏块自身的空间特性进行了自适应量化参数调整。整个TM5码率控制算法从帧层、宏块层对码率进行了粗细2级控制,考虑了带宽和宏块特性,这种码率控制思想对后来码率控制算法的发展产生了很大的影响。
2 TM5算法的局限性
由于TM5算法采用的模型较为简单,存在以下3个方面的局限性:
①由式(5)可以看出采用平均方式给P帧图像分配比特数,没有考虑图像复杂度。这样会造成复杂度比较高的图像分配到不足的比特数,采用的Q值过大,图像质量过低;而图像复杂度比较低的帧分配到过多的比特数,采用的量化参数Q值过小,浪费了分配的比特数,进而造成图像质量和缓冲区占用度的不稳定;
②H.264编码算法中,I帧编码产生的比特数一般是P帧的3~4倍,在每个I帧编码完成之后输出缓冲区的占用度会急剧上升,造成系统时延的增大,TM5算法中没有特殊控制I帧编码的方法;
③TM5码率控制算法中没有提到专门监控编码器实际输出缓冲区状况的方法,输出缓冲区容易堆积数据,导致缓冲区溢出引起丢帧,时延增大。
3 TM5码率控制算法改进
针对以上提出的TM5码率控制算法中的不足,进行了如下4个方面的改进。
3.1 结合图像复杂度的比特分配
在给待编码的每个P帧分配比特数时,不采用平均分配的方式,而是对较复杂的图像分配较多的比特数,简单图像分配较少的比特数。
P帧图像复杂度采用式(11)进行计算:
式中,H和W为图像的宽和高;fn(i,j)和fn-1(i,j)分别为当前帧图像像素点的值与前一帧图像中对应像素点的值。
保存连续N-1个P帧图像的D值和编码产生的比特数T,式(5)改进为如下形式:
式中,α为常系数,0≤α≤1,一般取0.7。
3.2 I帧处理
为了降低I帧编码完之后输出缓冲区的占用度,在码率控制算法中采用主动跳帧。具体方法如下:编码完I帧之后,在准备编码第一个P帧之前判断当前输出缓冲区的占用度是否超过某一界限,如果超过,则可以等待一帧的时间间隔后再编码,如果编码第2个P帧之前的缓冲区占用度仍较大,可继续等待一帧的时间间隔,这样后续编码帧的时延会大大降低,而跳过一帧不会影响人眼观看的视觉效果。
3.3 实际输出缓冲区状态监测
在每帧图像编码之前,检测编码器实际输出缓冲区占用度,如果输出缓冲区占用度超过某一界限,在根据上述算法计算出宏块的量化参数之后,适当调整待编码图像宏块的量化参数:输出缓冲区占用度超过某一门限的时增大量化参数;反之,输出缓冲区占用度低于某一门限的时减小量化参数,从而使得实际缓冲区占用度处在某一恒定的范围内,不会溢出从而造成丢帧。
3.4 其他改进
根据工程实践中的一些经验对TM5算法中的第3步采用一定的技巧降低算法的复杂度,有利于在嵌入式系统中实现。
4 改进前后试验对比
采用PC机平台的H.264参考代码JM86,进行了恒定传输带宽情况下的实验,传输带宽为2Mbps,选取D1分辨率的测试序列 mobcal、parkrun、shields,评估改进后码率控制算法的效能。
TM5算法改进前后缓冲区占用比特数对比如表1所示。可以看出,缓冲区中平均占用的比特数大大降低了,从而整个系统的时延得到了减小。改进之前输出缓冲区堆积数据平均为572 kB左右,该堆积数据对应的传输时间为572/2 048×1 000 ms≈279 ms,改进之后输出缓冲区堆积数据平均为140 kB,该堆积数据对应的传输时间为140/2 048×1 000 ms≈68ms,减小了211 ms左右,大大提高了系统传输的实时性。
表1 改进前后缓冲区中比特数
使用mobcal序列测试改进前后的算法,记录每帧图像编码前缓冲区中占用的比特数,取其中的某一段数据,缓冲区占用比特数对比如图 1所示。由图1可以看出,改进后有一些跳帧,但缓冲区占用度波动较小,并且缓冲区堆积比特数较少。
图1 改进前后缓冲区堆积比特数对比
5 结束语
从实验结果可以看出,改进后的码率控制算法输出的码率波动很小,并且缓冲区占用度较低,大大降低了系统时延,对时延要求很小的图像编解码系统具有很高的实用价值。
虽然还有许多其他的码率控制算法,并且在PC机上实现时效果比TM5算法好,但这些算法模型比TM5算法复杂得多,而复杂的算法不适合在处理能力有限的嵌入式系统中实现,因此改进后的算法能够较好的适用于工程实现,该算法已应用于多个工程项目中。
[1]钟玉琢.运动图像及其伴音通用编码国际标准——MPEG-2[M].北京:清华大学出版社,1997.
[2]JIANG Min-qiang,YI Xiao-quan.Improved Frame-layer Rate Control for H.264 Using Mad Ratio[J].IEEE ISCAS,2004(3):813-816.
[3]李恒友,李建华,顾丹丹.一种基于复杂度改进的帧级码率控制算法[J].仪器仪表学报,2005,26(8):567-569.
[4]唐田野,刘 钊.一种获得均匀图像质量的视频码率控制方法[J].计算机应用,2005,25(11):2592-2594.