帧间预测merge、skip、PCM模式

 

  • merge模式 构建merge候选列表,传递mergeIdx和coeff数据,并根据mergeindex的MV进行运动补偿,对pred和orig的像素求残差并传送.AMVP就是需要预测出MV然后与实际运动估计得到的MV求差得到MVD并对MVD以及预测残差编码,但是merge是直接使用原来的MV,MVD为零,但是即使为零也需要编码,而如果进入了skip,那么就不对MVD编码。

  • skip模式作为merge模式的特例,只传递mergeIdx,相当于直接传输运动矢量即可(相当于前一帧的某个块不做任何改变直接平移到下一帧),不需要传输MVD以及pred和orig的像素残差.

  • PCM模式直接将原始像素信息直接传递

  • TransformSkip模式,是对预测的残差像素resi不进行变换操作,直接传送残差像素

 

 

  • 如何判断是否使用skip模式?

那么在编码时怎样判断当前块可以是skip块呢? 没什么好办法,只能先假定它就是,然后算一下参差是否为0。当然你可以用量化后的数值计算,这样会在一定程度上增大找到sikp的概率。

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

skip类型块(或宏块)没有运动矢量差,但是有残差,只是在编码的时候扔掉了 对于残差的处理, 在rdo和非rdo下的处理是不一样的:

(1) 在非rdo下,需要对残差进行变化量化,若16x16为最终模式且cbp为0(或者有少量的4x4block为非零),那么该宏块就是skip模式,简单的说,在非rdo情况下,skip模式是16x16模式的一个特殊情况 (2) 在rdo情况下,不需要对残差进行变化量化,直接对skip模式计算rdcost(skip的码率即编码所占的比特数,虽然不对残差和矢量差进行编码,但是编码比特数也是不为零的, 比如模式所占的比特数、是宏块内第几个skip块等语法元素信息),通过判断rdcost是否最小,来判定宏块是否为skip模式,就是说,在rdo情况下,skip是独立的一种模式 补充一点关于B宏块的direct16x16模式和skip模式选择。在JM中这两种模式都对应0。因此无法分开成两种模式去计算rdcost。即使是RDO开的情况下,也是计算残差变换量化。。。最后根据cbp是否为0 决定是direct16x16模式还是skip模式。

参考:

H.264中的一些问题总结 https://www.cnblogs.com/xkfz007/archive/2012/07/31/2616892.html

merge、skip、PCM、TransformSkip的区别https://blog.csdn.net/gq0323/article/details/103737602

HEVC中skip模式和merge模式的区别https://blog.csdn.net/VioletHan7/article/details/80993021

skip,merge,inter在HM代码里的理解https://blog.csdn.net/nbl_yc/article/details/102834554

 

Logo

这里是“一人公司”的成长家园。我们提供从产品曝光、技术变现到法律财税的全栈内容,并连接云服务、办公空间等稀缺资源,助你专注创造,无忧运营。

更多推荐