3.4 MPEG-4编码方案
本节介绍了MPEG-4编码标准的可变码率技术、多媒体传送整体框架、全景图、场景描述等MPEG-4编码标准中突出的技术,并对MPEG-4编码的主要的码流进行了介绍。
3.4.1 MPEG-4结构分析
MPEG是运动动态图象专家组(Moving Pictures Experts Group)的英文缩写。这个专家组是由国际标准化组织ISO(International Standards Organization)与国际电子委员会IEC(The International Electrotechnical Commission)于1988年联合成立的,是一个全球性的机构,国际成员通过相应地组织建立地技术委员会开展特殊领域地技术活动,参与国际标准地开发工作,致力于运动图像及其伴音编码的标准化工作,其成员均为视频、音频及系统领域的技术专家。
MPEG-4是运动动态图象专家组在1994年开始制定的,于1999年初正式成为国际标准。MPEG-4采用国际化的标准,兼容性好,代表压缩的发展趋势。同时,它比其他算法提供更好的压缩比,适用于低传输速率应用的方案,与MPEG-1和MPEG-2相比,MPEG4更加注重多媒体系统的交互性和灵活性。
在MPEG-4方案之前,运动动态图象专家组指定了MPEG-1、MPEG-2和MPEG-3。MPEG-1主要用于VCD内的压缩技术,MPEG-2主要用于广播电视、DVD内的压缩技术,以及MP3压缩方法,MPEG-3最初是为HDTV开发的编码和压缩标准,但由于MPEG-2的出色性能表现,MPEG-3没能得到广泛应用。现在运动动态图象专家组正在制订MPEG-7方案。
MPEG-4标准将众多的多媒体应用集成于一个完整的框架内,旨在为多媒体通信及应用环境提供标准的算法及工具,用于实现音视频数据的有效编码及更为灵活的存取。用MPEG4压缩的影像画面质量近似于DVD的画面质量。适用于数码监控,配上高清晰度的摄影头,可以令捕捉的影像画面质量达到十分清晰的效果。作为MPEG-4标准的的核心内容,MPEG-4的视频编码部分正受到越来越多的关注,电子工业、广播电视业、电信业、计算机软件业都在紧密注视着它的发展。
ISO/IEC11172-1是一个国际标准的标准号,国际标准是由联合技术委员会ISO/IEC JTCI(联合技术委员会是ISO和IEC联合建立的,处理国际标准草案,国际标准草案需要提交给各国委员通过投票表决,一个国际标准而公开发表需要至少75%的国家成员投票批准)的信息技术分会SC29制定的,该标准代表的是MPEG-4的系统模块。像ISO/IEC11172-1这样的标准号,MPEG-4标准中包含了很多,主要的有6部分,这6部分如表3.14所示:
表3.14 MPEG-4的6部分
|
标准号 |
说明 |
|
ISO/ IEC 14496 - 1 |
MPEG-4的系统模块,规定数据流格式和文件格式, 定义了基本流复用和同步、随机存取、时间标志、对象内容的识别, 规定了二进制场景描述格式, 知识产权的管理与保护等 |
|
ISO/ IEC 14496 - 2 |
MPEG-4的视频模块,定义了一个对各种视觉信息(包括视频, 静止纹理, 计算机合成图形等等)的编解码器 |
|
ISO/ IEC 14496 - 3 |
MPEG-4的音频模块,定义了一个对各种音频信号进行编码的编解码器的集合 |
|
ISO/ IEC 14496 - 4 |
MPEG-4的一致性模块,定义了比特流和设备 |
|
ISO/ IEC 14496 - 5 |
MPEG-4的参考软件模块 |
|
ISO/ IEC 14496 - 6 |
MPEG-4的多媒体传输集成框架模块 |
除以上6部分以外还有MPEG-4工具软件、基于IP架构的MPEG-4、参考硬件描述、以及高级视频编码(Advanced Video Coding,简称AVC)。其中AVC就是H.264视频编码标准。
MPEG-4主要特点是:
(1)对不同的对象可采用不同的编码算法,从而可能进一步提高压缩效率。
(2)各个对象相对独立,提高了多媒体数据的可重用性。
(3)允许用户对单个的对象进行操作(例如改变某个对象的属性、颜色、大小等,甚至删除某个对象),提供了前所未有的交互性。
(4)允许在不同的对象之间灵活分配码率,对重要的对象可分配较多的字节,对次要的对象可分配较少的字节,从而可能在较低的码率下获得较好的效果。
(5)可以很方便地集成自然的与合成的视频音频对象。
MPEG-4的数据流可以分为三类,一类是系统流;一类是视频流;一类是音频流。这三类数据流可以分别异步进行传出,最后通过复合器进行统一的解码。
MPEG-4的数据在三个层中进行传输,这三层分别是传输层、同步层和压缩层。传输层中主要使用了DMIF应用接口,通过该接口定义流数据的传输接口,并定义信道建立和断开的信号。同步层实现对压缩过的的数据流和同步信息封装成同步数据包流,并将他们传输到传输层也可以实现从传输层接收数据流,从流中提取同步数据,为以后同步解码和基本流解码的合成做准备。压缩层接受从同步层传来的压缩格式的数据,并完成解码操作,这些解码后的信息用于终端的视听对象的合成以及显示。
视听码流:视听码流定义了视频或音频信息的编码定义。在显示场景时再根据场景描述信息将解码重构的视频或音频数据复合起来,最后提交给终端用户。
上载码流:下载基本码流可以要求从接收端向发送端上载信息,即允许客户/服务器方式的交互。例如对下载基本码流进行控制的上载码流。
MPEG-4总的框架可以用一个终端结构来表示,该终端结构如图3.25所示。

图3.25 终端体系结构
MPEG-4一个革命性的贡献是在视频编码中引入了基于对象的思想。MPEG4以VO(Video Object)的概念来实现基于内容的表示。VO的构成依赖于具体应用和系统实际所处的环境:在要求超低比特率的情况下,VO可以是个矩形帧,与传统的标准兼容。VO也可以是场景中某一物体或某一层面,为画面中被分割出来的不同物体。每个VO由三类信息来描述:运动信息,形状信息,纹理信息。VO的解码过程如图所示。

图3.26 VO解码过程
MPEG4中把对视频对象(VO)分成以下几类——自然视频(传统的)、2D和3D网格(mesh)、静态纹理(静态图)、Sprite(通过拼接生成的背景图)、FBA(face and body animation,人脸和人体动画)。对这些格式分别地进行编码和处理。
一个视频对象由视频对象起始码开始,接着是一个或多个视频对象层。
MPEG-4的编码和解码是针对VOP进行的,编码时首先由输入的视频序列通过与用户的交互形成一个VOP,然后针对每一个VOP分别进行编码,最后将所有的VOP编码结果合成一个视频数据流。VOP编码过程如3.27图所示。

图3.27 VOP编码框图
在VO解码过程中涉及到了形状编码、运动编码、纹理编码,这些都是MPEG-4编码标准中新提出的编码技术,每项技术都可以很大的提高压缩比率。
l 形状编码
形状编码的信息分为两类:而二值形状信息和灰度级形状信息。二值形状信息就是用0和1表示VOP形状的信息,1表示VOP形状的区域,表示非VOP形状区域。灰度级形状信息可取0~255,1~255表示VOP区域透明程度的不同,0表示透明区域,即非VOP区域。二值形状信息使用基于上下文相关信息的算术编码(CAE)和运动补偿算法进行压缩编码,灰度级形状信息采用基于块的DCT和运动补偿。
(1)二值形状编码
二值形状编码以二维矩阵的形式用255和0表示各个像素是否属于某个VOP,矩阵的大小与VOP 的包块相同。将矩阵划分为16 ×16的Binary Alpha Blocks(BAB),每个BAB独立编码。如果某个BAB中所有的数值均为255,则称为不透明块(OpaqueBlock),如果均为0,则称为透明块(Transparent Block)。BAB编码的基本工具是基于上下文的算术编码算法(Context based Arit hmetic Encoding algorithm,CAE),如果用到运动补偿,则称为帧间CAE(Inter2CAE),否则称为帧内CAE(Intra2CAE)。
(2)灰度级形状编码
采用灰度级形状编码的好处是前景VO可与背景很好地融合,不至于有明显的界线,还可以表示透明的VO,实现特殊的视觉效果。灰度级形状编码中与每个像素对应的数值,可以是0到255之间的任意整数,分别代表不同的透明度(0表示完全透明,而255表示完全不透明)。灰度级信息的编码由两部分组成,对具体的数值采用和纹理信息相似的编码过程,同时结合二值形状编码表示VO的形状。
l 运动编码
同H.263和H.264标准一样,MPEG-4也是利用运动估计和补偿技术去除帧间的冗余度, MPEG-4通过运动补偿编码后存在三种VOP结构,这三种VOP分别是:帧内VOP(I-VOP)、预测VOP(P-VOP)和双向内插VOP(B-VOP)。
帧内VOP:一个VOP与其他VOP分开编码。
预测VOP:VOP可以基于前一个解码后的VOP进行预测(利用运动补偿)。
双向内插VOP:VOP可以用过去的和未来VOP进行预测,B-VOP只能基于I-VOP和P-VOP进行插值。
只有对P-VOP和B-VOP编码时才需要运动估计。运动估计方法与H.263的相同,场景被分成固定位置和尺寸的块,估计时假定块内各部分的运动程度一致。仅仅对VOP边框中的宏块进行运动估计时,如果一个宏块完全位于一个VOP内,就采用一般的基于16x16像素宏块或8x8像素块运动估计,这样这个宏块只有一个运动矢量,或整个块一个运动矢量,运动矢量以半像素精度进行计算。
当选择了INTER模式,就将传送MV。MV的水平和垂直分量采用相邻的三个MV参考预测量进行差值编码,即类似于H263的MV预测方式。在当前VOP边界上,应用如下规则:
(1) 如果一个且仅有一个参考预测量的MB在VOP之外,该MB被设定为0
(2) 如果两个且仅有两个参考预测量在VOP之外,它们被设定为第3个参考预测量。
(3) 如果所有的三个参考预测量MB都在VOP之外,它们被设定为0。
对于每个分量(水平与垂直),对相同分量的三个参考量求出均值,并传递运动矢量的差值MVDx和MVDy。
l 纹理编码
VOP的纹理信息包含在视频信号的亮度分量Y和两哥色度分量U和V中。对于I-VOP,纹理信息直接包含在亮度和色度分量中,而对于运动补偿后VOP,纹理信息包含在运动补偿后的残差中。对纹理信息编码时,采用标准的基于8x8像素块DCT方法。对DCT变换后的块进行量化,每一个系数可以零用相邻块的值进行预测以进一步降低系数的熵值。然后对系数进行扫描,以减少编码系数之间的平均游程长度,最后对系数进行可变长编码。纹理编码过程如图3.28所示。

图3.28 VOP纹理编码过程
l 分级编码
MPEG-4视频编码采用分级编码来支持时域、空间及质量的伸缩性,例如,在基于Internet的多媒体数据库检索及视频内容重放等应用中,分级编码的引入使得接收端可依据不同的带宽及不同的显示能力进行视频数据库的浏览,以及在多媒体环境下视频内容的多分辨率播放,在MPEG-4中通过视频对象层的数据结构实现了基于内容的分级编码,每一种分级编码都至少有2层VOL基本层和增强层。在对增强层中的VOP进行编码之前,必须先对基本层中相应的VOP进行编码,空间伸缩性是通过增强层强化基本层的空间分辨率来实现的。同样对于时域伸缩性,可通过增强层来增加视频序列中某个VO的帧率,使其更为平滑。MPEG-4分级编码如图3.29所示。

图3.29分级框架图
MPEG-4通过层次结构进行管理,层次结构分别是视频场景、视频对象、视频对象层、视频对象平面组和视频对象平面,层次结构如图3.30所示。
VS(Video Session):视频场景,它位于层次结构的最高层,一个完整的视频序列可以由几个VS组成。
VO(Video Object):视频对象,它是场景中的某个物体,最简单的情况下就是矩形框,它是有生命期的,由时间上连续的许多帧构成。
VOL(Video Object Layer):视频对象层,VO的三种属性信息在该层进行编码,该层主要用来扩展VO的时域和空域分辨率,实现分成编码。
GOV:视频对象平面组,由视频平面组合,是可选成分。视频对象层即可以由VOP直接组合,也可以由GOV组合而成。
VOP(Video Object Plane):视频对象平面,它可以看作是VO在某一时刻的采样,即一帧VO。

图3.30 视频流结构图
3.4.2 编码技术
除纹理编码、分级编码、形状编码等编码外,对象描述框架技术、场景描述、二进制格式场景技术也是MPEG-4编码标准所特有的。下面对这些技术进行介绍。
l 对象描述框架
对象描述框架:对象描述框架是一个或多个基本码流描述符的集合,它表示这些流配置和与视听对象或场景描述有关的信息,可用于识别和描述基本码流,并将它们和视听场景描述联系起来。
l 场景描述
MPEG-4将图像编码为不同类型的视听对象,这些对象有自然的视频和音频对象以及纹理、文本、二维和三维图形以及合成音乐和声音效果等。为了在终端重新构建一个多媒体场景,只传输原始的视听数据到接收端是不够的,需要额外的信息在接收端来组合这些视听数据并创建和给用户显示一个有意义的多媒体场景。这个信息就是场景描述,它决定视听对象在时间和空间中的位置,它和视听对象的编码数据一起传输。一个多媒体场景如图3.31所示。

图3.31 一个基于对象的多媒体场景示例
场景中的视听对象根据不同类型进行分组,场景中的视听对象分组情况如图所示。该树状结构是可以动态修改的,节点可以任意的添加、删除和修改。场景种逻辑结构如图3.32所示。

图3.32 场景逻辑结构
场景描述码流:场景描述码流信息用来说明一个场景中根据空间和时间属性对视听对象的组织。在各个解码器将码流数据解码后,再利用场景描述信息合成和显示各个视听对象。同时,场景描述信息中还集成了用户与对象交互的机制。
场景描述和传输流数据的基本码流是ISO/IEC 14496标准系统结构的基本组成部件,基本码流传输场景描述的视听数据。对象描述框架提供了基本码流和场描述间的联结。场景描述声明视听对象的时空关系,而对象描述框架指定提供随时间变化场景数据的基本码流资源。
l BIFS
Binary Format for Scene description:BIF(二进制格式场景)BIFS是一个紧致二进制格式,表示提前定义的视听对象和行为以及时空关系的集合。
BIFS中有CommandFrame和AnimationFrameMPEG-4强调不同类型的视听对象的编码。为了在终端重建一个多媒体场景,需要额外的信息来组合这些视听数据并创建和给用户显示一个有意义的多媒体场景,这个信息就是场景描述,它决定了视听对象在时间和空间中的位置,并与编码对象一起传输。
场景描述以二进制格式BIFS(binary format forscene)表示,BIFS与AVO(audio2visual object)一同传输和编码。场景描述主要用于描述各AVO在一具体AV场景坐标下,如何组织与同步等问题,同时还有AVO与AV场景的知识产权保护等问题。MPEG-4为我们提供了丰富的AV场景。BIFS用于描述场景中对象的时空位置及它们的属性和特征。场景的组成单元和它们之间的关系形成了必须被编码传送的场景图。基本的场景图单元是“节点”,它们描述了视听对象及它们的属性和场景图自身的结构。
BIFS借用了虚拟现实建模语言(VRML)中使用的大量概念,VRML的场景描述能力被用来作为MPEG-4场景描述的基础。BIFS 包含了对几乎全部的VRML规范中节点的支持,扩展了VRML的功能,并增加了数据的流式播放、场景的更新和压缩等与VRML不同的机制,提供了压缩的二进制格式、流式播放、动画制作、2-D图元原语、增强的音频效果以及脸部动画等工具。
3.4.3 VBR技术
VBR是可变码率的意思,它的英文全称是Variable Bit Rate。与它相对的概念是CBR(Constant Bit Rate,固定码率),CBR是保持每个图像组(GOP)都有相同的平均码率,而VBR就是根据不同的图像组使用不同的码率,每个图像组的平均码率是可变的,根据图像的内容改变。例如,在使用MPEG-4的VBR技术压缩网球比赛视频时时,当摄像机扫过观众席时,其瞬时码率是2~3Mb/S,而拍摄内容为近距离的教练时其码率只有500~800Kb/S,而拍摄背景为观众,前景为网球运动员时码率也在1Mb/S左右。
CBR技术使用的是“码率预分配方案”,虽然在每个图像组中的每帧的码率不同,但对于每一个图像组而言它们的码率是相同的。CBR的优点是压缩速度快且只需要对图像进行一次压缩就可以实现,在现在的计算机硬件水平下压缩一部分辨率为720x480、24位色的高清晰度影片的速度可以达到甚至超过1:1,其速度和观看它的时间相同或更快。但是由于视频码率是固定的,而图像内容千变万化(有时活动,有时静止,有时纹理较多,有时平坦区较多,有时色彩鲜艳,有时色彩平淡等),其后果是:解码后重建的图像的主观质量必然是变动的,而不可能是恒定的。这样由于码率没有随着实际的需求情况而改变造成了解压缩后的影片一些片段清晰而另一些图像有明显锯齿,这种情况在高速运动和色彩鲜艳的画面中特别明显。因此,这类固定码率技术的视频编码算法虽然简单易行,但其实际编码效率不,使得传输媒体和存储媒体的资源存在大量难以避免的浪费。
与CBR技术相比,VBR的优点是显著的减少了“填充比特”,大大的提高了传输和存储媒体的资源的利用率。并且就主观图像质量而言,它可以明显的消除在固定码率压缩中出现的高速运动和色彩鲜艳的图像中的锯齿,缺点是编码器的技术难度大,压缩速度慢或最终的影片的平均码率不好控制。VBR技术已在一些公司中得到了应用,例如,用RealNetworks 公司的rmvb 格式的电影就使用了VBR技术,rmvb格式的电影在码率大于1Mbit/秒时基本拥有近乎完美的接近于DVD品质的视听效果,而且占用的磁盘空间很小,非常适合做为流媒体在网络中传输并且进行播放。
VBR技术的原理就是对低速运动甚至静止的画面使用较高的压缩率,而对于高速运动的一段片段用较低的压缩率。通过降低一部分画面质量减小其码率来补偿另一部分画面对带宽的额外需求,就可以达到与原来相同或相近的图像效果。鉴于VBR技术具有压缩速度慢且平均码率不好控制等特点,可以在压缩时使用不同的VBR实现,
如果对图像有特殊要求的话,就在编码图像时通过设定“图像质量”参数把编码器的输出限制在一个特定的质量等级上,或者设定一个图像质量的等级范围把编码器的输出图像质量限制在这个范围以内。这种实现压缩速度快,和CBR方式一样可以用于实时采集中。其缺点是码率的变化无法控制,可能有时会很小而有时会很大,这在网络带宽有限或带宽波动大的情况下很容易造成数据丢失导致播放时出现严重的花屏现象。
如果要控制压缩码率的化,就在编码图像的过程中首先取得每一帧图像在指定的码率下进行压缩后的图像质量等级、纹理信息、运动参数等,然后通过第一步收集的信息来决定将哪些视频帧的码率可以降低、哪些视频帧的码率可以升高,进而把原始视频信号以图像组为单位分为数个片段,每个片段用一个特定的图形质量参数来进行压缩。在这种实现方式下可以进行有效地码率分配,因为通过第一次对图像的处理可以明显的看出哪些片段由于画面运动快需要较高的码率,哪些片段运动平缓可以用较低的码率。这种方式还有个优点是它最终的平均输出码率可以被控制到非常接近指定的压缩码率,也不会出现一段时间占用带宽很大而另一段时间由占用很小的情况。这种实现的缺点是,压缩时间长,是CBR方式的两倍以上,无法实时采集。
3.4.4 多媒体传送整体框架
DMIF是多媒体传送整体框架它的英文全称是The Dellivery Multimedia Integration Framework。DMIF存在于MPEG-4的传输层,并且在国际标准ISO/IEC 14496-6中专门制定了DMIF参考体系,DMIF参考体系如图3.33所示。

图3.33 参考体系框架
DMIF参考体系中包含:用于广播的DMIF、用于本地文件的源DMIF、用于远程交互的源DMIF。它主要解决交互网络中、广播环境下以及磁盘应用中多媒体应用的操作问题。通过传输多路合成比特信息来建立客户端和服务器端的交互和传输。通过DMIF,MPEG4可以建立起具有特殊品质服务(QoS)的信道和面向每个基本流的带宽。
与DMIF参考体系通信的有DAI(DMIF Application Interface,DMIF应用接口)和DNI(DNI ,DMIF网络接口)。DMIF参考体系通过DAI接口和MPEG-4中的同步层通信,通过DNI接口与目标DMIF实例通信。
DMIF参考体系是OSI会话层的一种实现。当DMIF协议运行时,首先使远端的DMIF实例启动,然后选择码流,本地的DMIF实例发送一个请求,远端DMIF实例的对等层将返回一个指向该码流的指针,从而建立起本地与远端的链接,
DMIF参考体系为其应用屏蔽了底层细节,使之独立于底层传输技术。因此当一个应用通过DAI接口访问数据时,它并不关心这个数据是来自于广播源,本地存储器,还是远端服务器。而是由DMIF协议利用统一资源定位器URL得寻址方案,通过分析URL,并获取它所含由的信息,综合地使用各种网络传输技术,达到同时且透明地访问数据的目的。本地应用仅仅通过统一的DAI接口与这些信息源建立起联系。不同的DMIF实例将把本地应用的请求转换为专门的消息并传至远端应用,此时要考虑传输技术的各种细节。同样传至终端的数据(可能是来自远端服务器、广播网络或本地文件)统一通过DAI接口传至本地应用。这样就达到了屏蔽底层技术细节的目的。
DMIF参考体系允许一个或者多个DMIF参考体系的实例同时出现。每个应用针对一种特殊的传输技术,其目的是支持同一终端的多种传输技术,甚至多个节目。统一应用可以触发多种传输技术,因此该应用可以综合管理来自于广播网络、本地文件系统和远端交互对等的实际数据。
DMIF参考体系在MPEG-4中的解码实例如图3.34所示。

图3.34 DMIF系统解码器模型
3.4.5 sprite技术
一个sprite是由一个视频序列中属于同一个视频对象的所有像素构成的,是由各部分经拼接而成的一幅图像,它是MPEG-4提出的重要的概念之一。Sprite可以是一个拼接的视频对象,也可以是背景全景图,如图3.35所示,左上角的图是一个背景全景图;右上角的图是一个没有背景的子图像全景图,也就是一个完整的网球运动员,该网球运动员就是一个视频对象,是一个可以独立运动的Sprite图像。

图3.35 一个Sprite实例
帧所产生的变化是由于前景物体的运动所引起的,前景物体在某段时间内一部分背景被掩盖,而在另一段时间内另一部分背景又显露出来,或者是由于摄像机的运动,如平移、旋转、缩放所产生的比较复杂的变化来产生前景物体运动效果。为了有效编码这类图像,可以将某一背景视频对象在一段时间的内容拼接成一幅完整的背景图像,该视频对象在某一帧出现过的像素点在这幅大的背景图像中都能找到对应点。背景全景图也是由序列中背景图像拼接成一个大的完整的背景图像的,整个图像的拼接完成只使用了镶嵌技术和图形的几何变换技术,这样可以极大地提高了编码效率,Sprite技术还可以通过直接重构该视频对象或对其进行预测补偿编码进一步提高编码效率。Sprite本质上是一个静态图像,使用宏块进行编码,因此只能在传送开始时传送1次,Sprite提供了高压缩率。在任何给定时间,背景视频对象面VOP都可以通过适当的变形或裁切进行抽取。Sprite编码非常适合合成对象,也用于自然场景中严格运动的对象。
目前,Sprite编码可以分成静态Sprite和动态Sprite两类。
静态Sprite在编码过程之前离线产生,解码器在接收其余视频片断之前接收每个静态Sprite,静态Sprite可以非常容易地重新构建VOP,进行编码,通过使用合适的参数对量化的Sprite进行变形,这些定义了全景到帧关系的变形参数也用于描述MPEG-7标准的视频全局运动。这种编码方法主要用于人工合成图像的编码。在编码前Sprite图像和每帧图像重构点都已经知道了,在编码过程中根据图像重构点计算出当前帧在Sprite图像中的对应点和范围,编码传输这部分Sprite图像和重构点。整个Sprite图像只需要编码传输1次,在解码端就能通过解得的重构点重构许多帧不同的图像。
动态Sprite是在编码过程中在线产生,这种编码方法主要用于自然图像的编码,是一种增强的运动补偿方式,在编码器和解码器中都必须建立相同的动态Sprite图像,由于视频对象的运动变换,不能把每帧图像直接拼接到Sprite中去,因此在动态生成Sprite图像前应先对当前帧图像进行全局运动估计,计算出视频对象的变换参数,将当前帧的图像还原后才能用于Sprite图像的更新。
Sprite生成系统
系统最初通过MPEG流的局部解码压缩MPEG视频镜头和抽取运动矢量,系统包括下面4个阶段:
①运动矢量处理
②粗糙对象分割
③摄像机运动估计
④帧集成
动态生成的框架如图3.36所示。

图3.36 动态Sprite编码框图
由于从MPEG视频中获取的运动矢量是噪声,它们不能直接用于对象分割。为了提高运动信息的可靠性,使用当前帧两侧相邻帧的运动矢量。分割阶段采用从前面阶段获取的运动信息,通过简单的K方法聚类算法分割连贯的运动视频对象。视频中对象的数目由K方法聚类算法确定,摄像机运动信息由运动信息对应的背景对象区获得,摄像机运动估计参数用于帧的变形及混合。摄像头的运动会导致背景图像产生平移、旋转和缩放等运动,因此在镶嵌和更新Sprite图像前必须正确地估计当前帧背景图像的运动变换形式及参数,恢复由于运动所产生的图像的扭曲和变形。
sprite的两种传输方法
sprite需要使用静态图像的传输方法进行传输,由于sprite图像一般都比较大,为了减数传输延迟,可以使用分层多次传输,即每次只向解码器传输一部分,解码器端不断更新已有的sprite图,这就是sprite技术的一个缺点-延时。
为了减少延时,可以使用两种方法传输sprite。一种是首先传输sprite中用来重构前几帧的那部分,剩余部分将根据解码要求和可用带宽来进行传输。第二种方法是首先传输一个低分辨率和质量较差的完整sprite,然后在带宽允许的条件下传输sprite的剩余部分以逐步提高sprite质量。这两种方法可以单独使用可以组合使用。
目前,对Sprite编码技术方面的研究包括静态Sprite生成、基于多方向预测的静态Sprite编码、高分辨率动态Sprite编码。
3.4.6 MPEG-4码表
MPEG-4标准提供了不同对象的语法码表,解码器可以根据码表的成分对视频流进行解码。MPEG-4标准的主要码表有视觉对象序列语法码表、视觉对象语法码表、视频对象层语法码表、视频对象平面语法码表、短头视频平面语法码表、复杂估计头语法码表、运动形状纹理语法码表、Sprite编码语法码表、宏块语法码表、MB二值形状编码语法码表、运动向量语法码表、交织信息语法码表、块层语法码表、静态纹理对象语法码表、网格对象语法码表、网格对象平面语法码表、网格运动语法码表、人脸对象语法码表、人脸对象平面语法码表等。本书只对视觉对象序列语法码表、视觉对象语法码表、视频对象层语法码表进行了介绍,其它码表读者可以参照MPEG-4标准文件。
视觉对象序列是视频流的最高语法结构,由视觉对象虚礼起始码开始,后面根着一个或多个视觉对象,然后以视觉对象结束符指示其结束。视觉对象序列语法码表如下:
VisualObjectSequence()
{
visual_object_sequence_start_code/*
视频序列的开始。数值是000001B*/
profile_and_level_indication /*
8位比特码,作为框架和级的指示器*/
while ( next_bits()==user_data_start_code)
{
user_data()
}
VisualObject()
visual_object_sequence_end_code/*
视频对象序列的结束。数值是000001B1*/
}
视觉对象由起始码开始,后面接着框架和级标识和视觉对象标识,然后是视频对象、静态文家对象、网格对象或人脸对象。视觉对象语法码表如下:
VisualObject()
{
visual_object_start_code/*
视觉对象的开始。数值是000001B5*/
is_visual_object_identifier/*
1位比特码,当数值为1时,表示需要指定版本*/
if (is_visual_object_identifier)
{
visual_object_verid/*
4位比特码,用来指示视觉对象的版本号*/
visual_object_priority/*
3位比特码,用来指示视觉对象的优先级。它的值从1到7,
其中1表示有限级最高,7表示优先级最低,0值表示保留*/
}
visual_object_type/*4位比特码,指示视觉对象的类型*/
if (visual_object_type=="video ID"||
visual_object_type=="still texture ID")
{
video_signal_type()/*1位比特码,当数值为1时,表示视频信号存在*/
}
next_start_code()
while(next_bits()==user_data_start_code)
{
user_data()
}
if(visual_object_type=="video ID")
{
video_object_start_code/*
32位比特码,其中前27位是
0000 0000 0000 0000 0000 0001 000,剩下的5个比特
从00000到11111。给视频对象做了标记*/
VideoObjectLayer()//视频对象层
}
else if(visual_object_type=="still texture ID")
{
StillTextureObject()//静态文理对象
}
else if (visual_object_type=="mesh ID")
{
MeshObject()//网格对象
}
else if(visual_object_type=="face ID")
{
FaceObject()//人脸对象
}
if (next_bits() !="0000 0000 0000 0000 0000 0001")
next_start_code()
}
视频对象层包含了视频对象的众多设置信息,视频对象层语法码表如下:
VideoObjectLayer()
{
if(next_bits()==video_object_layer_start_code)
{
short_video_header=0/*1位比特码,
当视频使用一种短小的头格式被设置。它指明用
short_video_start_marker开始的视频数据优于用长起始码,
与H263编码标准的兼容*/
video_object_layer_start_code/*32位比特码,其中前28位比特
为0000 0000 0000 0000 0000 0001 0010,后4位从0000到1111,
表示一个新的视频对象层的开始*/
random_accessible_vol/*
这个标志被设置为1用来指示VOL中的没一个VOP是可以单独解码的。
如果VOL中所有的VOP都是内部编码的VOP,那么上述条件可以满足,
于是random_accessible_vol就可以被设置为1。random_accessible_vol
标志对解码过程是没有用的。random_accessible_vol是为协助随机访问
和编辑而特意设计的。如果VOL中任意一个VOP不是内部编码的,
或者其他一些条件不能满足,那么次标志必须设置为0*/
video_object_type_indication/*
用来强迫后面码流从指定对象类型使用工具*/
is_object_layer_identifier/*
1位比特码,当数值为1时表示码流中含有视频对象层的版本和优先权*/
if(is_object_layer_identifier)
{
video_object_layer_verid/*
4位比特码,表示视频对象层的版本号。如果video_object_verid和
video_object_layer_verid都存在video_object_layer_verid代替
video_object_verid*/
video_object_layer_priority/*
3位比特码,表示视频对象层优先级。它的值从1到7.1表示优先级最
高,7表示优先级最低,0值表示保留*/
}
aspect_ratio_info/*
4位比特码,指示了像素外形的长宽比。如果指示为extended PAR,
aspect_ratio_info参见par_width和par_height*/
if(aspect_ratio_info=="extended_PAR")
{
par_width/*
8位比特码,指示了像素外形的水平尺寸,0值表示被禁用*/
par_height/*
8位比特码,指示了像素外形的垂直尺寸,0值表示被禁用*/
}
vol_control_parameters/*
1位比特码,当数值为1时,表示chroma_format、low_delay和
vbv_parameters在码流中存在*/
if (vol_control_parameters)
{
chroma_format/*
2位比特码,指示了色彩格式*/
low_delay /*
1位比特码,当数值为1时表示VOL中没有B-VOP*/
vbv_parameters/*
1位比特码,当数值为1时表示VBV参数存在*/
if(vbv_parameters)
{
first_half_bit_rate
marker_bit
latter_half_bit_rate
/*first_half_bit_rate, latter_half_bit_rate:30位比特码,
由两部分组成,前15位定义在first_half_bit_rate,后15位定义
在latter_half_bit_rate。marker_bit被插入在first_half_bit_rate
和latter_half_bit_rate之间。如果比特率域在VOL头中存在,
它定义了峰值码率*/
marker_bit
first_half_vbv_buffer_size
marker_bit
latter_half_vbv_buffer_size
/*first_half_vbv_buffer_size, latter_half_vbv_buffer_size:
18位比特码,主要由两部分组成,前15位定义在first_half_vbv_
buffer_size,后3位定义在latter_half_vbv_buffer_size中。描述
VBV缓冲区尺寸的单位是16384bits*/
first_half_vbv_occupancy
marker_bit
latter_half_vbv_occupancy
/*first_half_vbv_occupancy, latter_half_vbv_occupancy:26位比特
码,由两部分组成,前11位定义在first_half_vbv_occupancy中,后15
位定义在latter_half_vbv_occupancy中,marker_bit被插入在
first_vbv_buffer_size 和 the latter_half_vbv_buffer_size之间。
该部分比特码表示VOL头后面第一个VOP移出解码缓冲区之前的VBV占的尺寸,
单位是64位比特。目的是给VBV缓冲区提供初始条件*/
marker_bit
}//vbv_parameters
}//vol_control_parameters
video_object_layer_shape/*
2位比特码,表示视频对象层的形状类型*/
marker_bit
vop_time_increment_resolution/*
16位比特码,指示了一个Modulo时间的平均间隔(称为 Tick)。
一个Modulo时间表现了一秒的固定间隔*/
marker_bit
fixed_vop_rate/*
一位比特码,它表示所有VOP是否用固定的码率编码。只有当任意两个连续
的VOP显示间隔是常数是,数值为1。在这种情况下,VOP码率可以由
fixed_VOP_time_increment得到。如果数值为0,那么两个连续的VOP的显示
间隔是变化的,这时候需要VOP头中的时间戳。*/
if(fixed_vop_rate)
fixed_vop_time_increment/*
该数值描述了显示序列中两个连续的VOP的Tick数值*/
if(video_object_layer_shape != "binary only")
{
if (video_object_layer_shape == "rectangular")
{
marker_bit
video_object_layer_width/*
13位比特码码,表示亮度可显示部分的宽度,宽度的单位是像素*/
marker_bit
video_object_layer_height/*
13位比特码码,表示亮度可显示部分的高度,高度的单位是像素*/
marker_bit
}//==rectangular
interlaced/*
1位比特码,如果数值为1,表示VOP可以包含交织视频;
而数值为0,表示VOP是累进格式*/
obmc_disable/*
1位比特码,数值为1表示禁止重叠运动补偿*/
sprite_enable/*
1位比特码,数值位1表示Speite的存在*/
if(sprite_enable)
{
sprite_width/*
13位比特码,表示Sprite的水平尺寸*/
marker_bit
sprite_height/*
13位比特码,表示Sprite的垂直尺寸*/
marker_bit
sprite_left_coordinate/*
13为比特码,定义了 Sprite的左边界*/
marker_bit
sprite_top_coordinate/*
13为比特码,定义了 Sprite的上边界*/
marker_bit
no_of_sprite_warping_points/*
6位比特码,表示在Sprite扭曲中使用的点数目*/
sprite_warping_accuracy/*
2位比特码,表示在Sprite扭曲过程中使用的运动向量的量化进度*/
sprite_brightness_change/*
1位比特码,数值位1时,表示在Sprite扭曲时有亮度变化;
数值为0时说明亮度不变化*/
low_latency_sprite_enable/*
1位比特码,数值为1时,表示low_latency sprite比特码存在*/
}
not_8_bit/*
1位比特码,数值为1时表示视频数据的 精度不是每像素8比特*/
if(not_8_ bit)
{
quant_precision/*
该部分比特码表示在描述量化器参数的 比特数目,数值可以是3到9*/
bits_per_pixel/*
该部分比特码表示以每像素用的比特数为单位指定视频数据的精度*/
}
if (video_object_layer_shape=="grayscale")
{
no_gray_quant_update/*
1位比特码,当解码灰度数据时使用固定量化器时,数值为1*/
composition_method/*
1位比特码,表示了应用在视频对象中的混合方法*/
linear_composition/*
1位比特码,表示了信号合成过程的类型。数值为0时,
使用被视频解码器产生的视频信号,数值为1时,使用线性信号*/
}
quant_type/*
1位比特码,数值为1时对DCT系数使用第一种逆量化方案,当数值为0时,
使用第二种量化方案*/
if(quant_type)
{
load_intra_quant_mat/*
1位比特标志,数值为1表示,intra_quant_mat比特码存在*/
if(load_intra_quant_mat)
intra_quant_mat/*
这是一个从2到64个8位比特码的表*/
load_nonintra_quant_mat/*
1位比特码,数值为1表示,nonintra_quant_mat比特码存在*/
if(load_nonintra_quant_mat)
nonintra_quant_mat/*
这是一个从2到64个8位比特码的表*/
if(video_object_layer_shape=="grayscale")
{
load_intra_quant_mat_grayscale/*
1位比特码,数值为1表示,intra_quant_mat_grayscale比特码存在*/
if(load_intra_quant_mat_grayscale)
intra_quant_mat_grayscale/*
这是一个从2到64个8位比特码的表*/
load_nonintra_quant_mat_grayscale/*
1位比特码,数值为1表示,nonintra_quant_mat_grayscale
比特码存在*/
if(load_nonintra_quant_mat_grayscale)
nonintra_quant_mat_grayscale/*
这是一个从2到64个8位比特码的表*/
}//==grayscale
}//quant_type
complexity_estimation_disable/*
1位比特码,数值为1时,表示在每一个VOP中禁止复杂估计头*/
if(!complexity_estimation_disable)
define_vop_complexity_estimation_header()
resync_marker_disable/*
1位比特标志,数值为1时,表示编码的VOP中没有resync_marker。*/
data_partitioned/*
1位比特码,数值为1时,表示宏块数据用不同方式重新安排,
特别时运动向量数据从纹理数据(DCT系数)中分离出来*/
if(data_partitioned)
reversible_vlc/*
1位比特码,数值为1时表示解码DCT系数过程中使用可逆的变长表*/
scalability/*
1位比特码,数值为1时,表示当前使用了可扩展编码。
如果当前层是基层,数值为0*/
if(scalability)
{
hierarchy_type/*表示相关联层的关系*/
ref_layer_id/*4位比特码,指示了在可扩展情形下用作参考的层*/
ref_layer_sampling_direc/*
1位比特码,数值为1时表示参考层的分辨率比已编码层的分辨率高;
数值为0时,表示表示参考层的分辨率比已编码层的分辨率低或相同*/
hor_sampling_factor_n/*
5位比特码,表示在扩展编码时水平空间重采样比率的分子*/
hor_sampling_factor_m/*
5位比特码,表示在扩展编码时水平空间重采样比率的分母*/
vert_sampling_factor_n/*
5位比特码,表示在扩展编码时垂直空间重采样比率的分子*/
vert_sampling_factor_m/*
5位比特码,表示在扩展编码时垂直空间重采样比率的分母*/
enhancement_type/*
1位比特码,数值为1时,表示当前层增强了参考层的部分区域;
数值为0时,表示当前层增加了参考层的整个区域*/
}
}//!=binary only
else
resync_marker_disable
next_start_code()
while(next_bits()==user_data_start_code)
{
user_data()
}
if(sprite_enable && !low_latency_sprite_enable)
VideoObjectPlane()
do{
if(next_bits()==group_of_vop_start_code)
Group_of_VideoObjectPlane()
VideoObjectPlane()
}while((next_bits()==group_of_vop_start_code)||
(next_bits()==vop_start_code))
} else {
short_video_header = 1
do{
video_plane_with_short_header()/*
压缩视频平面的语法层,它只包含可使用短头格式能力的有限子集*/
}while(next_bits()==short_video_start_marker)
}//next_bits()==video_object_layer_start_code
}






