运动补偿 运动补偿是一种描述相邻帧相邻在这里表示在编码关系上相邻在播放顺序上两帧未必相邻差别的方法具体来说是描述前面一帧相邻在这里表示在编码关系上的前面在播放顺序上未必在当前帧前面的每个小块怎样移动到当前帧中的某个位置去这种方法经常被视频压缩视频编解码器用来减少视频序列中的时域冗余它也可以用来进行去交织deinterlacing以及运动插值motion interpolation的操作 一个视频序列包含一定数量的图片通常称为帧frame相邻的图片通常很相似包含了很多冗余使用运动补偿的目的是通过消除这种冗余来提高压缩比 最早的运动补偿的设计只是简单的从当前帧中减去参考帧从而得到通常含有较少能量或者称为信息的残差从而可以用较低的码率进行编码解码器可以通过简单的加法完全恢复编码帧 一个稍微复杂一点的设计是估计一下整帧场景的移动和场景中物体的移动并将这些运动通过一定的参数编码到码流中去这样预测帧上的像素值就是由参考帧上具有一定位移的相应像素值而生成的这样的方法比简单的相减可以获得能量更小的残差从而获得更好的压缩比当然用来描述运动的参数不能在码流中占据太大的部分否则就会抵消复杂的运动估计带来的好处 通常图像帧是一组一组进行处理的每组的第一帧通常是第一帧在编码的时候不使用运动估计的办法这种帧称为帧内编码帧Intra frame或者I帧该组中的其它帧使用帧间编码帧Inter frame通常是P帧这种编码方式通常被称为IPPPP表示编码的时候第一帧是I帧其它帧是P帧 在进行预测的时候不仅仅可以从过去的帧来预测当前帧还可以使用未来的帧来预测当前帧当然在编码的时候未来的帧必须比当前帧更早的编码也就是说编码的顺序和播放的顺序是不同的通常这样的当前帧是使用过去和未来的I帧或者P帧同时进行预测被称为双向预测帧即B帧这种编码方式的编码顺序的一个例子为IBBPBBPBBPBB