对比上图和基本原理图,我们会发现只是多了一个Fitler,那么H.264和MPEG-2编码之间的区别只是在于这一个Filter吗?
H.264和MPEG-2编码效率的主要提升在于以下几方面的主要区别:
n 帧内预测编码
n 多帧参考
n ME时宏块和ME时细化宏块,子宏块比较,¼像素ME
n 多帧参考
n 更高效的熵编码CAVLC和CABAC
n Deblock Filter
到目前为止,H.264共有四个级别的Profile:
各个Profile的特点在图中已经标明,这些不同的特点决定不同Profile的不同应用场合。
Baseline:一般用在可视电话,会议电视,无线通信等实时通讯情况下。
Main:运行隔行,主要用于数字电视与数字视频存储。
Extended:支持码流的切换,主要用于流媒体。
High:用在高清分辨率的场合。
由上图我们可知,各等级之间并不是子集的关系。
我们知道,在MPEG-2中,帧内编码就是直接对MB进行DCT变换,然后保存相关的参数。在H.264中,对帧内编码引入了预测编码,所谓帧内预测就是在对MB进行DCT变换前,先根据其周围已编码的MB或sub-MB进行预测,仅对预测后的残差和预测方式进行编码。
针对16x16和4x4,H.264提供了多种预测方式。
4x4预测适用于细节较多的MB。
4x4预测编码共9种方式:
16x16预测适合平坦区域的MB的。
每个帧内编码宏块的8×8 色度成分由已编码左上方色度像素预测而得,两种色度成分常用同一种预测模式。4 种预测模式类似于帧内16×16 预测的4 种预测模式,只是模式编号不同。其中DC(模式0)、水平(模式1)、垂直(模式2)、平面(模式3)。
在H.264中,参考帧最多数目可以达到16个。H.264维护了两个List用于保存参考帧图像,List中图像基于POC进行排序,包括了前向参考和后向参考的图像。
l 宏块分割
ME时16x16MB有以下几种分割方式:
色度块分割则为相应的亮度的一半。
下图是一个预测后的残差帧:
我们可以看到在平坦区域一般是16x16分割,在细节较多的区域采用较细的分割。
l MV预测
预测矢量MVp 基于已计算MV 和MVD(预测与当前的差异)并被编码和传送。MVp 则取决于运动补偿尺寸和邻近MV 的有无。
其中:
1) 传输分割不包括16×8 和8×16 时,MVp 为A、B、C 分割MV 的中值;
2) 16×8 分割,上面部分MVp 由B 预测,下面部分MVp 由A 预测;
3) 8×16 分割,左面部分MVp 由A 预测,右面部分MVp 由C 预测;
4) 跳跃宏块(skipped MB),同1)。
l 1/2,1/4像素搜索
1/2像素内插:
内插算法:
1/4内插:
1/4内插算法在1/2基础上通过线性进行。
n CAVLC
n CABAC
块效应的产生,是由于预测时基于方块进行的。在进行量化后,方块的边界有时变得非常明显。
n 解码完的一帧数据进行Deblocking
n Intra编码的MB没有进行Deblocking
去块效应的具体方法: