视频编码标准H.264的核心技术分析
时间:07-11
来源:
点击:
下一页:3 H.264标准的核心技术及其特点
3 H.264标准的核心技术及其特点
H.264/AVC是ITU-T和ISO/IEC联合制定的最新编码标准,它最先由ITU-T的VCEG于1997年提出,目标是提出一种更高性能(相对于当时的H.263)的视频编码标准。
与先前的一些编码标准相比,H.264标准继承了H.263和MPEG1/2/4视频标准协议的优点,但在结构上并没有变化,只是在各个主要的功能模块内部使用了一些先进的技术,提高了编码效率。其主要表现在:编码不再是基于8×8的块进行,而是在4×4大小的快上,进行残差的变换编码。所采用的变换编码方式也不再是DCT变换,而是一种整数变换编码。采用了编码效率更高的上下文自适应二进制算术编码(CABAC),同时与之相应的量化过程也有区别。H.264标准具有算法简单易于实现、运算精度高且不溢出、运算速度快、占用内存小、消弱块效应等优点,是一种更为实用有效的图像编码标准。
下面介绍H.264/AVC标准在先前标准之上的新技术。H.264 标准仍采用图像预测和变换编码相结合的编码结构,其编码器的基本结构如图2所示:
编码器的工作过程可根据数据流分为前向通道和重建通道。输入帧Fn的编码,是对原始图像16×16像素的宏块进行编码。宏块编码分为帧内编码和帧间编码。在任何情况下,预测宏块P都由重建帧获得。在帧内编码模式中,P由当前帧中的已编码宏块经解码、重构预测获得,如上图中的uF’n。在帧间编码模式下,P由一个或多个参考帧经运动补偿预测获得,如F’n-1。以预测宏块P与当前宏块Fn的差值作为残差宏块Dn,经变换、量化后得到一串变换参数X。参数X需要进行两方面的处理,一是重排序和熵变换处理,整个过程没有反馈分量,故称为前向通道;二是反量化和逆变换处理,产生宏块D’n,然后与宏块P相加得到重构宏块uF’n,再经过一系列处理得到重建的参考帧F’n,用于下一帧的运动估计,因此称为重建通道。
3.1 帧内预测编码模式
在视频编码中,通常的方法是把整幅图像分为若干宏块,然后对每一个宏块进行编码。在编码时采用Intra或Inter两种模式。在Intra模式中通常直接对宏块进行DCT变换,对变换系数进行熵编码。这样做在一定程度上消除了帧内的空间冗余度,但是由于DCT只是利用了宏块内部像素之间的相关性,而没有考虑相邻宏块间的相关性。H.264引入了Intra预测的方法,利用相邻宏块的相关性对待编码的宏块进行预测,对预测残差进行变换编码,以消除空间冗余。值得注意的是,以前的标准是在变换域中进行预测,而H.264是直接在空间域中进行预测。
3.2 帧间预测编码模式
H.264在运动估计中采了许多新技术,主要包括可变块大小、多帧运动估计、亚像素精度的运动估计以及去块效应滤波等。
⑴ 去块效应滤波
它的作用就是用来消除解码图像中的块效应。块效应产生的原因是各个宏块分别进行量化,这样在相邻宏块的交界处,因量化步长不同而导致原本很接近的像素值重构后产生了较大的差异,形成明显的块边界。去块效应滤波是在4×4的块边界上滤波,使块边界趋于平滑。
⑵ 可变块大小块大小对运动估计的效果是有影响的。将宏块分割成不同尺寸的运动补偿子块称作树状结构运动补偿。宏块的分割和子宏块的分割各包括四种类型,如图3所示。较小的块可以使运动估计更精确,产生较小的运动残差,降低码率。在H.264建议的不同大小的块选择中,可以看出,一个宏块最多可以携带16个不同的运动矢量。配合多帧运动估计,同一宏块中的不同块还可以使用不同的参考帧来进行预测。
顶端:宏块的分割
底端:宏块的子分割
⑶ 多帧运动估计
与以前视频压缩标准中使用的单帧运动估计技术相比,H.264使用的多帧运动估计具有更高的效率,更强的差错稳健性。所谓多帧运动估计是指使用一个或多个参考帧来估计运动矢量,可以防止因某个帧出现错误而影响到后面的帧。但是,这种估计需要更大的内存,更高的运算复杂度。
⑷亚像素精度的运动估计
在H.264中,运动估计的精度由H.263中的半像素提高到像素,并且把像素作为可选项。与半像素精度的运动估计一样, 像素精度的运动估计使用内插得到半像素和像素位置的点。
在H.264的帧间预测编码中,仍可以继续采用三步搜索算法找出与当前宏块最匹配的块。在块匹配中,块的位移与块的中心或块中任何一点的位移是等价的。因此,块的位移可以理解为中心点的位移。在三步算法中,搜索范围为 7,即在上一帧以当前子块为原点,将当前子块在其上下左右距离为7的范围内按一定规则移动,每移动到一个位置,取出同样大小的子块与当前子块进行匹配计算。具体分为以下三步:
①以当前子块为中心,以4为步幅,将图4中标出的9个位置为中心的子块与当前子块进行匹配,求出最佳匹配的子块中心位置。
②以①中求出的最佳子块为中心,例如,x=4,y=0,以2为步幅,将图中的9个位置为中心的子块与当前子块进行匹配,求出最佳匹配的子块中心位置。
③以②中求出的最佳子块为中心,例如,x=4,y=0,以1为步幅,将图中的9个位置为中心的子块与当前子块进行匹配,求出最佳匹配的子块中心位置,它与当前子块中心的位置偏移量即为估计的位移量。
3 H.264标准的核心技术及其特点
H.264/AVC是ITU-T和ISO/IEC联合制定的最新编码标准,它最先由ITU-T的VCEG于1997年提出,目标是提出一种更高性能(相对于当时的H.263)的视频编码标准。
与先前的一些编码标准相比,H.264标准继承了H.263和MPEG1/2/4视频标准协议的优点,但在结构上并没有变化,只是在各个主要的功能模块内部使用了一些先进的技术,提高了编码效率。其主要表现在:编码不再是基于8×8的块进行,而是在4×4大小的快上,进行残差的变换编码。所采用的变换编码方式也不再是DCT变换,而是一种整数变换编码。采用了编码效率更高的上下文自适应二进制算术编码(CABAC),同时与之相应的量化过程也有区别。H.264标准具有算法简单易于实现、运算精度高且不溢出、运算速度快、占用内存小、消弱块效应等优点,是一种更为实用有效的图像编码标准。
下面介绍H.264/AVC标准在先前标准之上的新技术。H.264 标准仍采用图像预测和变换编码相结合的编码结构,其编码器的基本结构如图2所示:
编码器的工作过程可根据数据流分为前向通道和重建通道。输入帧Fn的编码,是对原始图像16×16像素的宏块进行编码。宏块编码分为帧内编码和帧间编码。在任何情况下,预测宏块P都由重建帧获得。在帧内编码模式中,P由当前帧中的已编码宏块经解码、重构预测获得,如上图中的uF’n。在帧间编码模式下,P由一个或多个参考帧经运动补偿预测获得,如F’n-1。以预测宏块P与当前宏块Fn的差值作为残差宏块Dn,经变换、量化后得到一串变换参数X。参数X需要进行两方面的处理,一是重排序和熵变换处理,整个过程没有反馈分量,故称为前向通道;二是反量化和逆变换处理,产生宏块D’n,然后与宏块P相加得到重构宏块uF’n,再经过一系列处理得到重建的参考帧F’n,用于下一帧的运动估计,因此称为重建通道。
3.1 帧内预测编码模式
在视频编码中,通常的方法是把整幅图像分为若干宏块,然后对每一个宏块进行编码。在编码时采用Intra或Inter两种模式。在Intra模式中通常直接对宏块进行DCT变换,对变换系数进行熵编码。这样做在一定程度上消除了帧内的空间冗余度,但是由于DCT只是利用了宏块内部像素之间的相关性,而没有考虑相邻宏块间的相关性。H.264引入了Intra预测的方法,利用相邻宏块的相关性对待编码的宏块进行预测,对预测残差进行变换编码,以消除空间冗余。值得注意的是,以前的标准是在变换域中进行预测,而H.264是直接在空间域中进行预测。
3.2 帧间预测编码模式
H.264在运动估计中采了许多新技术,主要包括可变块大小、多帧运动估计、亚像素精度的运动估计以及去块效应滤波等。
⑴ 去块效应滤波
它的作用就是用来消除解码图像中的块效应。块效应产生的原因是各个宏块分别进行量化,这样在相邻宏块的交界处,因量化步长不同而导致原本很接近的像素值重构后产生了较大的差异,形成明显的块边界。去块效应滤波是在4×4的块边界上滤波,使块边界趋于平滑。
⑵ 可变块大小块大小对运动估计的效果是有影响的。将宏块分割成不同尺寸的运动补偿子块称作树状结构运动补偿。宏块的分割和子宏块的分割各包括四种类型,如图3所示。较小的块可以使运动估计更精确,产生较小的运动残差,降低码率。在H.264建议的不同大小的块选择中,可以看出,一个宏块最多可以携带16个不同的运动矢量。配合多帧运动估计,同一宏块中的不同块还可以使用不同的参考帧来进行预测。
图3 运动补偿的宏块分割
顶端:宏块的分割
底端:宏块的子分割
⑶ 多帧运动估计
与以前视频压缩标准中使用的单帧运动估计技术相比,H.264使用的多帧运动估计具有更高的效率,更强的差错稳健性。所谓多帧运动估计是指使用一个或多个参考帧来估计运动矢量,可以防止因某个帧出现错误而影响到后面的帧。但是,这种估计需要更大的内存,更高的运算复杂度。
⑷亚像素精度的运动估计
在H.264中,运动估计的精度由H.263中的半像素提高到像素,并且把像素作为可选项。与半像素精度的运动估计一样, 像素精度的运动估计使用内插得到半像素和像素位置的点。
在H.264的帧间预测编码中,仍可以继续采用三步搜索算法找出与当前宏块最匹配的块。在块匹配中,块的位移与块的中心或块中任何一点的位移是等价的。因此,块的位移可以理解为中心点的位移。在三步算法中,搜索范围为 7,即在上一帧以当前子块为原点,将当前子块在其上下左右距离为7的范围内按一定规则移动,每移动到一个位置,取出同样大小的子块与当前子块进行匹配计算。具体分为以下三步:
①以当前子块为中心,以4为步幅,将图4中标出的9个位置为中心的子块与当前子块进行匹配,求出最佳匹配的子块中心位置。
②以①中求出的最佳子块为中心,例如,x=4,y=0,以2为步幅,将图中的9个位置为中心的子块与当前子块进行匹配,求出最佳匹配的子块中心位置。
③以②中求出的最佳子块为中心,例如,x=4,y=0,以1为步幅,将图中的9个位置为中心的子块与当前子块进行匹配,求出最佳匹配的子块中心位置,它与当前子块中心的位置偏移量即为估计的位移量。