2024年3月9日发(作者:)

一、MPEG4 编码器流程

MPEG-4视频编码器的实现步骤

编码模式

编码控制

量化参数

DC/AC

预测

扫描

RLC

DCT

Q

VLC多路

复合

IQ

intra

inter

IDCT

MC

MV

ME

帧缓存

首先读取一帧数据,取一个宏块,根据编码控制选择编码类型,是intra帧内

编码,还是inter帧间编码。如果是I帧,所有宏块都是intra帧内编码,则读取

的宏块数据直接进入DCT、Q(量化)、DC/AC预测(直流系数与交流系数)、RLC(行

程编码)并与其他信息一起合成形成码流;如果是P帧,先进行ME(运动估计),

然后判断是intra帧内编码,还是inter帧间编码。如果是intra帧内编码,则直接

利用宏块本身进行DCT等一系列数据处理;如果是inter帧间编码,则将经过运

动估计得到的运动矢量MV传送给MC(运动补偿)单元,结合帧缓存中的上一帧

的重建帧数据与当前宏块的像素值做运算,得到残差数据,然后对残差值进行

DCT等处理。

在编码过程中,有一个重建图像的过程,其得到的数据存放在帧缓存中,作

为下一帧的参考帧。

二、各层参数

(一)MPEG-4视频数据流结构:

其位流语法从上到下大致可以分为:

视觉对象序列(Visual Object Sequence),

视觉对象(Visual Object),

视频对象层(Video Object Layer),

视频对象平面层(Group of Video Object Plane)

视频对象平面(Video Object Plane)。

VS(Visual Object Sequence):由一系列VO视频对象组成。

场景是一个或多个声视频对象的组合。场景的逻辑结构可以用一棵树表示,

树中的节点是声视频对象。MPEG4系统用二进制场景格式BIFS描述场景中声

视频对象的空间和时间位置及它们之间的关系。MPEG4的视频比特流提供了对

场景的分层描述。在比特流中,表示场景的层是可视对象序列

VS(VideoObjectSequence),它是一个完整的MPEG4场景,其中可能包含自然对象

或合成的对象以及它们的增强层。

VO(Video Object):是可视场景中景物的抽象描述,从用户的角度,它代表

画面中任何有意义的物理实体。视频对象是MPEG-4编码的独立单元,由时间

上连续的许多帧构成。VO的构成依赖于工具的应用和系统实际所处的环境,在

超低比特率的情况下,VO可以是一个矩形帧,与MPEG-1、H.263兼容;对于

基于内容的应用,VO可能是场景中的某一物体,也可能是计算机产生的二维、

三维图形等。每一个VO有3类信息描述:形状信息、运动信息和纹理信息。

VOL(Video Object Layer):属于同一VO的形状、运动和纹理信息被编码成

一个单独的结构,称为视频对象层(VOL)。它的引入主要是用来实现VO的视域

或者空域分级(Scalable)。对同一个VO,可以用不同的空间或时间分辨率编码多

层结构,从一个基础层开始,用增加一些增强层次的方法,以分层的方式重建视

频。每个视频对象可以编码成可伸缩(多层)或不可伸缩(单层)的视频流,用哪一

种方式编码取决于应用。

GOV:

VOP(Video Object Plane):VO在某一个时刻的表象即某一帧的VO,称为

VOP。假设输入的视频序列的每一帧都被分割成多个任意形状的VOP(在

MPEG-1、MPEG-2及H.263中,被处理的图像总是矩形),每个VOP定义场景

中特定的视频内容。各个VOP的形状和位置可随帧变化。属于场景中同一实际

物体连续的有着任意形状任意位置的VOP序列就是视频对象VO。

VOP是MPEG4中编码的基本单位。每个VOP可以独立地编码,也可以使用

运动补偿技术相互依赖地编码。传统的视频帧也可以用矩形VOP表示。VOP包

含了视频对象的运动参数、形状信息和纹理等数据。VOP既是一个空间概念也

是一个时间概念。从另一个角度说,VOP是视频对象VO在特定时刻的取样。因

此,属于场景中同一个物理对象的连续的VOP就代表了一个视频对象VO。从编

码的角度来看,VO实际上是由一组同一实体的任意形状和位置的VOP序列组成

的。VOP包括主体对象、背景对象以及文字图形三类。

3 MPEG-4视频压缩编码框架

一个序列是多个VO的集合,每个VO由三类信息来描述:运动信息、形状

信息和纹理信息。所以编码也是针对该时刻的VO的形状、运动、纹理这三类信

息进行的。由于VO是以VOP的形式出现的,所以在这里介绍VOP编码结构。

从图2.2可以看到,MPEG-4视频编码器的输入是VOP。VOP包含了三部

分信息:视频对象的纹理信息、运动信息和形状信息。

在传统的运动、纹理可变长编码之外,MPEG-4视频编码器增加了一种新的

模块即形状编码模块。

1) 形状编码

与MPEG-2相比,MPEG-4引入了形状编码算法。目前的标准中采用矩阵的

形式来表示二值或灰度形状信息,称之为位图(或阿尔法平面)

编码的形状信息有两类:二值形状信息(binaryshapeinformation)和灰度级形状

信息(grayscaleshapeinformation)。形状信息就是透明程度。

(1)二值形状信息就是用l表示编码VOP的形状区域,0表示非VOP区域。

二值形状信息的编码采用基于运动补偿的技术,可以是无损或有损编码。二进制

平面事实上是一个矩形,该矩形将视频对象完全包含在内,且其水平与垂直方

向的长度均为16的整数倍。矩形内属于视频对象的像素值置为255,称为不透

明像素,反之置为0,称为透明像素。

二值形状编码的方法是检测其色彩变化多端的像素(从255变0,或者相反)并

计算相邻变化像素之间地距离。如果一个形状块中所有像素具有相同的色彩而不

进行编码,只需将一个标志传送给解码器,以告诉解码器这个形状块的形状信息是

全部透明(0)还是全部黑暗的(255)。对于二值形状编码,如果使用有失真的编码,

则二值的形状信息可以进行尺寸转换(既亚采样)。

目前的亚采样率分别是4∶1和16∶1。有失真的形状编码对整个数码率的

影响无法直接估计,因为有失真的形状将影响用来表示有失真重建VOP纹理和

运动信息所需的比特数。在设计编码级的控制机制时,这是应该意识到的一个重

要问题

(2)灰度级形状信息可取值0~255,用0~255之间的数值来表示VOP

的透明程度。0表示非VOP区域即表示完全透明(相当于二值形状信息中的0);

l~255表示VOP编码区域的透明程度,255表示完全不透明(相当于二值形状信

息中的1)。

对灰度形状信息的编码是分别对二值形状及像素亮度值进行编码。对像素亮

度值的编码是以16×16亮度宏块为单元用纹理编码技术进行编码(基于块的运

动补偿DCT方法),属于有损编码。目前的标准中采用矩阵的形式来表示二值或

灰度形状信息,称之为位图(或阿尔法平面)。

视频输入

纹理信息

运动信息

场景分析

对象分割

纹理编码

形状信息

纹理编码可变长编码

运动编码

帧存储器

形状编码

图2.2 VOP编码结构

(3)VOP的形状编码是这样实现的:首先将二进制

平面分割成16×16

的宏块,称这样的宏块为二进制

块,简称BAB,再逐个对BAB分别进行编码。

对BAB的编码方法是类似于纹理宏块的编码方法,如搜索匹配、运动估计、变

换编码等。需要注意的是:BAB的变换编码使用的是算术编码。同时由于BAB

的特殊性(其内部像素值只可取值为0或255),因而BAB有更多可选的编码模式。

2)运动编码

由于在现实中实现任意形状的视频对象的分割是很难的,因而事实上在很多

情况下MPEG-4运动估计与运动补偿的作用就是通过去除运动图像序列的帧间

相关性来实现数据的压缩,也就是通常所说的运动补偿帧间预测。一般情况下,

活动图像相邻帧之间,内容变化很小(场景切换等除外),只是其中少部分图像运

动,因而相邻帧之间有较大的相关性(时域相关)。利用这一特点,将当前数据与

参考数据进行比较,确定运动部分的运动情况,即进行运动估计ME(Motion

Estimation),并把结果表示成运动矢量。再根据运动矢量,由参考图像数据预测

当前图像数据,获得预测图像数据。预测图像数据与当前图像数据之差就是需要

传送的帧差信号,这一过程即为运动补偿MC(Motion Compensation)。运动估计

越准确,帧差信号就越小,从而得以有效地去除视频信号在时间方向的重复信息,

达到数据压缩的目的。

MPEG-4利用运动估计和补偿技术来去除帧间的冗余度,这些运动信息的编

码技术可视为现有标准由向任意形状的VOP的延伸。通过对已知图像的一块像

素值重新定位,来预测当前图像中相应块的像素值MPEG-4与其他标准(MPEG1、

MPEG2)的主要区别在于MPEG-4采用的是VOP结构(基于任意形状的VOP),

而不是基于块的技术。

VOP有3种编码模式: 即帧内(Intra-Frame)编码模式(I-VOP),帧间

(Inter-Frame)预测编码模式(P-VOP),帧间双向(directionally)编码模式(B-VOP),其

中P-VOP和B-VOP编码时需要运动补偿。MPEG4的运动估计和补偿采用H263

中的“半像素搜索”和“重叠运动补偿”。

 IVOP与其它标准的I帧一样只采用帧内压缩,与其它任何VOP无关;I帧不

使用运动补偿,提供中等压缩比;随机存取的入点,解码中的基准帧;一个图

像以I帧开头,6:1压缩,不产生模糊现象;一秒2个I帧。利用图像自身相

关性压缩,是P,B帧的参考图像,DCT后每个像素为1~2bit。

 PVOP和BVOP编码时需要运动估计与运动补偿,PVOP基于另一个先被解

码的VOP作出预测;根据前面的I帧或P帧进行预测(向前预测);使用运动

补偿压缩数据量达I帧的三分之一左右;P帧为对前后的B帧和后继P帧进项

解码的基准帧;本身有误差,若前一帧为P帧会造成误差传播。

 BVOP则基于当前VOP的前面和后面的VOP作出预测,故BVOP称为双向

插值VOP,是基于IVOP或PVOP的插值帧,基于前后的两个I,P帧或P,P

帧;双向预测,数据量平均可达I帧的九分之一左右;本身不作为基准,可以

在提高压缩比时不传播误差。

解码器的输入顺序 I0 P3 B1 B2 P6 B4 B5

①如果一个宏块完全位于一个VOP内,就采用一般的基于16×16像素宏块

或8×8像素块运动估计,运动矢量以半点精度进行运算

②如果一个宏块只有一部分位于VOP内,就采用修正的块匹配技术估计运动

矢量,需要采用图像填充(ImagePadding)技术和多边形匹配(PolygonMatch-ing)技

术,而这些运动信息的编码技术可视为现有标准向任意形状的 VOP的延伸。

图像填充技术利用VOP内部的像素值来外推VOP外的像素值,以此获得运动预

测的参考值。多边形匹配技术则将VOP的轮廓宏块的活跃部分包含在多边形之

内,以此来增加运动估值的有效性。这样在VOP的边界上就可以搜索预测所需的

候选像素了。

③当参考块位于VOP边界上时,采用重复填补技术给位于VOP外的那些像

素指定值,然后运用填补后的像素值估计运动矢量。这样在VOP的边界上搜索预

测所需的候选像素时就有了更多的选择,从而提高了效率;

④对于完全在VOP外,但在边框内的宏块,不做运动补偿。

I0B1B2P3B4B5P6

的视频编码器并没有形状编码的功能。本文实现的MPEG-4编码器是基于

SP(Simple Profile)级的,没有形状编码这一功能。

3)运动估计与运动补偿

素搜索得到整数最佳运动矢量,然后在整数最佳运动矢量所指匹配点的周围

8个半像素范围内寻址半像素精度的最佳运动矢量,从而最终得到最佳运动矢

量。下面分别介绍这两种运动估计方法。由于色度分量与亮度分量的处理方式一

样,所以下文涉及到的算法实现都是以亮度分量Y为例来说明的。

读取到原始宏块数据之后就要开始真正的编码,P帧编码的第一步骤就是以

上一帧的重建图像为参考帧,进行运动估计与运动补偿运算,这两步在视频编码

器中的地位非常重要,运动估计的好坏严重影响着视频编码器的编码质量与编码

速度,所以在嵌入式系统中,如何寻求两者的平衡就是一个研究热点。

帧间预测编码的基础是运动估计,它直接影响整个系统的编码效率和压缩性

能。运动估计算法可归纳为两类:一类是像素递归算法PRA(Pixel Recursive

Algorithm);另一类是块匹配算法BMA(Block Matching Algorithm)。PRA是基于

递归思想,用递归的方法估算各像素点的运动矢量;而BMA则是基于当前帧中

一定大小的块,在当前帧的前后帧的一定区域内搜索该像素块的最佳匹配块,作

为它的预测块。尽管PRA对比较复杂的运动形式来说,其预测精度要比BMA

高,但计算量非常大,多数编码标准推荐采用BMA算法。

寻求最佳匹配块的最简单最直接的方法就是全搜索法,但是其搜索时间很

长,运算量很大,难于满足实时性的要求,特别像本文视频编码器的开发平台

DSP,其资源有限,要实现运动估计必须寻求快速算法同时还要保证一定的估计

精度,最常用的快速算法就是转世搜索法和四步搜索法。

在本文实现的运动估计算法有整像素运动估计和半像素运动估计两种,所谓

整像素运动估计是指运动估计得到的运动矢量的最小单位为一个像素,顾名思

义,半像素运动估计就是运动矢量的最小单位为半个像素,如果说整像素运动估

计是粗调,那么半像素运动估计就是微调。