文章转自:http://www.cnblogs.com/CoderTian/p/8261727.html
1.视频编码发展简史
1988 年CCITT 通过了“p×64Kbps(p=1,2,3,4,5,,,,30) ”视像编码标准 H.261 建议, 被称为视频压缩编码的一个里程碑。从此, ITU-T、 ISO 等公布的基于波形的一系列视频编码标准的编码方法都是基于 H.261 中的混合编码方法。
1986 年,ISO 和 CCITT 成立了联合图像专家组(JPEG,Joint Photographic Experts Group),研究连续色调静止图像压缩算法国际标准, 1992 年 7 月通过了 JPEG 标准。
1988 年 ISO/IEC 信息技术联合委员会成立了活动图像专家组(MPEG, Moving PictureExpert Group)。 1991 年公布了 MPEG-1 视频编码标准,主要应用于家用VCD 的视频压缩; 1994 年 11 月,公布了 MPEG-2 标准,用于数字视频广播(DVB)。
1995 年, ITU-T 推出 H.263 标准,用于低于 64 Kbps 的低码率视频传输,如 PSTN 信道中可视会议、多媒体通信等。 1984 年和 2000 年又分别公布了 H.263+、 H.263++等标准。
1999 年 12 月份, ISO/IEC 通过了“视听对象的编码标准”——MPEG4,它除了定义视频压缩编码标准外,还强调了多媒体通信的交互性和灵活性。
2003 年 3 月, ITU-T 和 ISO/IEC 正式公布了 H.264 视频压缩标准,不仅显著提高了压缩比,而且具有良好的网络亲和性,加强了对 IP 网、移动网的误码和丢包的处理。
2.H.261标准
2.1.图像格式
H.261 用于视频通信,会产生多个国家的互通困难的问题,不同国家采用不同的彩电制式,不可能直接互通。 H.261 采用一种公共中间格式(CIF, Common Intermediate Format),不论何种彩色格式,发送方先把自己国家的彩电制式转换成 CIF 格式,经 H.261 编码后再由CIF 格式转换到接收方彩电制式。
CIF图像格式
采用 CIF 及 QCIF 格式时,视频信号的结构采用图所示的图像、块组(GOB,
group of block)、宏块(MB, macroblock)、块(B, block)四级结构。每帧 CIF 图像由 2 个
GOB组成,每个 GOB 由 33 个 MB 组成,每个 MB 由 4 个亮度块和 1 个 Cr 块及 1 个 Cb 块组成,每个块(B)又由
8×8 像素构成。一帧 QCIF 图像由 3 个 GOB 组成。
2.2. H.261视频编码器
视频信源编码器用于视频信号的码率压缩,主要采用混合编码方法;视频复合编码器将每帧图像数据编排成四层结构,并通过熵编码对视频数据进一步压缩输出。传输缓冲器和码率控制器用于保证输出码流尽可能稳定。传输编码器则用于视频数据的误码检测和纠正。解码器各部分功能与编码器相反。
H.261信源编码器框图如下所示,输入以MB(宏块)为单位
针对四层的视频数据结构,视频复合编码器对量化后的视频数据进行变长编码(直流系数用定长编码),并插入一些辅助数据(如帧首、块组首、宏块首等),得到复合编码图像数据结构,如下图所示
- 帧层,帧首包括帧起始码(PSC)、帧计数码(TR)、帧类型信息码(PTYPE)及备用插入信息码等;
- 块组层,块组首包括块组起始码(GBSC)、块组编号码(GN)、块组量化步长(GQOANT)、备用插入信息等;
- 宏块层,由 6 个块组成,包括 4 个亮度块和两个色度块。宏块首包括宏块地址码(MBA)、宏块类型码(MTYPE)、宏块量化步长码(MQUANT)、运动矢量数据(MVD)、编码模式(CBP)等, CBP 说明各块中数据数;
- 块层,各块(8×8)的 DCT 系数按图 4.5 所示的 Zig-Zag(之字形)扫描,将像素排成一维序列并进行熵编码(变长编码),每块结束时用 EoB 结束符作为块结束
为使输出码率基本恒定,可采用缓冲器控制并调整帧亚速率、改变量化步长等等
解码器框图
3. H.263标准
3.1.图像格式
H.263共有5种图像格式
3.2. H.263视频信源编码算法
H.263 的视频信源编码框图与 H.261 相同,信源编码方法也类似,不同的是 H.263 输入有多种格式,输出为 H.263 码流。
为了适应低码率传输要求,并进一步提高图像质量, H.263+、 H.263++做了不少改进,增加了若干选项,现选择主要技术介绍如下:
(1)运动矢量, H.263 中 1 个 MB 可以使用 1 个运动矢量表示,也可以 4 个 8×8 块各使用 1 个运动矢量表示,提高运动估计精确性和压缩比。(H.261 规定每个 MB 使用 1 个运动矢量。)
(2)半像素预测, H.263 为进一步提高压缩比,采用半像素预测,而 H.261 采用整像素预测,预测精度明显低于 H.263。
(3)二维预测, H.263 采用二维预测, H.261 采用一维预测。
(4)非限制的运动矢量模式(选项), H.263 的运动矢量范围允许指向图像帧之外。
(5)基于句法的算术编码(选项),显著降低码率,但复杂度比哈夫曼编码高。
(6)高级预测模式(选项), H.263 除可以采用每个 8×8 块 1 个运动矢量,每个 16×16宏块 4 个运动矢量外,还采用 OBMC 运动补偿方式,以减少方块效应。
(7) PB 帧模式(选项), PB 帧由 1 个 P 帧和 1 个 B 帧组成。 P 帧由前一帧预测而得。B 帧由双向(前向和后向)预测而得,分别用前向 MV、后向 MV、前后向 MV 平均进行运动补偿得 3 个预测误差,取其最小者作为 B 帧的预测误差进行编码。
4.MPEG-1标准
MPEG-1标准有如下功能:
(1) 视频压缩编码,压缩后码率在 1.5Mbps,可用于视频传输和视频存储;编码前必须将视频图像转换成逐行扫描图像。
(2)录像机的正放、图像冻结快进、快退和慢放功能以及随机存储功能。
4.1.图像格式
MPEG-1 定义了三种图像类型: I、 P、 B 图像。 I
图像即帧内(Intra)图像,采用帧内编码,不参考其它图像,但可作为其它类型图像的参考帧。 P
图像即预测(Predicted)图像,采用帧间编码,参考前一幅 I 或 P 图像,用作运动补偿。 B 图像即双向预测(Bi-
predicted)图像,参考前后两个方向图像。 I、 P、 B 图像之间的显示顺序如下图所示
双向预测编码可解决“暴露”问题, 即某物体在前一帧未显示出来,但在后一帧却“暴露”出来,双向预测能更准确地找出运动矢量,并只有在视频存储、 VOD 等非实时通信及数字广播电视中应用。 会议电视、可视电话等实时通信中不宜应用 B 图像,因为实时通信后一帧处在当前帧之后,当前帧编码时它尚未出现。
4.2.编码结构
MPEG-1 编码结构类似 H.261,也采用分层结构,但有所不同,MPEG-1 多出片层(切片或 slice 层),用于防止误码在一帧内地扩散。
MPEG-1编码器和 H.261 并无多大区别,但需考虑双向预测编码和解码。解码时先将恢复图像存在缓存中,以显示顺序显示。
5.MPEG-2标准
MPEG-2 标准包括系统、视频、音频及符合性(检验和测试视音频及系统码流) 4 个文件。
5.1.MPEG-2编码复用系统
MPEG-2
码流分为三层,即基本流(ES, elementary bit stream)、包基本码流(PES, packetelementary
stream)和复用后的传送码流(TS, transport stream)、节目码流(PS, programstream)。其编码复用系统结构如下图所示。
5.2.档次和级别
MPEG-2 按不同的压缩比分成五个档次,按视频清晰度分为四个级别
5.3.MPEG-2视频编解码器
MPEG-2 编解码器结构与 H.261 区别不大
5.4.ES码流结构
ES 码流采用图像序列(PS)、图像组(GOP)、图像(P)、片(slice)、宏块(MB)、块(B)六层结构。
(1)图像序列层,图像序列包括若干 GOP,序列头包含起始码和序列参数,如档次、级别、彩色图像格式、帧场选择等等;
(2)图像组层,图像组包含若干幅图像,组头包含起始码、 GOP 标志等,如视频磁带记录器时间、控制码、 B 帧处理码等;
(3)图像层,一幅图像包含若干片,头信息中有起始码、 P 标志,如时间、参考帧号、图像类型、 MV、分级等;
(4)片层,片是最小的同步单位,包含若干宏块,片头中有起始码、片地址、量化步长等;
(5)宏块层,宏块由 4 个 8×8 亮度块和 2 个色度块组成,宏块头包括宏块地址、宏块类型、运动矢量等。
5.5.基于帧或场的DCT变换
MPEG-2 可用于逐行扫描图像也可用于隔行扫描图像。对逐行扫描图像,可按行分割成块,基于块进行 DCT 变换。对逐行扫描图像,一帧由两场组成,于是就有基于帧的分割和基于场的分割两种宏块结构
- 同一帧内的各邻近行之间空间相关性比同一场内各邻近行之间的相关性要强。因此基于帧的 DCT 编码适用于相对静止或慢运动的景物。
- 同一场内各邻近行之间时间相关性比同一帧内各邻近行之间的时间相关性要强(因为同一帧内当前行的下一行要等到一场扫描完后才出现在当前行之下,时间相关性弱),基于场的 DCT 编码适用于运动大的景物。
- 根据帧的行间相关系数和场的行间相关系数可判定采用帧分割还是场分割进行编码。
6.JPEG标准
1991 年 3 月 ISO/IEC 正式通过了静止图像压缩编码标准,称为 JPEG 建议。 JPEG 标准分为基本系统、扩展系统和信息保持系统三个部分。基本系统提供对顺序扫描静止图像的高效有损编码,输入图像精度为 8bit/像素。
6.1.编码框图
6.2.数据交换格式
熵编码后得到变长度的码流。为便于数据的交换, JPEG 规定了统一的压缩后数据交换格式
第一行: SOI 表示图像数据开始; EOI 为一帧图像结束,各占两个字节。
第二行:表/杂项中放置量化表、哈夫曼表;帧首包括编码方法、取样精度、量化系数、源图像行数、每行取样数等; DNL 重新定义帧内的行数。
第三行:扫描首说明扫描起始信息、分量图像号码、参数、熵编码表选择(ECS); RST为重新开始标志。
第四行:为熵编码区, MCV 为最小编码单元,包括 4 个亮度块, 1 个 Cr 块和 1 个 Cb块。