HTM-16.2代码(2)——帧间预测(理论)

来源:互联网 发布:surge for mac 教程 编辑:程序博客网 时间:2024/06/05 10:06

一、帧间预测,利用相邻图像中已经编码的像素生成预测值

二、生成预测值之后,和原始的值相减,得到残差,后续的变换量化等操作就是基于残差进行处理的

三、主要原理是,为当前的PU在参考帧上寻找一个最佳的匹配块,这个找到的匹配块就可以当作预测值,这个过程就是运动估计。但是注意,运动估计不是一步就位的,它需要在整像素的基础上进行运动补偿(即进行插值),然后进行1/2、1/4像素精度的运动估计,最后得到最优的匹配块

四、一些概念
1、ME是运动估计
2、MC是运动补偿
3、MV是预测块到当前块的向量
4、MVD是MV的残差,很多时候,当前块的MV可以从相邻块的MV中预测出来称为MVp,因此为了更加有效的压缩,我们让MVD=MVc-MVp,其中MVc是实际计算出来的MV
5、有两类的帧间预测:
(1)前向参考,P帧只使用前向参考
(2)后向参考,B帧使用前向参考和后向参考
6、运动估计的判定准则:MSE、MAD、MPC、SAD、SATD等
7、插值操作是针对参考像素块进行的
8、加权预测,加权预测表示预测像素来自多个参考帧而不是单一参考帧,通过某一个权值分配公式计算加权像素值,然后在这些加权像素值块上进行运动估计
9、MV预测,很多时候我们需要使用利用相邻块的MV来预测当前块的MV,得到的叫做预测MV(即MVp),然后通过MVp来大致确定运动估计的起始点,再进过搜索,得到实际的MV

五、运动估计中常用的搜索算法
1、全搜索法(计算代价太高,很少使用)
2、二维对数搜索法、三步搜索法、TZSearch等方法(相对于全搜索法来说,这些都是快速搜索法)

六、HEVC中的运动估计(以HM中的TZSearch搜索算法为例子,其他的算法可能大致相似)
1、确定搜索起点。利用AMVP(高级的MV预测技术)确定搜索起点。AMVP选出的候选MV有多个,选择其中代价最小的一个最为预测MV,并作为搜索的起始点
2、以步长1开始,按照菱形或者正方形搜索模板,在搜索范围内进行搜索,然后按照2的指数次幂的方式递增步长,然后选出率失真代价最优的点作为搜索结果
3、以2得到的搜索结果作为搜素起始点,以步长1开始,在该点的周围做两点搜索,目的是补充搜索最优点周围尚未搜索的点(从这一步开始可能就需要进行运动补偿了)
4、如果3得到的最优结果对应额步长大于某个阈值,那么以这个点位中心,在一定的范围内做全搜索,然后再次选择最优点
5、以4得到的最优点为新的起始点,重复2~4,细化搜索,当相邻两次的搜索得到的最优点一致的时候停止搜索

七、帧间预测的两种方式
1、merge模式。merge模式是一种编码模式,它直接利用时域或空域上相邻的PU的预测信息,不存在MVD。需要建立一个merge候选列表,共有5个候选MV。
(1)空域候选列表的建立。假设当前PU的左下角是A0,左侧是A1,左上角是B2,上方是B1,右上角是B0。空域最多只能提供4个候选MV,候选的顺序是A1->B1->B0->A0->B2,优先处理前面四个,如果前面四个当中有一个或者多个不存在,那么才处理B2。
(2)时域候选列表的建立。与空域情况不同,时域候选列表不能直接使用候选块的运动信息,需要根据当前帧和参考帧之间的位置关系做相应的伸缩调整。时域最多只能提供一个候选MV,这就意味着,如果处理完空域和时域之后,如果列表中的MV数量还没有达到五个,那么需要填充零向量
(3)B slice的PU有点特别。由于存在两个MV,因此MV候选列表也要提供两个预测MV。HEVC将MV候选列表(通过步骤1和2建立的)中的前4个候选MV进行两两组合,产生了用于B slice的组合列表
(4)最后从候选列表中选出最优的MV(通过率失真优化的方式),然后对该MV在列表中的索引进行编码。
2、非merge模式(即使用AMVP)。AMVP只是一种MV的预测技术,得到预测的MV之后还需要进行运动估计等步骤,存在MVD。同样需要建立一个MV的候选列表,列表的长度是2。
(1)空域列表的建立。假设当前PU的左下角是A0,左侧是A1,左上角是B2,上方是B1,右上角是B0。当前PU的左侧和上方需要各产生一个候选MV。对于左侧的候选MV的筛选,处理顺序是A0->A1->scaled A0->scaled A1;对上侧的候选MV的筛选,处理的顺序是B0->B1->B2(如果这几个都不存在,那么继续处理-> scaled B0-> scaled B2)。对于左侧(上方)来说,只要找到一个候选MV,就不继续处理后面的候选者了
(2)时域列表的建立。和merge模式的时域列表建立类似。同样,如果此时候选列表的候选MV的数量还不足2个,那么需要填充零向量。

八、加权预测(带权预测)
1、在某些情况下(定义了某个标志),可能会需要用到加权预测
2、加权预测就是利用多个参考帧的像素值来计算需要使用的参考像素的值,然后再这个计算之后的参考像素块中进行运动估计
3、HEVC使用两种加权预测方法:默认的加权预测和explicit加权预测
4、默认加权预测
(1)如果只使用list0,那么预测的像素值计算如下:pred=(sample+32)>>6
(2)如果只使用list1,那么预测的像素值计算如下:pred=(sample+32)>>6
(3)如果使用list1和list0,那么预测的像素值计算如下:pred=(sample0+sample1+64)>>7
5、explicit加权预测。使用了权值w(w由编码器决定,且需要传送至解码器端)和offset(表示当前帧和参考帧的相对偏移量)
(1)如果只使用list0,那么预测的像素值计算如下:pred=((sample*w+32)>>6)+offset0
(2)如果只使用list1,那么预测的像素值计算如下:pred=((sample*w+32)>>6)+offset1
(3)如果使用list1和list0,那么预测的像素值计算如下:pred=(sample0*w0 + sample1*w1 + ((offset0 + offset1 + 1)<<6)) >> 7

九、一种特殊的编码模式PCM
1、在该模式下,编码器直接传输一个CU的像素值,而不经过预测、变换等其他操作
2、对于某一些特殊的情况,例如图像的内容及其不规则或者量化参数非常小的时,该模式会使用,PCM还适用于无损编码

0 0