帧间预测的基本原理:利用相邻的已经编码的图像为当前编码块寻找最佳匹配块,把这个最佳匹配块作为当前块的预测值,然后将预测值和当前块的原始像素值相减,得到当前块的残差值,后续的变换、量化等操作都是基于残差值进行的。
运动估计:利用预测的运动矢量为当前编码块在参考帧上寻找一个最佳匹配块作为当前块的预测值,并得到残差值的过程
常见的一些有关帧间预测的缩略词:
帧间预测有两种参考方式:
注意点:帧间预测中的插值操作是针对所选择的参考像素块进行的
关于运动估计中常用的搜索算法,可以看公众号中图像通信基础知识部分的运动估计章节
HEVC中运动估计确定参考帧的搜索起点:利用AMVP(高级的MV预测技术)确定当前块在参考帧中的搜索起点,AMVP选出的候选MV有多个,选择其中率失真代价最小的一个作为预测的MV,并以此MV确定搜索的起始点
帧间预测的量两种模式:
Merg模式:merg模式是一种编码模式,它直接利用时域或空域上相邻PU的预测信息,不存在MVD(运动矢量的残差)。但它需要建立一个merge候选列表,这个候选列表中总共有5种候选的MV
空域候选列表的建立:假设当前PU的左下角是A0,左侧是A1,左上角是B2,上方是B1,右上角是B0。空域最多只能提供4个候选列表,候选列表的选择先后顺序是A1>B1>B0>A0>B2,优先处理前面4个,当前面4个当中有1个或者多个不存在时,才对B2进行处理
时域候选列表的建立:与空域不同,时域候选列表不能直接使用候选块的运动信息,需要根据当前帧和参考帧之间的位置关系做相应的伸缩调整。时域最多只能提供一个候选MV,这就可能导致,当时域和空域的候选列表都建立了以后,整个候选列表中的个数不满5个,这种情况下用零向量进行填充
最后从MV候选列表中通过率失真优化选择出最优的MV,然后对该MV在候选列表中的索引进行编码
注意点:B Slice中的PU存在不同点,这里面的PU存在两个MV,因此MV候选列表需要提供两个预测MV。HEVC中提供的方法是,将按照上述方法建立的MV候选列表中的前4个候选MV进行两两组合,得到用于B Slice中PU的MV组合候选类表
非Merge模式:这种模式使用AMVP(高级的MV预测技术),得到预测MV之后还要进行运动估计等步骤,存在MVD(运动矢量差),这种模式同样需要建立一个候选列表,列表总MV的个数为2
空域列表的建立:假设当前PU的左下角是A0,左侧是A1,左上角是B2,上方是B1,右上角是B0。当前PU的左侧和上方需要个产生一个候选的MV,对于左侧和上方而言,只要找到了一个候选的MV就不再对其他候选者进行处理了。处理的顺序是左侧A0>A1,上方B0>B1>B2
时域列表的建立:非Merge模式下的时域列表建立和Merge模式相似。同样,如果当前候选列表的候选MV的数量不足两个,则用零向量进行填充。
最后从MV的候选列表中通过率失真优化的方式,选择最优的预测MV
总结:Merge模式是建立一个MV候选列表,然后希望从候选列表中选出一个MV可以直接代替当前预测块的MV,这样在编码是就可以时直接编码MV在候选列表中的索引就可以,同时直接使用MV确定匹配块,得到块的残差值,没有用到运动估计。但如果候选列表中的MV进过计算之后发现都不满足要求,则进入非Merge模式,即AMVP模式。AMVP模式也需要建立一个候选列表,但它的候选列表元素元素个数为2,并且它不直接编码列表的索引,而是编码运动矢量差MVD(当前搜索到的最佳MV和列表中选择用来确定搜索起点的MV的差值),需要用到AMVP确定的预测MV值确定运动估计的搜索起点。
加权预测详解:
背景:MV的作用是去模拟一个块的运动方向,但有的时候物体发生了变化并不一定代表它发生了运动,也有可能是因为物体的颜色发生变化了。当所有像素的做了一个整体的变化的时候,可以用加权预测来获得更好的预测效果。
当前块的预测像素值来自多个参考帧,而不是一个参考帧,通过某个权值分配公式对预测像素进行加权计算,然后在这些加权像素块上进行运动估计
HEVC使用两种加权预测方法:默认的加权预测和explicit加权预测
默认的加权预测:
P r e d = ( s a m p l e + 32 ) > > 6 Pred=\left( sample+32 \right) >>6 Pred=(sample+32)>>6
P r e d = ( s a m p l e + 32 ) > > 6 Pred=\left( sample+32 \right) >>6 Pred=(sample+32)>>6
P r e d = ( s a m p l e 0 + s a m p l e 1 + 64 ) > > 7 Pred=\left( sample0+sample1+64 \right) >>7 Pred=(sample0+sample1+64)>>7
explicit加权预测:区别在于使用了权值w(w的值由编码器决定,并且需要传送至解码端)和offset(表示当前帧和参考帧的相对偏移量)
P r e d = ( ( s a m p l e ∗ w + 32 ) > > 6 ) + o f f s e t 0 Pred=\left( \left( sample*w+32 \right) >>6 \right) +offset0 Pred=((sample∗w+32)>>6)+offset0
P r e d = ( ( s a m p l e ∗ w + 32 ) > > 6 ) + o f f s e t 1 Pred=\left( \left( sample*w+32 \right) >>6 \right) +offset1 Pred=((sample∗w+32)>>6)+offset1
P r e d = ( s a m p l e 0 ∗ w 0 + s a m p l e 1 ∗ w 1 + ( ( o f f s e t 0 + o f f s e t 1 + 1 ) < < 6 ) ) > > 7 Pred=\left( sample0*w_0+sample1*w_1+\left( \left( offset0+offset1+1 \right) <<6 \right) \right) >>7 Pred=(sample0∗w0+sample1∗w1+((offset0+offset1+1)<<6))>>7
一些特殊的编码模式:
Skip模式:Skip模式只存在于帧间预测时,即B帧和I帧,Skip模式下,一个CU的大部分语法都不需要编码。一个CU是否为Skip模式取决于以下三种情况:
编码模式PCM:在该模式下,编码器会直接传输一个CU的像素值,而不经过预测、变换、量化等步骤。对于一些特殊情况,例如图像的内容极其的不规则或者量化的参数非常的小,该模式会被启用。
更多关于视频编码的知识和资源,更精致的文章排版,欢迎关注博主微信公众号,一起交流、学习、进步!!!