频 道 直 达 - 新闻 - 培训 - 软件 - 教程 - 前沿 - 组网 - 系统应用 - 安全 - 编程 - 存储 - 操作系统 - 数据库 - 服务器 - 专题 - 产品 - 案例库 - 读书 - 博客 - BBS
51CTO.COM_中国最大的网络技术网站
找资料:

3.2.3 可选扩展模式

作者: 宋坤/刘锐宁/马文强 出处:人民邮电出版社  2008-04-18 16:02    砖    好    评论   进入论坛
阅读提示:《Visual C++视频技术方案宝典》第3章为您展示的是视频编码方案,本节将为你介绍可选扩展模式.

3.2.3  可选扩展模式

非限制运动矢量模式

一般情况下运动矢量所参照的像素都来自图像区域内,当运动矢量所参照的像素处于编码图像区域外部时,使用边缘像素替代。如果非限制运动矢量模式被设置,那么运动矢量的水平分量和垂直分量的限制范围由[-16,15.5]扩大到了[-31.5,31.5],并且允许运动矢量指向边界以外的区域。这对分辨率较大大图像如4CIF、16CIF比较有利,特别时对于沿图像边缘运动的图像、背景运动或由于相机运动而形成的运动图像非常有利。
如果在QCIF中使用非受限编码模式,参考像素的亮度分量值以下公式给出:

 
其中:
x,y, , 表示像素在空间域的坐标;
 
为非受限模式中参考图像在(x,y)处的像素值;
 
为非受限模式中参考图像在 处的像素值;
 
  
但是,运动矢量的取值范围扩大到[-31.5,31.5]时由一定条件的。当图像帧头中若PLUSPTYPE场不存在,则运动矢量范围外延为[-31.5,31.5],具体限制是:若预测因子在[-15.5,+16]之间,则运动矢量在预测因子周围[-16,+15.5]的范围内取值。若预测因子超出了[-15.5,+16],则运动矢量可以在[-31.5,31.5]范围内取值,但是必须和预测因子具有相同的正负号,或者取0。用MVc表示当前宏块的运动分量,表示预测因子的相应分量,可用下式表示:
-31.5≤MVc≤0         若-31.5≤Pc≤-16
-16+Pc≤MVc≤15.5+PC  若-15.5≤Pc≤16
0≤MVc≤31.5          若16.5≤Pc≤31.5

基于语法的算术编码模式

用基于语法的算术编码方法代替缺省模式下的可变长编码方式来实现熵编码。两种方法都是无损编码方法,一次编码图像的质量相同,但是基于语法的算术编码方法可以把输出比特率降低5%左右。
基于语法的算术编码模式的特点是充分利用了图像的先验知识,根据所确定的编码图像物体内容,如某人的头和肩图像,在编解码器中都有一个相同的与该物体相对应的三维模型,而基于语法的算术编解码过程则是对图像中的运动物体的状态进行语法的描述和再现,该描述是以物体运动的参数来表示,图像信息的传递实质上是这些参数的传递。

基于语法的算术编码是利用基于编码器语法的特殊表格来进行可变字长编码。在可变长编解码过程中,码元通过码表映射为一个固定的二进制码字,着意味着一个码元总是被映射为固定长度的二进制码字。在该表格中存储了变字长编码的码字的长度值,发送时先制定查表操作的窗口,然后将经定义的二进制码发送到缓存器以便调整。而译码器中所接收到的比特流在编码器句法的基础上,在特定表格内进行窗口的匹配,此特定的表格必须与编码器中所用的表格相一致,最后将特定表格的匹配窗口参数转换成相应的字符,并得到重建得视频画面。通常,可变长编解码要求每一字符必须在固定比特得整数倍上进行编码成固定比特数,例如Huffman编码方法,基于语法得算术编码方法将克服这一缺点,它可以时非整数倍得比特数编码,这样可以大大减少编码得比特数,从而使得视频流所需得码率大为下降。在这种模式下,SNR和重建图像是一样得,但传递得比特数将明显减少。

先进预测模式

一个宏块可以使用4个运动矢量代替原来的1个运动矢量,而且运动矢量也可以指向图像区域以外。这种模式能提高帧间预测的准确性,因而在比特率不变的情况下可以降低方块效应,提高图像的主观质量。

一个宏块四个运动矢量,如图所示

 
图3.12  四个运动矢量
在H.263默认方式下,每一个宏块对应一个运动矢量。而在高级预测方式下,如果宏块字头指示使用四个矢量,则宏块中的每个8x8亮度对应一个运动矢量。预测块尺寸的减小必然带来预测效果的提高。两个色度块的运动矢量由这四个亮度矢量相加除以8得到。在这种模式下,运动矢量“预测因子”需要重新定义。如果为单一运动矢量则预测路径如图3.13所示。
 
图3.13  单一运动矢量预测路径

在解码端,亮度信号将利用可重叠的运动补偿技术来恢复,而色度信号不用次技术。一个像素的亮度值是由三个预测亮度值的加权和除以8得到。要获得这三个预测亮度值需要用到三个亮度块得运动矢量;当前三个块得运动矢量及其“邻近”两个亮度块得运动矢量。邻近得含义是:若像素位于当前块得上半部分,则上方相邻的块是“邻近”块;反之则下方相邻的块是“邻近”块。用同样的规则来定义位于当前块左右两边的“邻近”块。
如果四个相邻块中有未编码块或帧内方式编码块,则相应的运动矢量置为零。如果当前块处于图像边缘从而相邻块中有的块不存在,则相应的运动矢量有当前块运动矢量代替。重叠运动补偿算法可以有效地减小块编码所代码的方块效应。

PB帧模式

PB帧模式是H.263的四个可选扩展模式之一。

PB帧由两种编码图像作为一个单元组成。名称PB源于ITU-T H.262建议书中存在P图像与B图像的图像种类名称。这样,PB帧由一个P图像和一个B图像组成,P图像源于先前译码的P图像预测,B图像源于先前译码的和当前正在译码的两个P图像预测。选择名称B图像是由于B图像部分可以来自过去与未来的图像双向预测。用此种编码选择,图像速率能够可观地增加,但不增加很多的比特速率,PB帧模式如图3.14所示。

 
图3.14  PB帧模式

对一幅图像而言,若直接进行编码,而不采用运动补偿,则该图像被称为I帧。如果是由前面一幅图像来进行预测,而得到一幅图像,则称为P帧。倘若一幅图像是由前后各一幅图像进行双向预测而得到,则称为B帧。在PB模式下,一个PB帧包括一幅P帧图像和一幅B帧图像。P帧利用前面的一个P帧或I帧前向预测得到,而B帧则利用前面一个P帧和当前P帧进行双向预测得到。PB模式在不明显增加比特率的同时,把图像的帧速率提高了一倍。
在PB帧模式下,帧内编码模式意味着:P块是帧内编码,B块是帧间编码。一次帧编码块也要编码传输运动矢量,供其中的B块使用。这种模式下的一个宏块12个块,由P帧的一个宏块和B帧的一个宏块组成。编码首先处理6个P块,然后处理6个B块。

PB帧中B图片的矢量计算方法如下:

假设有一个用于P图片的半像素精度矢量分量MV,对于B图片的预测,需要向前和向后矢量MVF和MVB。这些前向和后向矢量可同MV得到,最后通过一个由MVDB给出的DELTA矢量,还要对它们进行扩大。

TRD当前图片头部的TR相对于前一幅图片头部TR得增量。如果TRD小于0,则:TRD=TRD+256。

假设MVD是MVDB给出的DELTA矢量分量,并且和矢量分量MV相对应。如果MVDB没有给出,则MVD=0。如果给出了MVDB,则宏块中得每一个亮度块用同一个MVD。

现在MVF和MVB通过下面得公式计算(半像素精度):

MVF=(TRBxMV)/TRD+MVD
MVB=((TRB-TRD)xMV)/TRD(MVD=0)
MVB=MVF-MV(MVD!=0)

把四个相应亮度块的MVF矢量加和,然后在除以8,就得到了色差块的MVF。对于十六分之一像素矢量,取最接近源像素的二分之一像素位置。把四个相应亮度块的MVB矢量加和,然后再除以8,就得到了色差块的MVB。对于十六分之一像素矢量,取最接近源像素的二分之一像素位置。同样水平方向或垂直方向上的运动矢量若为正值,表示再参考图片中,预测点再被预测像素得右边或下边。

而PB帧模式代码的不足之处是编解码器需要额外的内存,计算复杂度也由所增加。

表3.9和表3.10是使用PB帧后块中包含数据元素的对比。

表3.9  正常图像的宏块类型和所包含的数据元素

图像类型

宏块类型

名称

COD

MCBPC

CBPY

DQUANT

MVD

MVD2-4

INTER

不编码

-

X

 

 

 

 

 

INTER

0

INTER

X

X

X

 

X

 

INTER

1

INTER+Q

X

X

X

X

X

 

INTER

2

INTER4V

X

X

X

 

X

X

INTER

3

INTRA

X

X

X

 

 

 

INTER

4

INTRA+Q

X

X

X

X

 

 

INTER

5

INTER4V+Q

X

X

X

X

X

X

INTER

填充

-

 

X

 

 

 

 

INTRA

3

INTRA

 

X

X

 

 

 

INTRA

4

INTRA+Q

 

X

X

X

 

 

INTRA

填充

-

 

X

 

 

 

 

表3.10  PB帧的宏块类型和所包含的数据单元

图像类型

宏块类型

名称

COD

MCBPC

CBPY

CBPB

DQUANT

MVD

MVD2-4

INTER

不编码

X

 

 

 

 

 

 

INTER

0

INTER

X

X

X

X

 

X

 

INTER

1

INTER+Q

X

X

X

X

X

X

 

INTER

2

INTER4V

X

X

X

X

 

X

X

INTER

3

INTRA

X

X

X

X

 

X

 

INTER

4

INTRA+Q

X

X

X

X

X

X

 

INTER

5

INTER4V+Q

X

X

X

X

X

X

X

INTER

填充

-

X

 

 

 

 

 

 

PB帧中B-block的预测

首先选择一个8x8的像素块,分别计算前向和后向运动矢量。假设P宏块都已经解码,并被重建和修剪过,该宏块称作PREC,通过对PREC的预测,就可以对B块进行预测。

对于B块的不同部分,它的预测方式也不同,这里由两种预测模式:

对于后向矢量MVB指向PREC内部的像素要运用双向预测。先通过运动矢量MVF和相一幅被解码的图片得到前向预测,通过后向运动矢量MVB和PREC得到后向预测,然后取这两个预测得平均(加和再除以2),就可以得到双向预测。

对于其它得像素,通过运动矢量MVF和前一幅被解码得图片进行前向预测。

双向预测区域的寻找

对B帧,当前块采用后向运动矢量P帧种的匹配块。对于该匹配块中属于P帧当前重建宏块范围内的区域采用双向预测方式编码,其预测值为前向预测和后向预测的平均值。对于不属于双向预测区域的像素采用前向预测方式。如图

3.15所示,B帧当前块中阴影部分采用双向预测,其余采用前向预测。

 
图3.15  B帧的前向预测与双向预测