H264-帧间预测
序
帧间预测首先通过运动估计(me)找到最佳匹配块,并计算出运动矢量(mv)。然后将最佳匹配块数据和当前块数据相减,得到数据残差。
在编码中,由于运动矢量mv太多,不能直接对mv进行编码。需要对mv进行预测,方法就是通过相邻块的mv,得到当前块的预测mv,即mvp。再将mvp与mv相减,即可得到mv的残差mvd。最终将mvd进行编码。
最后将mvd和数据残差进行编码压缩传输。
运动估计
运动估计主要是用搜索算法,在参考帧中搜索最佳匹配块。
搜索算法
1 全搜索算法
假设搜索范围为16x16,则需要搜索(16x2+1) x (16x2+1)个位置。
若搜索范围为w x h,则需要搜索(w x 2 + 1) x (h x 2 + 1)个位置。
2 快速搜索算法
3 亚像素搜索算法
在视频的运动中,不可能总是以整像素(8位)为单位进行运动。在计算机的角度,图像最佳匹配块搜索其实就是最佳匹配二进制搜索,不可能每次都是8位对齐的。
B帧预测模式
双向预测
- 在List0和List1中的m+n中搜索,分别得到两个方向的MV1和MV2.
- 利用相邻的宏块分别计算同方向的MVp1和MVp2.
- 用MV-MVp得到MVD进行编码传输。
在得到MV和参考帧后,就可以计算预测像素值,一般预测值是两个参考帧像素值的平均值。最后将实际像素值减去预测像素值就得到待编码的像素差值。
直接预测
直接预测模式不需要传输MVD和参考帧号,MV和参考帧号可以直接通过List0和list1计算出来。只有16x16、8x8能用直接预测