上一篇提到的merge模式下直接使用MVP作为MV,AMVP模式多了一个MVD的计算,当然并不仅仅是这点,下面看AMVP实现的理论流程,我尽力还原我学习的思维历程。
参考西电杨老师的书《H.265/HEVC原理、标准与实现》,学习HEVC的手头备一本很方便。
AMVP(Advanced Motion Vector Prediction)高级运动向量预测,类似merge,先建立候选列表,建立列表之后从中选出最优的MV,并对MV进行差分编码(就是与真正的MV对比求差,保存差值MVD)。
我一开始的疑惑是,你参考其他的MV,其他的MV参考另一个的MV,那最早的一个MV怎么求的?还有那个真正的MV是怎么求的?是用默认值吗,默认值怎么想都不合理啊。这个问题还与后面运动估计相关,H.265中运动估计用到的起始搜索点和MVP是由AMVP确定的,到了运动估计我相信你也会有疑问,那最早那一帧的第一个搜索点和MVP是怎么确定的?这问题先保留,一步一步往下来探索。
AMVP空域:
图一、候选PU
AMVP的候选列表建立的繁琐一点,大小也是5,不够5个就补零,列表填充顺序:左面,A0->A1->scaledA0->scaledA1,上面三个,B0->B1->B2(->scaledB0->scaledB1->scaledB2),按顺序哪个能用用哪个。
能用的标准:①参考的PU存在
②参考的PU不是帧内预测模式(想用也没办法,它没MV)
③参考的PU有MV,但它的MV参考的那帧图像和当前PU参考的图像不是一幅,它的MV不能直接用,而是使用比例伸缩后得到scaledMV(是不是觉得比例伸缩还挺好使),所以一个PU的MV与scaledMV同时只存在一个(个人理解)。
④上面三个参考PU,只有在左侧不用时才会选它们作为备选(代码中可能会有出入,不知道会不会一下子都填好)。
AMVP时域:
时域列表的建立与merge相同,参考同位PU并进行MV的伸缩(同位PU是怎么寻找的?)。
AMVP最终列表:
参考merge,流程如下:
图二、AMVP候选列表建立
先建空域列表、时域列表,从空域选两个、时域选一个共三个,三个里有相同的MV就合并,组成一个新表,新表里其余都填(0,0),最后只保留前两个作为AMVP模式下的候选列表。
发现上一篇和这一篇主要是说候选表的建立(挑学习好的抄作业,不能老嗑一个人抄,还专门做了个小本本记下名字,用到就瞅瞅看这次翻谁的牌子>~<),涉及的不是太多,路还很长,要拼命跑呀。
回首向来潇洒处,也无风雨也无晴!