图像压缩原理基础 连载3 时域模型与运动补偿
* 本文(包含其插图)严禁转载,并且不会同意您的转载请求。如有需要引用或介绍本文,您可以提供本文的连接。
时域模型的作用是消除连续帧之间的时域冗余。在时域模型中,当前帧减去参照帧得到残差图像,对残差图像进行编码,达到降低时域冗余的目的。参考帧选得越准确,所得到的残差图像能量越小,越容易压缩。
一个最简单的方法便是找过去的图像作为当前帧的参照帧。但这种方法有一个明显的不足,那就是残差图像的能量相对于我们的压缩需求来说依然过高,后续模型依然村在大量信息需要压缩。这个问题的主要原因是物体运动。因此要进一步降低数据量,必须对图像进行运动补偿。
基于块的运动估计和补偿:现在普遍采用的运动补偿方法是基于块(Block)的运动估计和补偿。这种运动补偿方法首先将图像向划分成若干个块,分别对每个块进行运动补偿。下面简要说明其过程。
首先在参照帧中搜索当前块的匹配块。将当前块于参考帧特定搜索区域中(一般是以当前块的位置为中心的一片区域)所有块进行比较,找到相减后残差能量最小的块作为最佳匹配块。这个过程称为运动估计。之后,将最佳匹配块作为当前块的参照块,当前块减去参照块得到相应的残差块。此过程被称作运动补偿。对残差块进行编码和传输,同时运动向量(当前块和参照块之间的相对位置)也被编码和传输。

基于块的运动补偿有多种优势,如计算复杂度低、适用于长方形视频图像、适合分块变换(DCT、DWT等等,下一节会说到)。单其同样也有缺点,如真实物体很少是长方形的、物体运动经常是非整数块、较复杂的运动和较复杂的形状不适合这种补偿方式等等。但抛开不足,基于分块的运动补偿算法仍旧是标准时域模型的基础。
运动补偿的块:在大多重要的视频编码标准中(如MPEG-1、MPEG-2、MPEG-4等等),宏块(16*16像素大小)是运动补偿的基本运算单位。在运动估计时,编码器在参考帧中寻找与当前宏块匹配的16*16像素区域,使匹配准则达到最小的16*16区域即为最佳匹配。当前宏块的位置与最佳匹配宏块的相对位置为运动矢量,当前宏块减去最佳匹配宏块所得到的残差宏块将于运动矢量一同被编码和传输。
块的大小:事实证明,运动补偿的块越小,得到的残差图像的能量越小。然而,分块越小,块越多,算法复杂度越高,矢量数目越多。传输矢量所需的数据量很可能大于图像残差能量减小所节省的数据量,这样一来就会造成得不偿失的情况。比较好的解决方法就是使用自适应的分块大小,对细节较少的部分采用大的分块,对细节较多的地方采用较小的分块。
像素插值:在很多情况下,利用插值后的像素位置进行预测将提高运动补偿的精度,原因在于,在插值后的像素位置上进行搜索时,有可能找到更好的匹配。下面简要说明1/4像素插值的运动补偿过程:
首先编码器在整数像素上找到一个最佳匹配,之后编码器对该位置附近进行半像素插值,之后在半像素的位置上继续搜索,寻找更好的匹配位置。如果找到了更好的匹配位置,则在该位置附近进行1/4像素插值,之后寻找更好的匹配。最后由当前块减去最佳匹配块得到残差块。
理论上说,插值越精细,运算复杂度越高,运动补偿效果越好,即得到的残差能量越小。但事实上,随着插值变得精细,其对于运动补偿的改善作用也在逐渐下降。打个比方,如果1/2像素插值能提高30%的性能,那么1/4插值很可能只能带来15%的提升,而1/8像素插值则可能仅有3%(不同的图像其提升作用不完全相同,以上数据仅为举例)。
运动补偿的精度:从运算复杂度上来说4*4分块加上1/4像素插值的运动补偿比起没有插值的16*16分块运动补偿复杂得多。从信息量上来说,由于每块的运动矢量同样需要参与编码并传输给解码器用于重建图像,因此随着分块尺寸变小,所需要编码和传输的运动矢量数目激增。同样,半像素、1/4像素插值搜索会造成运动矢量产生小数,运动矢量的小数部分必须和整数部分一起编码,所以会消耗更多的比特数。
因此,运动补偿精度越高,编码运动矢量消耗的比特数越多,编码残差图像消耗的比特数越少;反之,运动补偿精度越低,编码运动矢量消耗的比特数越少,编码残差图像消耗的比特数越多。
基于区域的运动补偿:除了基于宏块的运动补偿之外,还有基于区域的运动补偿等方法。但由于实现这种技术还存在诸多困难,所以现在应用较少。MPEG-4提供一些基于区域的运动补偿的工具,有兴趣学习的读者可以找来相关的资料学习。
参考资料:
《H.264和MPEG-4视频压缩——新一代多媒体的视频编码技术》 [英]Iain E.G.Richardson 著 欧阳合、韩军 译 国防科技大学出版社 2004年11月第一版
话题:图像处理

No.167 回复
support support
No.168 回复
支持,希望还有下文
No.475 回复
好文!支持后续~