MPEG编码原理及实现

上传人:豆浆 文档编号:30270014 上传时间:2018-01-28 格式:DOC 页数:6 大小:127KB
返回 下载 相关 举报
MPEG编码原理及实现_第1页
第1页 / 共6页
MPEG编码原理及实现_第2页
第2页 / 共6页
MPEG编码原理及实现_第3页
第3页 / 共6页
MPEG编码原理及实现_第4页
第4页 / 共6页
MPEG编码原理及实现_第5页
第5页 / 共6页
点击查看更多>>
资源描述

《MPEG编码原理及实现》由会员分享,可在线阅读,更多相关《MPEG编码原理及实现(6页珍藏版)》请在金锄头文库上搜索。

1、PC 机的 MPEG-4 编码原理及实现日益增长的多媒体通信量和有限的通信带宽之间的矛盾日益突出。为了减小传输的数据量,国际电信联盟和 MPEG 标准组织都制定过各自的视频压缩标准。其中,最新 MPEG-4 标准以其高压缩率,支持低码率传输和基于对象编码等优点,而在传真、视频点播、电视会议、医用图像传输等领域广泛应用。MPEG-4 继承了 MPEG-2 中档次和等级概念,共有视频档次、音频档次、图形档次和场景描述档次共四类。档次是针对某一特定的应用而采用的编码工具,它是 MPEG-4 提供的工具集中一个子集,不同的档次就是不同的子集。每一个档次分为一个或多个等级,等级则定义了比特流参数的规格,

2、实际上是限定了解码一个编码序列所应具备的性能。MPEG-4 的独特之处在于支持基于内容的编解码,为此引入了视听对象AVO(AudioVideo Object)的概念。AVO 可以是一幅图像中一个小提琴或琴声等,每个 AVO 可独立编码,但相互之间又存在着时空结构关系,因此编码时,必须传送编码对象的组成结构信息体“场景描述”,以表示场景中各 AVO 之间的时空结构关系。解码时根据此“场景描述”对图像和声音的有关内容进行编辑和操作。视听对象还可以是一个矩形帧,从而使 MPEG-4 兼容原来的 MPEG 标准。视听对象中的视频对象 VO 通常由 3 类信息来描述,即运动、形状和纹理信息。1 编码原理

3、MPEG-4 编码器主要由形状编码、纹理编码和运动编码三部分组成。帧格式分为I-VoP,P-VOP 和 B-VOP。这里只讨论 I-VOP 和 P-VOP。I-VOP 采用纹理编码来消除一帧图像数据间的空间冗余度;P-VOP 是参考前一帧图像,并采用两种参数来编码。一种是当前要编码的图像与参考图像之间的差值;另一种是运动矢量。编码器的具体结构模块如图 1 所示。1.1 形状编码形状编码主要用于记录从图像序列中提取 VOP 的形状信息,该信息分为二值形状信息和灰度形状信息。二值形状信息用 0 和 1 两个值表示 VOP 的形状;灰度形状信息用 0255 表示 VOP 区域的不同透明度。在编码时,

4、当提取的 VOP 具有非矩形形状时,需要对其进行边界扩展,使其矩形边界都是 16 的倍数,同时保证扩展后的面积最小,然后进行形状编码;当提取的 VOP 为矩形时(矩形的长度和宽度都是 16 的倍数),形状编码就会被屏蔽。1.2 纹理编码纹理编码主要对 I-VOP 内的图像像素或 P-VOP 内的差值像素进行编码,包括DCT、量化、DC 和 AC 预测、熵编码等过程,最大程度地去除当前 VOP 内各像素之间的空间冗余度。视频的第一帧图像采用 I-VOP 格式编码,其余的帧采用 I-VOP,还是 P-VOP 格式则受两个因素制约。其用户会按照 IPPPIPPPI 的方式设置当前帧所采用的格式;二是

5、已经人为地设置了当前帧为 P-VOP,通过运动估计计算 mad_P 的值,如果 mad_P 满足下列两个条件之一,则当前帧就采用 P-VOP 编码格式,否则采用 I-VOP 编码格式。条件 1:mad P503;条件 2:mad P50,并且 IntraMBRatio0.4。其中,IntraMBRatio 为当前帧中采用 MBM_INTRA 预测模式的宏块占总宏块的比重。纹理编码中的 DCT 和量化模块比较简单,这里略过,重点介绍剩下的纹理编码模块。1.2.1 DC 和 AC 预测88 块经过 DCT 和量化后,系数排列呈现以下的规律,即非零系数集中在左上角,大部分的 0 系数集中在偏离 DC

6、 系数向右和向下的位置上。特别是 DC 系数、第一行和第一列 AC 系数,数值非零且较大,如果能用较小的数值代替它们,会减少编码后的位流数,于是产生 DC 和 AC 预测。在 MPEG-4 中,通常把一个宏块分为 6 个 88 块进行 DC 和 AC 预测。首先对 88 块进行 DC 预测。如图 2 所示,X 表示当前的 88 块;A,B 和 C 表示 X 的相邻 88 块,其位置分别位于 X 的左边、左上角和上边。对 X 进行 DC预测就是采用相邻块的 DC 系数值预测 X 的 DC 系数值,关键是选择哪个相邻块的 DC 系数。程序采用了以下策略选取相邻块。定义块 A,B,C,X 的 DC

7、系数值分别为DC_A,DC_B,DC_C,DC_X。如果 DC_A 与 DC_B 的差小于 DC_B 与 DC_C 的差,则 DC_A 与 DC_B 在数值上比较接近,即在垂直方向上的数值比水平方向上更接近,所以采用 DC_C 来预测DC_X;反之,在水平方向的数值比较接近,即采用 DC_A 来预测 DC_X。将当前块的 DC 系数与用来预测的相邻块的 DC 系数,经过特定处理后做差,其差存放到当前块的 DC 位置上,同时记录此 DC 系数的预测方向。AC 预测主要是针对 88 块的第一行或者第一列 AC 系数,其预测方向取决于当前块 DC 系数的预测方向。如图 2 所示,如果之前 DC 预测

8、为水平预测,则当前块 X 的第一列 AC 系数采用 A 块的第一列 AC 系数预测,同时将 X 的第一列 7 个AC 系数各自取绝对值后相加到变量 S1(S1 的初始值为 0)上。将当前块第一列AC 系数与用来预测的相邻块 A 的第一列 AC 系数做差,其 7 个差值存放到当前块的第一列 AC 系数的位置上,同时将 7 个差值各自取绝对值后相加到变量S2(S2 的初始值为 0)上。如果之前的 DC 预测为垂直预测,则只进行当前块 X 的第一行 AC 系数预测,其预测步骤同第一列 AC 系数的预测一样。有时 AC 预测会产生较大的预测误差,并没有达到节省位流的目的,因此必须判断 AC 预测的有效

9、性。在单个 88 小块的 AC 预测中,用 S1 记录了此小块的第一行或第一列 AC 系数的绝对值之和,用 S2 记录了第一行或第一列预测后 7 个差值的绝对和。以一个宏块的 6 个 88 小块为单位,将各个小块的 S1 与 S2 之差相加,得到值 S。如果 S 非零,则此宏块进行 AC 预测,其标志 ACpred_flag置 1,否则此宏块不进行 AC 预测,ACpred_flag 置 0。1.2.2 之字型扫描DC 和 AC 预测之后,对 88 块的系数进行之字形扫描,共有Zigzag,Zigzag_v(交替垂直扫描)和 Zigzag_h(交替水平扫描)三种扫描方式。采用何种扫描方式由三个

10、要素决定,即帧内还是帧间预测,AC 预测标志ACpred_flag 的值,DC 系数的预测方向。对于帧内预测的宏块,如果 AC 预测标志 ACpredflag 为 0,则此宏块中的 6 个88 块都使用 Zigzag 扫描;如果 AC 预测标志为 1,则此宏块中的 6 个 88 块将根据各自的 DC 预测方向决定 AC 系数的扫描方向。如果 DC 预测为水平预测,则此 88 块使用 Zigzag_v 扫描方式扫描系数,否则使用 Zigzag_h 扫描方式。对于帧间预测的宏块,其每个 88 块统一采用 Zigzag 扫描方式扫描系数。88 的系数矩阵经过之字型扫描后,大部分非零系数集中在一个一维

11、数组的前部,大部分零系数集中在此一维数组的后面,根据此特点便产生了游程编码。1.2.3 游程编码和熵编码所谓游程编码就是对 88 系数矩阵的 AC 系数进行特定的处理,使其成为个数更少的三维矢量(Last,Run,Level)。其中,Level 代表非 0 系数的大小。Run代表 Level 前面连续 0 的个数。Last 代表终止标志:其值为 0 时,表示 Level后还有不为 0 的系数;其值为 1 时表示该系数是最后不为 0 的数;余下的系数全为 0。游程编码生成三维矢量,压缩了数据量,然后根据 Last,Run 和 Level的不同组合作为索引,找到对应 Huffman 编码表中的码字

12、,生成码流。1.3 运动编码运动编码对当前 P-VOP 和参考 VOP 进行运动估计与补偿,减小帧间的时间相关性,实现压缩。通常采用块匹配法进行运动估计。块匹配法就是针对当前帧中某一特定大小的图像块,从参考帧的一定区域中找出该图像块绝对误差和(Sum of AbsoluteDifference,SAD)的最小匹配块,利用此匹配块来预测当前块。图像块的绝对误差和指两个大小相同的图像块的中像素差的绝对值之和。SAD 1616函数实现当前宏块和参考宏块间的绝对误差和;SAD 88函数实现当前 88 块与参考 88 块间的绝对误差和。确定了块匹配准则后,就要进行最优匹配点的搜索,MPEG-4 校验模型

13、最后采用钻石搜索法(Diamond Search,DS)。钻石搜索法是一种利用搜索模板的形状和大小,对运动估计算法速度及精度产生重要影响的快速搜索法。选用了两种形状和大小都不相同的搜索模板:一种是大钻石搜索模板(Large DiamondSearch Pattern,LDSP),它有 9 个候选位置:(0,0),(0,2),(1,1),(2,0),(1,-1),(0,-2),(-1,-1),(-2,0)和(-1,1)。具体模板如图 3 所示。一种是小钻石搜索模板(Small Diamond Search Pattern,SDSP),它包含 5 个候选位置:(0,0),(0,1),(1,0),(

14、0,-1)和(-1,0)。具体模板如图 4 所示。钻石搜索过程如下:以当前帧的当前宏块的左上角起点坐标为大模板的原点(0,0),在参考帧的搜索范围内,分别以大模板的(0,0),(0,2),(1,1),(2,0),(1,-1),(0,-2),(-1,-1),(-2,0)和(-1,1)像素点作为宏块的左上角起点,将该宏块和当前帧的宏块做 SAD1616 运算,选择 SAD1616 值最小的左上角起点作为暂时的最佳匹配点,此点与当前宏块左上角起点之间的位移就是运动矢量。判断此运动矢量是否适合特定的规则,如果不适合,则进行新一轮的大钻石模板搜索,直到找到适合条件的运动矢量。然后再以大钻石模板搜索的最佳

15、匹配点为中心点(0,0),用小钻石搜索模板进行(0,1),(1,0),(0,-1)和(-1,0)四个参考点的精确搜索,搜索到的 SAD1616 值最小点就是最终的最佳匹配点,最佳匹配点与当前宏块的左上角起点之间的位移就是最终的运动矢量。以上是基于宏块的全像素搜索,还可以选择是否进行基于 88 块的全像素搜索。利用已经得到的基于宏块的运动矢量,找到基于宏块的最佳匹配点。此匹配点为中心(0,0),其他匹配点为(-1,-1),(0,-1),(1,-1),(-1,0),(1,0),(-1,1),(0,1),(1,1),分别以这 9 个匹配点作为 88 像素块的左上角起点,将该 88 块和当前帧的 88

16、 块做绝对差值和的运算,选择 SAD88值最小的左上角起点作为最佳匹配点,以找到最佳运动矢量,得到宏块内每个 88 亮度块的运动矢量和 SAD88值。将 4 个 SAD88的和与 SAD1616做比较,将较小值按照一定的规则处理,从而判断当前宏块的预测模式为帧内或帧间预测。如果采用帧间预测,进一步采用半像素搜索。首先对整个参考帧进行双线性差值,则参考帧的面积变为原来的 4 倍,然后在特定的搜索范围内搜索出更精确的运动矢量,最后根据参考图像的亮度信息、色度信息和运动矢量做运动补偿。如果采用帧内预测,不再对当前宏块进行任何运动估计,相应运动补偿后的参考宏块数值为 0。最后用当前帧减去运动补偿后参考图像得到差值,将差值数据进行纹理编码;对每个宏块的运动矢量进行预测并求出差分值,对差分值进行位流转换并输出。2 编码器的实现和测试根据图 1 并结合 MPEG-4 编码器各个模块的实现原理,进行编码器主函数的编写和调试。初步确定编码器的主函数应包括以下三部分:初始化部分由于参

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号