H.266/VVC相關技術學習筆記24:幀間預測中的TPM技術(Triangle partition Mode)

最近大概學習了一下Merge模式中另一個比較重要的技術:Triangle partition Mode(TPM)。在當前的VTM6.0的版本中,三角預測模式支持三角形的劃分模式進行幀間預測。三角形預測模式只適用於8x8或者更大的編碼塊。三角預測模式是一種Merge模式,還有其他的Merge模式包括regular_Merge模式、MMVD_Merge模式、CIIP模式和Subblock_Merge(Affine)模式。接下來主要介紹一下在目前最新的VVC版本中三角預測模式的技術細節。從原理和代碼兩方面入手,關於該模式的技術原理主要在本篇博客中講解,而關於該技術在VTM6.0中的代碼詳情請參考另一篇博客H.266/VVC代碼學習筆記15:VTM6.0中的xCheckRDCostMergeTriangle2Nx2N()函數

當使用三角形預測模式時,一個CU被均勻地分割成兩個三角形的分區,使用對角分割或反對角分割,如下圖所示。然後每個分區都只允許單向預測,因此每個分區必須都要分配一個單向的預測MV以及其對應的參考幀索引,兩個分區根據各自分區的單向預測MV,運動補償出各自分區的預測值(注意:這裏的各自分區的預測值的範圍不是單單指一個三角形的範圍,而是整個CU的範圍),利用CU中各個三角形分區的預測值,在三角線分割線的周圍通過自適應的權值加權融合出新的預測值,同時保持各自分區的預測值不變,最終得到整個CU的三角預測值;這裏我們需要注意的是,三角預測模式的運動場是以4×4的單元爲基礎存儲的。也就是說將整個CU劃分爲一個接一個的4×4的小塊,取每個小塊的中心位置的MV作爲整個4×4小塊的MV。
在這裏插入圖片描述

使用了三角預測模式的CU的預測值總共可以分爲兩個部分:
①非加權區:分割線周圍以外的預測區,包括分區一的單向預測值以及分區二的單向預測值。
②加權區:分割線周圍一定區域內的預測值是根據兩個分區的單向預測值根據不同的權重加權後得到的(因此也可以看做分割線周圍的區域是雙向MV預測區域)

上面就是三角形預測的基本原理,但是有三個問題有待於解決:
(1)各自分區的單向MV是怎麼來的?
(2)分割線周圍的加權區具體是怎麼自適應選擇權重進行加權的?色度和亮度塊的權重一樣麼?
(3)三角形預測區的4×4小塊中的MV到底是怎麼存儲的?哪些塊存儲單向MV,哪些塊存儲雙向MV?

問題一解答:

每個三角分區的單向MV是通過一個專屬於三角預測模式的Merge候選列表中選取的,關於該三角單向Merge列表的構造是在常規Merge列表的基礎上構造的。其構造方式如下:
用於三角預測的單向Merge列表是根據常規的Merge預測過程構造出的Merge候選列表中派生出來,派生的規則如下表所示。將n表示爲三角形單向預測候選列表中單向預測運動的索引。利用第n個擴展Merge候選項的LX運動矢量作爲三角形劃分模式的第n個單預測運動矢量,其中利用X=n的奇偶性來判斷選擇前向MV還是後向MV,若爲偶數,則選前向候選MV;若爲奇數,則選後向候選MV。這些選中的MV在下表中用“x”標記。當擴展Merge候選項n對應的LX運動矢量不存在時,用同一候選項的L(1-X)MV代替三角形劃分模式的單預測運動向量。該過程的VTM6.0代碼參考博客H.266/VVC代碼學習筆記16:VTM6.0中的getTriangleMergeCandidates()函數
在這裏插入圖片描述
得到候選列表後,兩個三角形分區的單向MV以及兩種分割方式做排列組合(共652=60種),
再使用這三個參數分割方式、P1預測塊的MV、P2預測塊的MV權重來對邊界(整個CU)進行運動補償。

問題二解答:

在得到各自三角分區的單向預測值之後,需要沿着三角形分區的邊緣處進行加權補償
加權融合過程中使用的權重如下:
① 對於亮度分區的權重爲:{7/8, 6/8, 5/8, 4/8, 3/8, 2/8, 1/8}
② 對於色度分區的權重爲:{6/8, 4/8, 2/8}
如下圖所示,中間的灰色區域代表加權區域,兩邊的黑色以及白色區域代表非加權區域:
該過程的VTM6.0代碼參考博客H.266/VVC代碼學習筆記17:VTM6.0中的xWeightedTriangleBlk()函數
在這裏插入圖片描述

問題三解答:

使用三角預測模式的CU中的運動場是以三角形劃分模式編碼的CU的MV存儲在4x4單元中(即每個4x4的單元共用中心位置的MV)。根據每個4x4單元的位置,存儲單向預測或雙向預測MV。Mv1和Mv2分別表示爲分區1和分區2的單預測MV。如果4x4單元位於上圖示例中所示的非加權區域,則爲該4x4單元存儲Mv1或Mv2。否則,如果4x4單元位於加權區域,則存儲一個雙向預測MV。由Mv1和Mv2推導出該雙向預測MV,其過程如下:
①MV1和MV2的參考列表不同,直接結合
②MV1和MV2的參考列表相同(假如都來自L0):
a. 如果MV2的參考幀在L1列表中存在,將MV2縮放到L1的對應參考幀上,並直接結合;
b. 如果MV1的參考幀在L1列表中存在,將MV1縮放到L1的對應參考幀上,並直接結合;
c. 其他情況的話,只使用MV1
對角線上的4×4塊的雙向MV的推導可以用下圖表示:

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章