VVC/VTM的編碼結構和塊劃分

本文參考了JVET-J1002:Algorithm description for Versatile Video Coding and Test Model 1 (VTM 1)

VVC的編碼結構

VVC的編碼結構和之前的標準相似,VVC有基於塊的混合編碼結構,包含了幀內、幀間的預測編碼,以及變換編碼和熵編碼,下圖展示了VVC編碼的流程 。


VVC的編碼結構

VVC塊劃分

圖像將被劃分成一系列的CTUs(coding tree units),在這裏的CTU的概念和HEVC中是一致的,其中最大尺寸的亮度塊在CTU中的尺寸是128×128,而最大的亮度變換塊尺寸是64×64,一個CTU劃分的例子:


這裏寫圖片描述

使用樹形結構對CTUs進行劃分

在HEVC中,編碼樹將會通過使用表示爲編碼樹的四叉樹結構將CTU分成CUs,以適應各種不同的局部特徵。在葉子CU level使用幀間或幀內預測來決定是否對當前的圖像區域進行編碼。根據PU的劃分類型每一個葉子CU可以進一步被劃分成一個、兩個或四個PUs。在一個PU內部,應用相同的預測過程,並且基於PU將相關信息發送到解碼器。 在通過應用基於PU分裂類型的預測處理獲得殘餘塊之後,可以根據類似於CU的編碼樹的另一個四叉樹結構將葉CU劃分爲變換單元(TU)。 HEVC結構的關鍵特徵之一是它具有多個劃分的概念,包括CU,PU和TU。
在VVC中,使用二叉樹和三叉樹的嵌套多類型樹的四叉樹分割結構取代了多個分區單元類型的概念,它消除了CU,PU和TU概念之間的鴻溝,除了對於最大變換長度尺寸太大的CU的需要,並且支持CU分區形狀的更大靈活性。
首先,一個CTU被劃分爲四叉樹結構,隨後四叉樹的葉子節點將被劃分爲多種類型的結構。如下圖所示,有四種不同的劃分類型:


這裏寫圖片描述

  • vertical binary splitting(SPLIT_BT_VER)
  • horizontal binary splitting(SPLIT_BT_HOR)
  • vertical ternary splitting(SPLIT_TT_VER)
  • horizontal ternary splitting(SPLIT_TT_HOR)

多類型的樹形結構的葉子節點被稱作爲編碼單元(CUs),並且除非CU的大小對於最大的變換長度來說太大了,否則將不再進行劃分,對當前的分割進行預測和變換操作。這就意味着,在大多數情況下,CU、PU、TU在多類型的四叉樹編碼結構中擁有相同的尺寸,例外是在當最大支持變換的長度小於CU顏色分量的寬或高時。在VTM(Versatile Test Model)中,一個CU包含了一個亮度分量CB和兩個色度CBs分量(除非視頻是單色的,僅僅擁有一個顏色分量)。

在下圖中顯示了具有嵌套多類型四叉樹編碼結構的劃分信息的信號機制。一個CTU被看作是樹的根節點,首次劃分時使用的是四叉樹劃分。每一個四叉樹編碼結構(如果足夠大的話)將被繼續嵌套的多類型樹形結構繼續劃分。在多類型的樹形結構中,第一個標誌位(mmt_split_cu_flag)將被髮送表明當前的節點是否需要繼續劃分,第二個標誌(mmt_split_cu_vertical_flag)發送以表明劃分的方向,第三個標誌位(mmt_split_cu_binary_flag)被髮送表明當前節點是被二分還是三分。基於mmt_split_cu_vertical_flag)mmt_split_cu_binary_flag的值,在下表中導出了多類型樹形結構的劃分模式。


這裏寫圖片描述

MttSplitMode mtt_split_cu_vertical_flag mtt_split_cu_binary_flag
SPLIT_TT_HOR 0 0
SPLIT_BT_HOR 0 1
SPLIT_TT_VER 1 0
SPLIT_BT_VER 1 1

在下圖中展示了一個CTU使用嵌套的多類型樹形編碼結構劃分爲多個CUs,其中加粗的邊表示的是四叉樹劃分,其他的表示的是多類型的樹形劃分。具有嵌套多類型樹劃分的四叉樹提供由CU組成的內容自適應編碼樹結構。CU的大小可能和CTU一樣大,也可能和4×4的亮度單元一樣小,對於4:2:0的採樣模式,最大的色度CB的大小爲64×64最小的色度CB的大小爲2×2
在VVC中,支持的最大的亮度TB大小是64×64,支持的最大的色度TB大小是32×32。當CB的寬或高大於小大的變換大小,CB將在水平和垂直方向被自動地劃分,以達到TB尺寸的限制。


這裏寫圖片描述

以下參數由具有嵌套多類型樹編碼樹方案的四叉樹的SPS語法元素定義和指定:

  • CTU size:四叉樹的根節點
  • MinQTSize:允許的最小的四叉樹葉子節點的尺寸
  • MaxBtSize:允許的二叉樹根節點的最大尺寸
  • MaxTtSize:允許的三叉樹根節點的最大尺寸
  • MaxMttDepth:允許的從四叉樹葉子中分割的多類型樹的最大層次深度
  • MinBtSize:允許的最小二叉樹葉子節點的尺寸
  • MinTTSize:允許的最小三叉樹葉子節點的尺寸

[Ed. (JC): Currently, MaxTtSize is set sequal to MaxBtSize, and MinTtSize is set equal to MinBtSize]

下面舉個例子:當採樣格式爲4:2:0的時,一個CTU的大小被設置爲128×128的亮度分量和64×64的色度分量,MinQTSize被設置爲16×16,MaxBtSizeMaxTtSize都被設置爲64×64,MinBtSizeMinTtSize(對於寬和高)被設置爲4×4,MaxMttDepth被設置爲4。四叉樹首先被被劃分,生成四叉樹的葉子節點,葉子節點的尺寸可能從16×16(MinQTSize)到128×128(CTU的尺寸)。如果葉子節點的大小是128×128,他將不會被劃分爲三叉樹或者二叉樹因爲MaxBtSizeMaxTtSize的值是64×64。否則的話,四叉樹的葉子節點能夠更進一步地劃分爲多種類型的樹。所以,此時的四叉樹葉子節點同樣作爲多類型樹的根節點,只是說其深度爲(mmtDepth)0。當多類型樹的深度達到了MaxMttDepth的時候,將不會被考慮繼續劃分。當多類型樹的節點的寬度和MaxBtSize相等並且等於或小於2*MinTtSize時,不考慮進一步的水平劃分。相似地,若多類型樹的節點的高度和MinBtSize相等並且小於或等於2 * MinTtSize的時候,不考慮進一步的垂直劃分。

限制多餘的CU劃分

嵌套的多類型四叉編碼樹結構提供了靈活的塊劃分方式。由於編碼劃分的多種類型,有可能不同的劃分模式最終會得到相同的編碼塊結構。所以在VVC中,一些這樣多餘的模式將被避免發生。
在下圖種展示了四叉樹分割和兩級二叉樹分割之間的重複分割模式。 如圖所示,兩級連續二叉樹分割可以產生與四叉樹分割相同的編碼塊結構。 爲了在這種情況下移除冗餘,當允許使用四叉樹分割父CU時,通過語法阻止針對第二分區的二叉樹分割。 另一方面,對於在父級別不允許四叉樹分割的情況,仍然可以使用模擬四叉樹分割的連續二叉樹分割。 更具體地說,在以下兩種情況下,允許兩級連續二叉樹分割:

  • 如果四叉樹葉子節點的塊大小和MinQTSize相等,那麼四叉樹的劃分將停止,並允許做進一步的多類型樹劃分
  • 如果多類型樹的節點深度mmtDepth大於0(指的是多類型樹的非根節點),那麼四叉樹劃分將不被允許


這裏寫圖片描述

在下圖示出了二叉樹分裂和三元樹分裂的冗餘分裂模式。在一個方向上的兩級連續二進制分裂可以具有與三元樹分割相同的編碼塊結構,隨後是中央分區的二叉樹分割。 在這種情況下,通過語法防止三元樹分割的中央分區的二叉樹分割(在給定方向上)。 此限制適用於所有圖片中的CU。


這裏寫圖片描述

在下圖中,當相同的多類型樹分割模式應用二叉樹分割和三元樹分割的不同排序時,發生冗餘。 在這種情況下,語法阻止了爲第二個分區分割的相應三元樹。 此限制適用於P幀和B幀的CU。


這裏寫圖片描述

當如上所述禁止某些分割時,修改相應語法元素的信令以考慮禁止的情況。 例如,當識別出上圖中的情況時(即,在某個方向上禁止對CU進行三元分割)時,不用信號通知指定分割是二進制分割還是三元分割的語法元素mtt_split_cu_binary_flag,而是由解碼器推斷爲等於1。

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