南京邮电学院信息工程系 朱秀昌
摘 要:本文简要介绍了视频编码中的编码控制技术,着重分析了编码速率、图像失真和计算复杂度之间的关系,以及基于这一分析的几种具体的编码控制方法。
为了有效地保证视频编码信息的互通,大多数视频编码标准(如H.263、MPEG-2/4、H.264/AVC等)仅规定了编码的基本方法、比特流的语法结构和标准的解码过程。而对于具体的编码过程则充分开放,允许实现者灵活地处置。在视频压缩编码中起重要作用的编码控制技术也位于其中。编码参数的控制,如帧模式、宏块模式、运动矢量、量化步长等,直接关系到编码产生的比特数,关系到重建视频的质量,关系到视频编码器的复杂程度。因此,视频编码控制技术一直受到人们的关注,在这方面已做出了很大的努力,并取得了长足的进展。
一、引言
传输环境、处理器能力等实际因素会对视频编码的比特率和图像质量形成种种限制。为了在这些条件限制下,达到最佳的压缩性能,对视频编码过程进行控制是非常必要的。编码控制的目标就是在实际传输比特率的限制下,以最小的计算复杂度来获得尽可能好的图像质量。编码比特率、计算复杂度和重建图像质量之间的关系随着输入视频不同而变化,如是“有噪声”的还是“干净”的、是多细节的还是少细节的、是复杂运动的还是简单运动的序列。
失真控制,速率控制,即率-失真优化(Rate Distortion Optimization),其目标就是在一定的传输率限制的条件下,取得最好的图像质量。
近来,视频编码的可变复杂度算法(VCA:Variable Complexity Algorithm)可以使开发者能够控制计算复杂度,驾驭处理资源。新的算法在保证最小失真的前提下,联合控制比特率和计算复杂度,这就是算法复杂度控制。
在这三种控制中,图像质量,或失真大小的控制是最终的目标,但往往难以直接达到;速率控制和计算复杂度控制是为获得最好图像质量服务的,可以直接控制它。本文以下部分简要介绍视频编码控制中的这三项主要控制技术。虽然是分别讨论这三种的控制,但实际上它们是相互关联、相互影响的,不能将它们割裂开来看待。
二、速率控制
速率控制算法的选择对视频质量有很重要的影响,它是受多种因素制约的。例如,受计算复杂度的制约,一般说来,越是有效的算法,其复杂度越高;受编码视频内容的制约,如是相对“静止”的视频会议场景,还是快速运动的电影场景,很难对所有的场景都适用;受传输信道的限制,如是低时延的实时信道,还是离线的存储介质。
下面介绍三种有代表性的速率控制算法。
1. 缓存反馈法
速率控制中最为简单的一种是缓存容量反馈控制法,如图1所示。视频编码后产生编码比特输出速率Rv是可变的。假设受限的信道速率为Rc,为了使可变的编码速率Rv和信道速率Rc相匹配,编码器中设置了一个缓存器。
随着每一帧被编码,编码数据以可变的Rv速率填充缓存器,以的Rc速率移出缓存。由于没有对变化的速率Rv有限制,缓存的数据既有可能漫出(“上溢”),也有可能变空(“下溢”)。为了避免这种情况的发生,可将缓存的占有率B的信息“反馈”到编码器去控制量化步长Q。随着B的增加/减少,Q也随着增加/减少,这就引起压缩率的增加/减少,始终维持缓存容量在一个合理的范围内。
这种方法的优点是十分简单和直接,但它有明显的不足之处,即解码图像质量的波动。例如,一旦视频场景中活动性突然增加,使得缓存占有率B增加的太快,以至于来不及通过Q来控制速率,从而引起缓存上溢,这时惟一的办法只有跳帧,而跳帧就形成了帧率不稳。再如,在每一编码帧的结尾,随着B的增加Q也增加,导致在每一帧的开头图像质量较高,而在结尾(下部)由于大的量化间隔而质量明显下降。
2. H.263的TM8(测试模式8)
H.263的测试模式版本8的速率控制包括:图像帧级速率控制,决定是否跳帧等;宏块级速率控制,为每个宏块计设置化步长。
1)帧级控制
在编码时,如果缓存中的容量超过门限值M,就跳过下一帧;否则就为下一个编码帧建立一个目标比特数B。门限值M越高跳帧数就越少,但结果编解码系统的延时也越大。
2)宏块级控制
为了防止缓冲区上溢、下溢,在一帧编码中,设置宏块级控制,使得每个宏块的编码比特数也在控制中。在编码帧中,第i个宏块所需的比特数Bi由下式决定:
其中,A表示一个宏块中的像素数, 表示在残差宏块中亮度和色度的标准方差, 是量化步长索引,K和C是模式参数,将随编码器的运行实时更新。
在宏块控制时,首先计算宏块的 ,再由K、C、 、一帧图像所需的比特数B和表明宏块重要性程度的权重系数 ,计算 (计算公式省略)。然后根据编码该宏块产生的实际比特数来更新模式参数K和C。如此往返,使实际结果尽量接近Bi。
由于这种率控制方法随时对缓存容量进行调整,可以采用较小容量的缓存器,将编码延时降到最低,这对低时延的实时通信是相当重要的。
3. MPEG-4 附录L1
在MPEG-4附录L1的可选择速率控制(SRC Scalable Rate Control)算法中,只提供帧级速率控制,即对完整的一帧选择单一量化步长。SRC算法假设编码器速率R为:
其中,Q是量化步长索引,X1、X2是模式参数,S是帧复杂性的度量,如运动补偿后的绝对帧差(SAE)。SRC算法的特点是它在一个编码帧内不调整量化步长,可以给出更加一致的可视质量,但这样要求缓存器容量大,增加了编码延时。
三、失真控制
在传统的率失真分析中,失真的控制只和速率有关,因而失真控制和上述的速率控制实质是相同的,这里只是从另一个角度来分析而已。
1. 率失真性能
视频编解码器的率失真性能提供了一种在一定编码比特率范围内对图像质量的度量。对于给定的压缩比特率,测量解码序列的最小失真,就获得率失真曲线。在图2的实例中,每个点都是由MPEG-4编码器对一个视频序列编码得到的。比较小的Q值产生比较高的编码比特率和比较低的图像失真。图中,图像失真是用峰值信噪比(PSNR)来度量的。
上面讨论的是空间失真,实际上还必须考虑时间失真。例如,丢帧所引起的帧间“跳动”,当帧率低于10帧时,“跳动”的现象就十分显眼了。
2. 率失真的优化
为了达到在目标数据率的条件下使传输的视频信号的失真最小,在编码比特率和图像失真之间必需选择一个恰当的折衷。这就是信息论中的率失真问题,可描述如下:在保证比特率R不超过最大比特率Rmax的条件下,使失真D达到最小化,或者
min{D} 限制条件:R≤Rmax (3)
可以通过选择最优的编码参数给出“最好”的图像质量(最低的失真),并不超过目标比特率。在实际中,用一套编码参数(量化步长、宏块模式选择等)对视频序列进行编码,得到相应的编码比特率(R)和解码图像质量(或失真D),两者结合,即形成一个R-D工作点。用不同套的编码参数重复上述编码过程,获得不同的R-D工作点。
率失真理论告诉我们,率失真曲线位于众多的工作点的凸边上。如果给定一个目标速率Rmax,与其对应的最小失真D点必然在这一曲线上。率失真优化的目标就是寻找一套编码参数,这套参数代表的工作点尽可能地位于或接近这条曲线。
等式(3)是很难直接最小化的,目前常用拉各朗日优化法来解决,具体如下所示:min{J=D+λR} (4)
J是包含D、R以及拉各朗日乘数λ的一个新函数。J=D+λR表示了一条直线,λ代表它的斜率。对于每个可能的乘数λ等式(4)都有一个解,每个解就是和理想的率失真曲线相切(或接近相切)的直线。
可见,拉各朗日方法将能够找出给出一个或数个最好性能的编码参数集,这些参数此后可被用到视频编码器以获得最佳的率失真性能。但是因为编码参数组合的数目极大,计算复杂性常常比编码算法本身还高,可在那些非实时编码中应用,如用在节省存储的DVD光盘压缩中。
为了使这种方法更实用,可以将拉各朗日优化方法作一些简化。例如,提前判断某些编码参数优劣,使用率失真特征模型来估计最佳工作点等简化算法。
四、计算复杂性控制
计算复杂度和视频质量也是一对矛盾,在很多场合下,能够以增加计算量为代价而获得较好的可视质量。在视频编码中,有很多因素都会影响计算量,例如运动估计搜索算法和搜索区间、DCT块尺寸、率失真优化、帧率选择等等。
由此可见,一种性能优越的视频编码算法因为需要太大量的计算而有可能难以实现。在实际应用中,视频编码参数的选择往往是在计算量和图像质量之间的一种折衷。
1. 对计算复杂度的控制
随着视频通信的发展,编码器需要具有在复杂性和质量之间的灵活折中的能力,即对视频编码器的计算复杂度有所控制。
例如,在软件编解码的情况下,编码、解码和显示完全以软件的方式实现。计算复杂度的“天花板”(上限)取决于所用的信号处理器或CPU的资源。这些资源随着不同的平台而变化,也随着占用该资源的任务数量而变化。当CPU单独执行视频任务时,软件编解码占有大多数可用资源;而当软件编解码器和其它应用任务共同运行时,它得到的处理周期就比较少了。因而就希望计算复杂度不再固定,随着运行的环境而变化。再如,在移动或手持的计算平台上,考虑到功率消耗问题,也要求视频编解码器的计算复杂度随时可以控制。
2. 可变复杂性算法
视频编解码器的性能是以下三个变量的函数:计算复杂性、编码比特数和视频质量。视频编解码器的优化需要对计算复杂性具有的更灵活的控制,这就导致视频编码的“可变复杂性算法” (VCA)的产生。
一类VCA是独立于输入的。例如,视频编码中“跳帧”的处理以及运动估计(ME)中搜索窗尺寸的改变都属于此类。跳帧在软件视频编解码中广泛使用,可以大幅度降低计算复杂度。
另一类VCA是依赖于输入的。例如,在IDCT计算时先检测不包含AC系数的块,对于这种块,IDCT计算就可以跳过,所有的样值被置为那个块的DC值。再如,对宏块的SAD检测。如果SAD较低,则残差块中的能量也较低,它在FDCT和量化后很可能只含有少量、甚至没有数据。因此如果一个块的SAD小于门限值T,就可以跳过FDCT和量化这两个步骤,大大减少了FDCT计算量。
3. 复杂性-速率控制
上述的VCA对于计算复杂度控制是很有效的。某些VCA对图像的质量没有影响,而有些是有影响的。同时,VCA也能够影响编码的比特率:例如,如果大量的DCT操作被跳过,将产生很少的编码比特,相应的速率也有所下降。相反,“目标”比特率选择也能够影响计算复杂性。例如,较低的比特率和较高的量化步长将产生较少的DCT系数和较多的0系数块,减少了计算复杂性。
因此不能将计算复杂性控制和速率控制作为分离的问题来处理,而且,还可将它和图像的失真联系起来一并考虑,这就是新近出现的复杂性-失真理论。对于VCA性能的考查有必要在复杂性、速率和失真这三维轴上进行。视频编码器的“工作点”也不再限制在速率-失真曲线上,而是位于速率-失真-复杂性所形成的曲面上。在这个曲面上的每一点都表示一个可能的编码参数集,形成特定的编码比特率、失真和计算复杂度的集合。由于计算复杂性和比特率之间的相关性,同时控制复杂性和速率也是可能的。复杂性-速率控制技术还处在起始阶段,有待于进一步发展和完善。
五、小结
许多实际的视频编解码器必须工作在速率、复杂度受限的环境。编码控制算法的实质就是在速率、图像质量和复杂性所形成的三维空间的“工作面”上寻找最优“工作点”。分析和实践表明,编码控制的优化性能往往是以高计算复杂度为代价的,在有限的计算资源和功率消耗的限制下,目前尚难于圆满解决。在速率、计算复杂性和失真之间的进一步折衷方面,在采用复杂性编码算法方面,在联合考虑这三方面的因素方面的新近发展,对视频编解控制变得愈发重要。
----《中国多媒体视讯》
|