H264---skip宏块与dierct预测模式解析

1、宏块类型

1.1、Skipped宏块(无像素残差,无运动矢量残差MVD, 无需传送)采用direct预测模式

像素重构值=像素预测值
MV=MVp (MVD=0)

B_skip的重构方式:Direct 方式(分为空间和时间 Direct 预测方式)

P_skip宏块重构方式:直接copy参考宏块

1.2、Direct 宏块(无MVD但是带残差)

B_Direct_88 类型块(大小为 88)和B_Direct 类型宏块(大小为 16*16)都采用的是 Direct 预测模式

2、宏块预测类型

2.1、Direct Prdeiction 宏块的预测方式

1,在图像序列里确实存在这样的情况:当前MB(或者submb)的数据和以往图像中的某一块完全一样(主要针对视频中的运动物体),所以从理论上完全可以不传输这一块的数据,而有以往的数据。
2.那么这个以往的数据采用哪一帧呢?显然对于运动物体采用紧邻那一帧最好(至少mv最小的可能性大)。
3.采用哪一块呢? 这个有一点麻烦,但是从逻辑上讲如果运动物体的边缘确定了,中间的块和边缘的块的mv应该一致,所以从临近块中得到mv就是很自然的想法了。

以上就是P帧SIKP的想法。当然按照这个想法做,不是所有的运动物体都能很好的找到匹配块,但是视频编码考虑的是效果和算法的平衡。当一个skip宏块在比特流中被申明,就不必为这个宏块传输数据了。解码器会为这个跳过宏块计算向量和利用来自list0的首参考帧的MC预 测去重构这个宏块。普通的(非skip)帧间预测, 先得到MVPRED, 然后搜索得到最佳匹配块. (判断最佳的方法…是可能使用MAD作为判断标准…) 然后把模式, 运动残差(MVD), CBP, 和像素残差一起编码传输 (或者还有其他一些flags)

那么在编码时怎样判断当前块可以是skip块呢? 没什么好办法,只能先假定它就是,然后算一下参差是否为0。当然你可以用量化后的数值计算,这样会在一定程度上增大找到sikp的概率。
如果满足以下三个条件则将宏块按 Skip 类型进行编码:
(1)最佳模式选择为Inter16×16;
(2)MC得到的最终运动矢量等于预测运动矢量,即运动矢量的残差为0;
(3)变换系数均被量化为0。

猜你喜欢

转载自blog.csdn.net/qq_42024067/article/details/107747586