上一篇提到的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模式下的候選列表。
發現上一篇和這一篇主要是說候選表的建立(挑學習好的抄作業,不能老嗑一個人抄,還專門做了個小本本記下名字,用到就瞅瞅看這次翻誰的牌子>~<),涉及的不是太多,路還很長,要拼命跑呀。
回首向來瀟灑處,也無風雨也無晴!