MPEG1运动估计/补偿

时间:2012-01-21 14:30:11

标签: mpeg

我看到了MPEG 1的运动估计/补偿的以下解释,并且只是想知道它是否正确:

为什么我们不编码当前块和参考块之间的原始差异? 因为残差的数字通常要小得多。例如,假设一个物体在整个图像中加速。 11帧中的x位置是以下数字。 12 16 20 25 31 38 48 59 72 84 96 原始的差异将是 x 4 4 5 6 7 10 11 13 12 12 所以预测值会是 x x 20 24 30 37 45 58 70 85 96 所以残差是 x x 0 1 1 1 3 1 2 -1 0

预测frame [i + 1] =(frame [i] - frame [i-1])+ frame [i] ,即将前两个参考帧的运动矢量添加到最近的参考框架?然后我们编码预测残差,即实际捕获的帧[i + 1] - 预测帧[i + 1] 并将其发送给解码器?

1 个答案:

答案 0 :(得分:2)

MPEG1解码(运动补偿)的工作原理如下:

预测和运动矢量将参考帧转换为下一个(当前)帧。以下是计算新帧的每个像素的方法:

对于每个宏块,您有一组预测值(与参考帧的差异)。运动矢量是相对于参考系的值。

// Each luma and chroma block are 8x8 pixels
    for(y=0; y<8; y++)
    {
       for (x=0; x<8; x++)
       {
          NewPixel(x,y) = Prediction(x,y) + RefPixel(x+motion_vector_x, y+motion_vector_y)
       }
    }

使用MPEG1,你有I,P和B帧。 I帧完全是帧内编码的(例如类似于JPEG),没有引用其他帧。 P帧用来自前一帧(I或P)的预测编码。 B帧用来自两个方向(前一帧和下一帧)的预测进行编码。 B帧处理使得视频播放器稍微复杂一些,因为它可能引用下一帧,因此每帧具有序列号,B帧将使序列成为非线性。换句话说,您的视频解码器需要在解码流(前一个,当前一个和下一个)时保持可能的3帧。