H264编码器的一种率失真优化(1)

H264编码器的一种率失真优化(1)

1 介绍和背景

数字视频压缩给学术和工业提出了很多挑战性的问题。在学术中,数字视频压缩给出了压缩理论的最终实践。视频数据来源于大量的原始数据,但是很多对于人类视觉系统来说是冗余的和不相关的。视频压缩致力于删除这部分数据。在工业应用中,消费者在非常多的地方需要数字视频:电视,电影,电话和网络。各大公司的对于这些做了最大的努力。但是数字视频使用中,收到很多的资源限制,包括带宽,处理速度,内存大小和功耗限制。例如手机在这些方面都有限制。
在这些限制当中,当给出固定的受限资源时,如何获得最高质量的视频?这个理论描述了一种可能的方法通过使用率失真理论来优化H264编码过程中的模式选择。
第一部分提供了背景介绍和率失真理论,也介绍了一些前人的成果。第二部分描述了这个理论当中特定的问题。第三部分使用相应的参数建模,这些参数是:码率,失真和 λ \lambda λ(拉格朗日乘子). 第四部分提供了基于模型的最终解决方案。

1.1 成果回顾

当在保持最小损失的情形下获得最高的质量的理论叫做率失真理论(rate-distortion theory). 这个词汇来自于关于这个问题的香农第一准则。在这个问题中他提出了当以规定的速率通过噪声信道传输离散符号时获得的失真的期望。他给出了在码率小于信道容量时,失真可以达到任意小的值(或者没有失真)但是当码率大于信道容量时,失真是不能被消除的。
因为香农的通信理论是在50年前提出的,现在的技术实践发现在高码率和高信道容量之间具有竞争关系。当前可以满足现在大多数应用的视频通信的视频规格,如果是原始数据并且不带有音频的话,需要至少6Mbit/s的速率才能在另一端精确的重建。很少的存储介质,非常少的传输信道能够处理这样的大数据量。
因为这些资源限制,需要压缩视频来减少它的码率。许多应用领域,比如通过网络传输文件需要无损压缩,这样的情形使用经典的Lemple-Ziv 算法。这些无损压缩算法使用了数据源的统计特性来减小码率。例如,给出现概率高的符号赋予短的的bit长度,出现概率低的符号赋予长的bit长度。不幸的是无损压缩技术不能有效的压缩原始数据视频。
更多的,无损压缩,它每一个bit都是可重建的,对于视频来说他是不需要的。人类的视觉系统
不能捕获有些信息。这些信息是无关紧要的,并且是可以在压缩的时候在不损失视频质量的前提下删除的。同样的,特定的可见属性对于人类视觉系统来说比其他的部分更重要。最重要的布冯要精确的呈现,通常是分配更多的bit给他们,同时给不重要的部分给与少的bit。一个简单的例子,考虑一个在视频序列中带有尖锐边缘的对象。当对象是固定的,任何由失真导致的模糊的边缘是可见的和不允许出现的。当物体快速移动,模糊的边缘在感觉上是实际存在的。视频压缩算法要充分利用这个现象,通过分配少的bit给边缘,当出现快速移动的序列时。

1.2 codec

视频包含大量的可压缩信息。视频应用的商业需求导致了开发了很多压缩标准,被叫做codecs。两个重要的codecs组件出现了,它们是来源于Motion Picture Experts Group(MPEG)MPEG-x系列和H.26x系列来源于International Telecommunications Union(ITU-T). 它们中的很多已经在商业重广泛的运用,比如MPEG-2 用在高清电视,H263用于视频会议。
每一个连续的下一代codecs会实现更高级的压缩技术。MPEG和ITU-T一起开发了下一代codec,叫做H.264 也叫作MPEG-4 version 10. H.264的完整说明超级复杂,但是一个好的概览可以在这里找到。
所有的codecs说明朝向一个统一的目标:提供一个可以通用可解码的bit流语法。
H264编码器的一种率失真优化(1)_第1张图片
bit流实际上只代表了完整视频压缩系统的一部分。标准说明只定义了视频流这个范畴,并没有对编码器和解码器的实际进行说明。一个编码器在压缩一个视频序列的时候失败了,但是仍然能够产生兼容标准的视频流。
结果就是,工程师在设计H264编码器的时候有很大的弹性。编码器的设计严重依赖它的应用目标。有些应用需要高视频质量,例如HDTV. 其他的需要实时性编码,例如电话会议。其他的一些应用必须处理不可靠的信道,例如网络视频流。另外,给定视频的内容在不断变化。编码器必须动态的决定如何能最好的表现静态图像,场景变化,和物体移动。要完成这个要求,编码器必须平衡最小码率和最小失真的竞争。
一版情况下,虽然大部分编码器都共享一个相似的结构。如下图
H264编码器的一种率失真优化(1)_第2张图片
第一步,将视频帧分成叫做宏块的小区域。编码器以两种方式编码宏块:没有移动补偿(帧内编码),带有移动补偿(帧间编码). intra-coded宏块只依赖于当前的视频帧而不依赖于其他的帧。它们首先由原始RGB数据转化为YIQ数据格式,Y是亮度分量,IQ是色度分量。YIQ比RGB更适合用来压缩,因为色度分量可以用更少的采样率来采样而不损失视觉质量。
YIQ值会经过DCT变换或者小波变换处理。这些变换能够将宏块的能量集中在少量的前几个比较大的系数中。他们同时也会生成大量的小系数。这个特性有利于下一步的量化传输系数。量化负责压缩中的有损部分。这部分限制系数值到附近的量同时删除小系数。因为转换出的系数阵列中有大量的小系数,量化允许有效的减少bit rate。最后,量化后的系数会被编码进bit流中,以及保存在buffer中用来最后的输出。
INTER-coded (帧间编码)的宏块依赖于帧间的时间冗余来减小bit rate。在很多视频序列中,相邻的帧的不同之处只是因为物体的移动。运动补偿(Motion compensation)用运动向量来捕获运动而不是独立的编码最后的结果。这个技术能够实现有效的压缩,因为运动向量比起完整的图片来说需要更少的信息。运动补偿典型的包括两步:第一,对于宏块中的每一个区域,编码器决定最优的运动向量,通过搜索其他的帧来获得最优匹配参考区域,这个过程叫做运动估计。然后编码器从最佳匹配参考区域减去当前区域,产生残差。残差数据一样的经过变换,量化和游程编码跟帧内编码一样。这些残差数据会有更多的小的系数值相比于帧内编码。结果就是,帧间编码比帧内编码能更好的节省码率。

H264中的模式决策

现代的codecs例如H264有更多的模式而不仅仅是帧内编码和帧间编码。在这些模式中的选择过程叫做模式决策。在帧级别下,帧可以分成I帧(帧内编码),P帧(预测编码),B帧(双向预测编码)。I帧只包括帧内编码的宏块。P帧中的是帧间编码的宏块,这些宏块利用之前的帧作为参考帧来进行运动补偿。B帧也能够后边的帧作为参考帧。
在宏块级别,选择变的更多。H264中的宏块包括16x16亮度采样和8x8的色度分量采样。有两种帧内宏块模式存在:intra-4x4 和intra-16x16. H264中的帧内宏块于其他的帧是独立的。他们能在同一帧中利用邻接的宏块进行空间预测。空间预测可以降低bitrate,因为邻接的宏块经常是相似的。在16x16模式下,整个宏块从其他的宏块中预测得到。在4x4模式下,每个4x4块在一个宏块中用邻接的块预测得到。
四种帧间宏块模式:inter-16x16, inter-16x8, inter-8x16和inter-8x8. 帧间编码的宏块都带有运动向量。

未完待续。。。。。

你可能感兴趣的:(H264,率失真)