图像压缩编码(5)--MPEG—x 系列视频压缩编码标准

MPEG一1和MPEG-2是 MPEG 制定的第一代音视频压缩标准,为VCD、DVD 及数字电视、高清晰度电视HDTV 等产业的飞速发展打下了牢固的基础;

MPEG一4 是基于第二代音视频编码技术制定的压缩标准,以视听媒体对象为基本单元,实现数字音视频和图形合成应用、交互大多媒体的集成,已在流式媒体服务等领域得到应用。

目录

1.MPEG一1的视频编码过程

2.  MPEG—1 的视频解码过程

3.  MPEG—1视频码流的分层

4.  MPEG一1系统层的编码与解码

MPEG——1 标准

1.MPEG一1的视频编码过程

MPEG一1标准没有定义特定的编码过程,它只定义了编码比特流的语法和解码过程。
其语法支持的操作包括运动估计、运动补偿预测、DCT、量化和变长编码。与JPEG 不同,MPEG一1没有定义产生合法数据流所需的详细算法,因而在编码器设计中提供了极大的灵活性。其视频部分的核心算法与H.261标准相类似,所不同的是,MPEG一1主要针对存储媒体,而 H.261、H.263 则主要面向传输:所以在兼顾图像质量和压缩比的情况下,MPEG一1还必须便于对图像序列进行随机访问和编辑。MPEG—1规定,每秒至少要传送两个可独立编解码的 I 帧,采用源输入格式 SIF,即 360x288(PAL)或360x240(NTSC)。MPEG一1 还规定了一个面向帧而不是面向场的句法,即逐行扫描。

1) 重排帧序

图像序列按显示顺序输入编码器,在编码器的输入端将按编码顺序重新排列。这部分工作在预处理环节完成。

2)运动估计和运动补偿预测
在这一部分要进行运动估计,计算运动矢量,对位移矢量编码,并根据矢量状态发出预测方式信息,控制预测方式,同时输出预测块数据。
因为当前宏块的位移矢量和前一个宏块的位移矢量有很强的相关性,所以对运动矢量采用DPCM 编码。对P帧,在每个宏块条的开始和遇到帧内编码的宏块之后,位移矢量的预测值应设为零。B 帧有前向预测和后向预测两个位移矢量,在每个宏块条的开始和遇到帧内编码的宏块之后,两个位移矢量的预测值都设为零;如果宏块只有一个位移矢量,那么另一个位移矢量的预测值不变。

3)I 帧编码
I帧中有两类宏块,一类用当前的量化级(intra-d),另一类则使用新的量化级(intra-q),宏块类型由数据缓冲区的饱和程度决定。

4) P 帧编码
(1)P帧宏块类型。
P 帧图像共有8类宏块:pred-mc、pred-c、pred-m、intra-d、pred-mcq、pred-cq、intra-q和 skipped,它们分别对应不同的编码方式。在宏块头上的编码信息中包括了宏块类型信息。
特别是 skipped 宏块,它的位移矢量为零,其预测误差也为零,解码器只需要将参考帧的宏块直接拷贝成当前图像宏块就可以了.

(2)编码类型的选择。
在对P帧宏块的编码过程中,要做4个判断:
• 是否要进行运动补偿。当位移矢量为零时,说明宏块没有运动,不用运动补偿。
• 是否帧内编码。当最佳位移矢量确定后,就要判断:是用第一步中得到的位移矢量进行预测编码,还是直接采用帧内编码。如果预测编码得到的预测误差较大,则很可能最后的编码效率比帧内编码低。可采用适当的快速算法进行比较,选取编码效率高的一种。

•如果不采用帧内编码,则判断是否还要编码。在量化以后,若所有的分量都是零,则宏块不需要进行编码,解码器只需要拷贝参考帧中同一位置宏块的内容即可。
• 是否要改变量化步长,这由缓冲器的数据存储情况决定。

(3)量化后的 DCT 系数的编码。
在P帧中,宏块的帧内编码基本上和 I 帧相同,只是 DC 分量的预测值不同,除非前一个宏块采用P 帧编码,否则该宏块帧内编码 DC 的预测值取 128。
P帧中宏块的非帧内编码方法和帧内编码类似,只是非帧内编码将 DC分量当作AC分量处理。


5) B帧编码
(1) B 帧宏块类型。
与P帧相比,因为增加了后向预测,所以宏块类型也多了。B帧中共有12类宏块:pred-I、pred-ic, pred-b, pred-bc, pred-f, pred-fc, intra-d, pred-icq, pred-fcq. pred-bcq, intra-q和skipped。各类宏块的编码方式不同。宏块头数据中包含宏块类型信息。
如果只有前向预测,则用前面的参考帧进行运动补偿,与P 帧相同。如果只有后向预测,则用后面的参考帧进行运动补偿。如果是双向预测,则将前向和后向的运动补偿结果加以平均。
B 帧的 skipped 类型宏块与前一个宏块有相同的位移矢量和宏块类型,这一点与P帧是不同的。

(2)B 帧宏块类型的选择。
在B 帧宏块编码的过程中,也要做四个判决:
• 运动补偿的模式判决。选择前向、后向或双向运动补偿。
• 是否用帧内编码。决定用帧内编码还是用帧间编码。
• 如果不用帧内编码,则同前面所述,也要判断是否需要编码。
• 是否需要改变量化步长。

2.  MPEG—1 的视频解码过程

解码器框图:

解码器收到的图像顺序与编码顺序相同。在解码时,VLC 解码器先解码图像头信息,确定图像类型。在解码得到量化后的DCT 系数后,再经过反量化(DQ)还原DCT 系数。
如果是帧内编码图像块,经 IDCT 便可还原图像块的像素样值;若为帧间预测编码的图像块,则 IDCT 还原得到的是图像块的预测差值,须与当前的预测值相加才可恢复像素值。
不同类型图像块的预测值是分别经过不同的运动补偿得到的,其中的预测方式和运动矢量等信息都由 VLC 解码器解码得到。

3.  MPEG—1视频码流的分层

MPEG一1对编码数据规定了一个分层结构,其码流被分为6个层次,从最高层到最低层依次是:

图像序列(VS)层、

图像组(GOP)层、

图像层、

条带(Slice)层、

宏块(MB)层、

块(B)层.



1)图像序列
图像序列由被处理的连续图像组成。图像序列在 MPEG一1中只能是逐行扫描方式的,而在 MPEG—2中既可以是逐行扫描方式的,也可以是隔行扫描方式的。一个编码的图像序列从一个序列头(sequence header)开始,后面跟着若干个图像组层数据,图像序列最后用序列终止码(sequence end-code)结束。


2)图像组
在 MPEG一1 中,将图像序列中的图像分为若干个图像组,每个图像组由几个连续图像组成,其第一帧总是I帧。图像组为一个随机存取单元,每组包括组头和图像层数据。


3)图像
图像层由图像层头和宏块条带层数据组成。图像是基本编码单元,也是一个独立的显示单元,可作为一个整体显示。


4)条带
图像层中的每个条带又被分成若干个宏块条,每个条带层的开始都有条带头,后面跟着若干个连续的宏块。宏块条是重新同步单元,在一个宏块条发生误码又不可纠正的情况下,仍能准确地找到下一个宏块条并正常解码。


5)宏块
由宏块头和块层数据组成。图像以亮度数据阵列为基准,分成16×16个像素的宏块,它是运动补偿的基本单元。一个宏块包含一个亮度宏块和两个色度宏块,色度宏块的大小与抽祥格式有关,当抽样格式为4:2:0时,色度宏块大小为 8x8;当抽样格式为4:4:4时,色度宏块大小为 16x16,如图 4-42(a)所示;当抽样格式为4:2:2时,色度宏块大小为8×16,如图 4-42(b)所示。

6)块 层

块层是由图像数据和块结束符(EOB)组成,是进行DCT的基本单元。

4.  MPEG一1系统层的编码与解码

MPEG一1系统层包含如下功能:
(1)将视频流、音频流、数据流等多个基本流复合成单一的串行比特流;
(2)保证基本流之间的时间同步;
(3)保证信源与信宿之间的时间同步;[信源,是产生各类信息的实体。显示器作为信宿,将接收到的图像信号转换为回图像 ]
(4) 可随机存取,便于编辑加工;
(5)速率可控。
MPEG一1系统层编码器、解码器框图如图 4-43所示。

在系统层编码器中,系统时钟 STC_{1}是频率为 90kHz的计时器,PTS (Presentation Time
Stamp)和 SCR(System Clock Reference)是系统的绝对时间。
编码时,以STC_{1}为基准,对每一帧画面、每一帧声音均附加一个 PTS 值;解码时即按此指定时间播放,从而达到音视频同步的目的。需要注意的是,解码器的本地 STC_{2}值受控于音频PTS 值,将会不断进行更新与校正。

mpeg4编码库源代码,C++完整源代码,有需要饿同学尽管拿去。 // This is the header file describing // the entrance function of the encoder core // or the encore ... #ifdef __cplusplus extern "C" { #endif typedef struct _ENC_PARAM_ { int x_dim; // the x dimension of the frames to be encoded int y_dim; // the y dimension of the frames to be encoded float framerate;// the frame rate of the sequence to be encoded long bitrate; // the bitrate of the target encoded stream long rc_period; // the intended rate control averaging period long rc_reaction_period; // the reation period for rate control long rc_reaction_ratio; // the ratio for down/up rate control long max_key_interval; // the maximum interval between key frames int max_quantizer; // the upper limit of the quantizer int min_quantizer; // the lower limit of the quantizer int search_range; // the forward search range for motion estimation } ENC_PARAM; typedef struct _ENC_FRAME_ { void *image; // the image frame to be encoded void *bitstream;// the buffer for encoded bitstream long length; // the length of the encoded bitstream } ENC_FRAME; typedef struct _ENC_RESULT_ { int isKeyFrame; // the current frame is encoded as a key frame } ENC_RESULT; // the prototype of the encore() - main encode engine entrance int encore( unsigned long handle, // handle - the handle of the calling entity, must be unique unsigned long enc_opt, // enc_opt - the option for encoding, see below void *param1, // param1 - the parameter 1 (its actually meaning depends on enc_opt void *param2); // param2 - the parameter 2 (its actually meaning depends on enc_opt // encore options (the enc_opt parameter of encore()) #define ENC_OPT_WRITE 1024 // write the reconstruct image to files (for debuging) #define ENC_OPT_INIT 32768 // initialize the encoder for an handle #define ENC_OPT_RELEASE 65536 // release all the resource associated with the handle // return code of encore() #define ENC_OK 0 #define ENC_MEMORY 1 #define ENC_BA
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

search7

请为我点赞!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值