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的推导可以用下图表示:

在这里插入图片描述

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