1.QTBT块划分结构

       在HEVC里,使用定义为编码树的四叉树结构将一个CTU划分为CUs,以适应不同的局部特征。在CU层决定是否使用帧内或者帧间预测去编码图像区域。每个CU按照PU分割类型都能被进一步划分成1个,2个或4个PUs。在一个PU里面,应用相同的预测过程,相关的信息被发送到解码端。通过基于PU分割类型应用预测过程去获得残差块之后,一个CU可以按照另一个类似于CU编码树的四叉树结构被划分为变换单元(TUs)。HEVC结构中的一个关键特征就是有很多划分概念,包括CU,PU,TU。

       四叉树加二叉树结构摈弃了多个划分类型的概念,即它摈弃了CU,PU,TU概念的分离,支持更灵活的CU划分类型。在四叉树加二叉树块结构中,一个CU可以有一个正方形或者矩形的形状。如图1所示,一个编码树单元首先用四叉树划分结构。四叉树叶节点进一步用二叉树结构划分。在二叉树分割中有两种分割类型,一种是对称水平分割,一种是对称垂直分割。二叉树叶节点称为编码单元(CU),segmentation是用于没有任何进一步划分的预测和变化过程。这意味着在四叉树加二叉树编码块结构中CU,PU和TU有相同的块大小。在JEM中,一个CU有时包含不同颜色分量的编码块,即在4:2:0色度格式P和B slice情况下一个CU包含一个亮度CB和两个色度CB,有时包含一个单一分量的一个CB,即在I slice的情况下一个CU只包含一个亮度CB或者只包含两个色度CB。

        下面的参数时为QTBT划分方案定义的:

CTU 大小:四叉树根节点的大小,

MinQTSize:允许的四叉树叶节点大小的最小值

MaxBTSize:允许的二叉树根节点大小的最大值

MaxBTDepth:允许的二叉树的最大深度

MinBTSize:允许的二叉树叶节点大小的最小值

    

        以QTBT划分结构为例,CTU的大小设置为128*128的亮度采样,和两个对应的64*64块的色度采样,MinBTSize设置成4*4,MaxBTDepth设置成4.四叉树划分首先被应用到CTU去生成四叉树叶节点。四叉树叶节点的大小从16*16到128*128。如果四叉树叶节点是128*128,他就不会被二叉树进一步划分,因为这个大小超过了MaxBTSize(即64*64)。否则,四叉树叶节点能够被二叉树进一步划分。四叉树叶节点也是二叉树的根节点,它的二叉树深度为0。当二叉树深度达到MaxBTDepth,就不会再考虑分割当二叉树节点的宽度等于MinBTSize,就不会考虑水平分割相似的,当二叉树节点的高度等于MinBTSize,就不会考虑垂直分割。二叉树的叶节点进一步用预测和变换过程来处理而不进行任何划分。在JEM中,最大的CTU大小是256*256亮度采样。

    

        图1左描述了使用QTBT进行块划分的过程,图1右描述了对应的树表示。实现表示四叉树分割,虚线表示二叉树分割。在每次分割中,二叉树的节点,发送一个标记指示哪种分割类型(水平或垂直)被使用,0表示水平分割,1表示垂直分割。至于四叉树分割,不需要指示分割类型因为四叉树分割总是将一个块在水平和垂直上分割成大小相等的4个块。

                         H.266-----QTBT结构

        另外,QTBT方案支持亮度和色度有单独的QTBT结构。目前,对于P和B,一个CTU中的亮度和色度CTBs有相同的QTBT结构。但是,对于I slice,亮度CTB可以用QTBT结构划分为CUs,色度CTB可以用另一个QTBT结构划分成色度CUs。这意味着I slice中的一个CU包含一个亮度分量的编码块或者两个色度分量的编码块,PBslice中的一个CU包含所有三个分量(亮度加两个色度)的编码块。

        在HEVC中,小块的帧内预测被限制于去减少运动补偿的内存,以至于8*4和4*8块是不支持双向预测的,帧内预测不支持4*4块。JEMQTBT中,这三个限制被摈弃。

2.编码器实现

H.266-----QTBT结构

    如上图所示,函数QTBT_RDO()是被编码器用来确定输入块的划分,输入块由4个输入参数x,y,width,height指定,分别表示左上角位置的x坐标,y坐标,块的宽度和高度。首先,输入块被当做是编码树的叶节点,尝试各种各样的模式,不需要为预测和变换进一步的划分。然后将选择的模式的RD-cost存储为CostNoPart。然后,如果满足二叉树水平分割的条件,就将输入块水平划分为两个子块。他们和输入块有相同的宽度,但高度是输入块的一半。函数QTBT_RDO()被每一个子块递归调用去确定划分。当前输入块的水平二叉树分割的代价被记为CostHorBT。相似的,当前输入块的垂直二叉树分割和四叉树划分的代价分别记为CostVerBT和CostQT。在比较完the CostNoPart, CostHorBT, CostVerBT,and CostQT之后,我们就可已选择代价最小对应的块划分类型。对于I slice, 亮度CTB的QTBT_RDO()处理在两个对应色度CTB之前,因为色度CB可能会重复使用相同的亮度帧内预测模式。

       四叉树内QTBT_RDO()函数的递归调用和二叉树分割优化过程是很浪费时间的,所以使用好几个快速编码方案来加速JEM中的RDO过程。

       当二叉树的深度达到最大深度时,如果一个块的CostNoPart小于CostHorBT和CostVerBT,则CostQT也很可能大于CostNoPart,所以跳过四叉树分割的RD 比较。一个节点的四叉树分割可以使用一个水平二叉树分割加垂直二叉树分割等效表示。同样的划分形状也可以通过应用不同顺序的水平二叉树分割和垂直二叉树分割来生成。即使表示数结构的标记和生成的CU的处理顺序是不同的,RD性能除了发送开销也是相似的,因为块划分形状是一样的。因此,要限制二叉树的划分去避免冗余情况。

      在QTBT_RDO()过程中,一个块可能被多次访问。在图3(左)中,块首先被垂直分割,右边的子块在进一步水平分割。图3右,块首先被水平分割,然后上面的子块在进行垂直分割。在这些情况下,右上角位置的子块都被访问了两次。整个块本身可能会被访问了许多次。因为在多次RDO访问期间,一个特定块区域的选择模式可能保持不变,选择的模式信息存储在第一次RDO checking期间,以便在后面的RDO访问过程中重复使用从而节省时间。举个例子,对于一个有多次RDO访问的CU,当不同的RDO访问的所有邻近块有相同的编码信息时,当前CU在不同的RDO访问期间的选择保持不变。在此情况下,在执行后面的RDO访问时,当前CU的RDO过程可以被跳过,更早的RDO访问选择的模式可以重复使用。在JEM软件实施中,邻近块的编解码信息在此过程中要被检查。在此过程中确定以下属性。

a.    EMT flag and index

b.    NSST index

c.     PDPC flag

d.    FRUC flag

e.     LAMVR flag

f.     LIC flag

g.    Affine flag

h.    Merge flag

i.     Inter prediction direction

        当在后面的RDO访问中评估相同的CU时,从早期RDO访问中保存的CU信息能被用于RDO进程的早期终止。当一个CU被确定用帧内模式进行编码,那在随后的RDO访问中评估相同CU的时候就可以跳过帧间模式的RD check.如果一个CU被确定为用skip模式编码,则在随后RDO访问中评估相同CU的时候就可以跳过LIC enabled模式的RD check。

                                        H.266-----QTBT结构

       如果当前CU选择的模式是skip模式,且当前CU的深度足够深,那么通常不需要考虑该CU的进一步四叉树或二叉树划分。在JEM中,当选择的CU模式是SKIP模式且当前BT深度大于或等于SKIP_DEPTH,则停止进一步的QT和BT划分。在低延时配置中,所有编码图像的SKIP_DEPTH的值都设置为2。在随机介入配置中,对于最高的时域层的编码图像,SKIP_DEPTH的值设置为2,其他时域层的编码图像SKIP_DEPTH的值设置为3.

        maxBTSize 和 minQTSize是影响RD性能和编码时间的重要因子。在JEM软件中,当在同一时域层的前一幅编码图像的平均CU的大小更大时,则这两个参数也会自适应的设置的更大,反之亦然。图像层的自适应设置值用于P和B slice。

                           H.266-----QTBT结构










相关文章: