Skip宏块与Direct预测模式浅析

B_Skip类型宏块(200503版标准,表7-14最后一行):          无像素残差,无 运动矢量 残差(MVD)。 解码 时,通过Direct预测模式( 时间 或空间)计算出前、后向MV后,直接利用前、后向MV得到像素预测值。像素重构值=像素预测值        

B_Direct_16*16类型宏块(200503版标准,表7-14第一行):有像素残差,无运动矢量残差(MVD)。解码时,通过Direct预测模式(时间或空间)计算出前、后向MV后,利用前、后向MV得到像素预测值。然后,像素重构值=像素预测值+像素残差解码值       

P_Skip类型宏块(200503版标准,表7-13最后一行):          也就是COPY宏块。无像素残差,无运动矢量残差(MVD)。直接利用预测MV得到像素预测值。像素重构值=像素预测值        



【特别说明】:
1、有残差就有CBP(表示残差 编码 状态,详见BBS中我的帖子“ CBP详解 ”),反过来没有残差当然就没有CBP;       
2、请一定不要把 Direct 类型宏块、Skip 类型宏块、Direct 预测模式这三个混淆了。B_Skip 类型宏块(大小为 16*16)、B_Direct_8*8 类型块(大小为 8*8)和B_Direct 类型宏块(大小为 16*16)都采用的是 Direct 预测模式;
3、关于时间和空间的Direct 预测模式,请大家参考标准 文档 的8.4.1.2小节;
4、与本论坛另一篇帖子“ 请问Skipped Macroblock是什么意思?  ”参照学习;

5、我是跟踪JM86解码过程得出以上结论的。如果某些部分有点错误,请大家指正。



-----------------------------------------------------------------------------------------------------

如果满足以下三个条件则将宏块按 Skip 类型进行编码:
(1)最佳模式选择为Inter16×16;
(2)MC得到的最终运动矢量等于预测运动矢量,即运动矢量的残差为0;
(3)变换系数均被量化为0。


-----------------------------------------------------------------------------------------------------

skip类型块(或宏块)没有运动矢量差,但是有残差,只是在编码的时候扔掉了
对于残差的处理
在rdo和非rdo下的处理是不一样的
在非rdo下,需要对残差进行变化量化,若16x16为最终模式且cbp为0(或者有少量的4x4block为非零),那么该宏块就是skip模式,简单的说,在非rdo情况下,skip模式是16x16模式的一个特殊情况
在rdo情况下,不需要对残差进行变化量化,直接对skip模式计算rdcost(skip的码率即编码所占的比特数,虽然不对残差和矢量差进行编码,但是编码比特数也是不为零的,比如模式所占的比特数、是宏块内第几个skip块等语法元素信息),通过判断rdcost是否最小,来判定宏块是否为skip模式,就是说,在rdo情况下,skip是独立的一种模式


-----------------------------------------------------------------------------------------------------

Skipped Macroblock 是宏块类型,Direct Prdeiction 是宏块的预测方式
Skipped Macroblock 顾名思义就是跳过不编码的宏块,那么在解码端如何重构这个宏块呢?这就有两种选择:
1、采用 Direct 方式(这是一种特殊的预测方式)先预测出其 MV,后面的处理就跟一般的帧间宏块类似了(根据 MV 获取参考图像,再进行插值重构);
2、不采用 Direct 方式进行预测,而直接 copy 参考宏块。

第一种选择正是 B 片中的 Skip 宏块所采取的方式,同时又分为空间和时间 Direct 预测方式
第二种选择正是 P 片中的 Skip 宏块所采用的方式,也就是直接 copy 参考宏块

现在应该明白 Skip 与 Direct 的联系了吧?但要注意的是 B 片中有一种类型的宏块:B_Direct_16*16,它很特殊,它的名字里有“Direct”这个单词 ,它的预测方式也采用的 Direct 方式。这种类型的宏块即有 B 片中的 Skip 宏块的特性(MV 采用 Direct 预测方式得到),同时又有一般帧间宏块的特性(有像素残差,Skip 宏块是没有像素残差的)

-----------------------------------------------------------------------------------------------------

什么是半像素

所谓整像素是编码有效像素。即物理扫描可能一行扫描300个像素点,但是由于各种编码分辨率的不同可以取不同的像素为整像素。比如:

红色点就是输入图像上的点,而蓝色点是利用两个红色点计算得到,黑色点是利用红色和蓝色计算得到。蓝色就是 1/2 像素点(即半像素点),黑色就是 1/4 像素点,他们都是虚拟点,并不实际存在。因为有时候用这些虚拟点进行运动估计会得到比红色点更小的残差,所以就要把他们插出来,并对他们做运动估计。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值