以我的理解(一个非常简单的观点),H264标准的帧间预测(运动估计/补偿)首先在参考帧上找到最佳匹配块,然后用运动向量(有效的新X和Y)和残差(预测与现实)。
但是解码器如何知道如何填充之前预测块所在的旧空间呢?我假设残差是从它的新位置计算的,在块级别上,而不是在帧级别上。
假设编码器决定使用帧间预测来编码以下两个图像,它计算球应该在哪里(它的新位置和剩余能量)但是它如何填充旧空间?
以我的理解(一个非常简单的观点),H264标准的帧间预测(运动估计/补偿)首先在参考帧上找到最佳匹配块,然后用运动向量(有效的新X和Y)和残差(预测与现实)。
但是解码器如何知道如何填充之前预测块所在的旧空间呢?我假设残差是从它的新位置计算的,在块级别上,而不是在帧级别上。
假设编码器决定使用帧间预测来编码以下两个图像,它计算球应该在哪里(它的新位置和剩余能量)但是它如何填充旧空间?
运动补偿只是帧编码的优化。如果我们谈论运动向量,这就是“块运动补偿”,如 Wikipedia 中所定义:
块运动补偿将当前帧分成不重叠的块,运动补偿向量告诉这些块来自哪里(一个常见的误解是前一帧被分成不重叠的块,运动补偿向量告诉哪里这些块移动到)。源块通常在源帧中重叠。一些视频压缩算法将当前帧组装成几个不同的先前传输的帧。
因此,运动矢量不是“从旧帧移动块”,它是当前帧宏块的(帧内)编码,当从旧帧复制一些块并进行一些小的移位时(并且一些块可以从前一个帧复制几次帧到当前;并且大多数块用零运动矢量复制)。理论上,我们可以通过宏块对新帧进行编码,但是在运动补偿的帮助下,我们可以从以前的帧中获取大量图像信息并减少编码。未补偿的部分图像用图像宏块编码。
“Big Buck Bunny”免费电影中其他维基百科页面的示例:
对 H.264 中的编码/解码过程有很好的描述,但使用俄语: http: //www.compression.ru/dv/course/compr_h264.pdf(来自http://www.compression.ru/video/站点)
以及运动补偿的英文描述:http: //inst.eecs.berkeley.edu/~ee290t/sp04/lectures/02-Motion_Compensation_girod.pdf(预测误差被编码,全新的图像将几乎完全错误预测。背景图像的信息频率较低,很可能会被附近的一些背景块进行运动补偿。)