H.266------帧间预测

     帧间预测部分不太熟,先把GI001文档帧间部分的翻译记录一下。

1.基于子CU的运动矢量预测

在JEM中,每个CU的每个预测方向最多有一个运动参数集。在编码器中,当将一个CU划分成子CU,为一个更大的CU的所有子CU推导运动信息时,要考虑两种子CU层的运动矢量预测方法。备用的时域运动矢量预测(ATMVP)方法允许每个CU从同位参考图像中比当前CU更小的块中获取多个运动信息集。在空时运动矢量预测(STMVP)方法中,子CU的运动矢量通过使用时域运动矢量预测和空域邻近运动矢量来递归的推导。


1.1.ATMVP

 在ATMVP中,运动矢量通过从小于当前CU的块中获取多个运动信息集来修改。

      ATMVP预测CU中的子CU的运动矢量分两步。第一步,是用所谓的时间矢量找到参考图像中的对应块。参考图像称为运动源图像。第二步是将当前CU划分为子CU,并且从每个子CU对应的块中获得每个子CU的运动矢量和参考索引。

      在第一步中,参考图像和对应的块由当前CU的空域相邻块运动信息确定。为了避免相邻块的重复扫描过程,当前CU的merge候选列表的第一个merge候选被使用。第一个可获得的运动矢量和他相关的参考索引被设为时间矢量和运动源图像的索引。这样,在ATMVP,和TMVP相比,对应的块可能会被更精确的识别出来,因为在TMVP中,对应块总是在相当于当前块右下或中心的位置。

在第二步,子CU的对应块通过时间矢量在运动源图像中识别,运动源图像是通过给当前CU坐标增加时间矢量来得到的。对于每一个子CU,其对应块的运动信息用于推导子CU的运动信息。在确定一个对应N*N的块的运动信息之后,它就被转化为当前子CU的运动矢量和参考索引,和HEVC里的TMVP方式一样。举个例子,解码器检查是否满足低延时(即当前图像的所有参考图像的poc都小于当前图像的POC),且可能会使用运动矢量去预测每个子CU的运动矢量。

1.2. STMVP

在该方法中,子CU的运动矢量被递归的推导,按照光栅扫描的顺序。让我们考虑一个8*8的CU,包含4个4*4的子CU A,B,C,D。当前CU的邻近4*4块被标位a,b,c,d。

子CU A的运动矢量首先识别他的两个空间相邻块。第一个是该子CU上方的块(c)。如果块c不可得或者用帧内进行编码,则从c开始从左至右检查A上方的块。第二个相邻块是子CU的左边块(b)。如果块b不可得或者用帧内进行编码,则从b开始从上至下检查A左方的块。对于每个列表来说从相邻块获得的运动信息被缩放到给定列表的第一个参考帧(???)。接下去,子块A的TMVP通过和HEVC里相同的特定的TMVP推导程序来推导得到。位置D的同位块的运动信息被获取并且被相应的缩放。最后,在检索和缩放运动信息后,所有可获得的运动矢量(最多是3)为每个参考列表分别取平均值。平均后的运动矢量被分配为当前子CU的运动矢量。


1.3.子CU运动预测模式发送

子CU模式作为额外的merge候选启用,不需要额外的语法元素去发送模式。每个CU的merge候选列表增加了两个额外的merge候选去表示ATMVP模式和STMVP模式。如果序列参数集表明ATMVP和STMVP启用,则最多有7个merge模式被使用。额外merge候选的编码逻辑和HM的merge候选一致,意味着,对于P和B slice的CU,需要为两个额外的merge候选多check两次率失真。

2.自适应运动矢量差异分辨率

在HEVC, 当在slice头信息中使用的inter_mv_flag=0时,运动矢量残差以1/4亮度采样为单位发送。在JEM中,引入了一个局部自适应运动矢量分辨率。在JEM中,运动矢量残差以1/4亮度采样,整数亮度采样和4亮度采样为单位进行编码。运动矢量残差分辨率在CU层进行控制,对于至少有一个非零MVD分量的每一个CU,MVD分辨率标志都被有条件的发送。

      对于至少有一个非零MVD分量的CU,第一个被发送的标志指示是否在CU中使用1/4亮度采样运动矢量精度。当第一个标志指示没有使用1/4亮度采样运动矢量时,另一个指示是否使用整数MV精度或者4亮度采样MV精度的标记会被发送。

        当一个CU的第一个运动矢量残差分辨率标记是0时,或者没有被编码时,则该CU使用1/4亮度采样运动残差分辨率。当一个CU使用整数亮度采样运动矢量精度或者4亮度采样运动矢量分辨率时,该CU的AMVP候选列表里的MVPs都取整到对应的精度。

      在编码端,CU层的RD check被用于确定使用哪一个运动矢量残差分辨率。即,为每个MVD执行三种分辨率的RD check。为了加速编码速度,以下的编码方案应用在JEM中:

     1.在正常的1/4亮度采样MVD分辨率的CU的RD check期间,当前CU的运动信息被存储。在对整数亮度采样和4亮度采样MVD分辨率的相同CU进行RD check 期间,以存储的运动信息作为更小范围运动矢量优化的起点,以避免运动估计过程被重复三次。

       2. 4亮度采样MVD分辨率的RD  check被有条件的调用,当整数亮度采样MVD分辨率的RD代价远大于1/4亮度采样MVD分辨率时,4亮度采样MVD分辨率的RD  check被跳过。

3.更高的运动储量存储精度

在HEVC中,运动矢量精度是1/4像素。在JEM中,帧间运动矢量存储和merge候选的精度达到了1/16像素。对于用SKIP/merge模式进行编码的CU,在运动补偿帧间预测时,使用更高的运动矢量精度(1/16)。对于用ATMVP模式进行编码的CU,使用整像素或者1/4像素精度。

      SHVC上采样插值滤波,和HEVC运动补偿插值滤波有相同的滤波长度和归一化因子,被用作额外分像素位置的运动补偿插值滤波。在JEM中,色度分量运动矢量精度是1/32采样,额外的1/32分像素位置的插值滤波通过使用两个相邻1/16分像素位置的平均滤波得到。

4.重叠块运动补偿

重叠块运动补偿之前在H.263中就被使用。和H.263不一样,在JEM中,OBMC能够在CU层使用语法是OBMC开启和关闭。当在JEM中使用OBMC时,OBMC在所有的运动补偿块边界执行,除了CU的右边界和底边界。而且,它应用于亮度和色度分量。在JEM中,一个运动补偿块对应于一个编码块。当一个CU用子CU模式编码时,该CU的每个子块都是一个MC块。为了以一种统一的方式处理CU边界,在子CU层为所有MC块边界执行OBMC,子CU块的大小设置为4*4。

当OBMC应用到当前子块时,除了当前运动矢量,还有4个邻近子块的运动矢量,如果这4个运动矢量可用且和当前运动矢量不一致,则可以被用于推导当前子块的预测块。这些基于多个运动矢量的多个预测块被联合生成当前子块的预测信号。

基于相邻子块的运动矢量的预测块表示为PN,N表示相邻的上,下,左和右子块。基于当前块的运动矢量的预测块表示为Pc。当相邻子块包含的运动信息和当前子块的运动信息相同时,则基于该相邻子块的运动信息的预测块PN不执行OBMC。否则,PN中的每个采样都被加到PC中的相同采样中,即PN中的4行/列被加到Pc中。PN使用的权重因子为{1/4, 1/8, 1/16,1/32},PC的权重因子为{3/4, 7/8, 15/16,31/32}。小的MC块是例外,只将PN中的2行/列加到PC中。此情况下PN的权重因子为{1/4, 1/8},PC使用的权重因子为{3/4, 7/8}。对于基于水平/垂直相邻子块的运动矢量生成的PN,PN中同一行/列的采样被加到PC中,权重因子一样。


 在JEM中,对于大小小于256亮度采样的CU,要发送一个CU层的标志指示是否要应用OBMC于当前CU中。对于大小大于256亮度采样或者不用AMVP模式编码的CU,默认使用OBMC。在编码端,当OBMC应用于一个CU时,在运动估计阶段要考虑他的影响。由OBMC形成的预测信号,使用上相邻和左相邻块的运动信息来补偿当前CU原始信号的上边界和左边界,然后进行正常的运动估计过程。

5.局部光照补偿

局部光照补偿用于亮度变换,基于线性模型,使用一个缩放因子a和一个偏移b。对于每个帧间编码的编码单元,它自适应的开启或关闭。


当LIC应用于一个CU,利用最小二乘法使用当前CU的相邻采样和他们的对应参考采样去推导参数a和b。更具体的,如图14所示,使用CU的子相邻采样和参考图像中的对应采样(由当前CU或子CU 的运动信息确定)。每个预测方向的IC参数分别进行推导和应用。

当一个CU用merge模式进行编码时,LIC的标志从相邻块中复制,方法和merge 模式中的运动信息复制一样。否则,要发送一个LIC标记指示该CU是否应用LIC。

当LIC被用于一幅图像时,需要额外的CU层的RD check去确定该CU是否应用LIC。当LIC应用于一个CU时,使用MR-SAD和MR-SATD,用于整像素运动搜索和分像素运动搜索,而不是SAD,SATD。

为了减少编码复杂度,在JEM中使用下列的编码方案:

    当当前图像和他的参考图像之间没有明显的光照变化时,整个图像都不使用LIC。为了确认这种情况,要在编码端计算当前图像和当前图像所有参考图像的直方图。如果当前图像和当前图像的每个参考图像间的直方图差异小于一个给定的阈值,当前图像就不执行LIC,否则,就允许该图像使用LIC。

6.仿射运动补偿预测

 在HEVC中,只有平移运动模型应用于运动补偿预测中。在现实世界中,有很多种运动,比如放大/缩小,旋转,透视运动和其他不规则运动。在JEM中,应用了一个简化的仿射变换运动补偿预测。如图15所示,该块的放射运动场只用两个控制点的运动矢量去描述。


  一个块的运动矢量场用下列等式描述:


      (v0xv0y)是左上角控制点的运动矢量,(v1xv1y)是右上角控制点的运动矢量。为了进一步简化运动补偿预测,应用基于子块的仿射变换预测。子块的大小M*N用等式16来推导,其中MvPre是运动矢量分数精确度(v2xv2y)是左下控制点的运动矢量,由等式15计算。

在用等式16推导后,如果有必要的话,M和N应该向下调整,使之各自成为w和h的除数。

   为了推导每个M*N子块的运动矢量,每个子块的中心采样的运动矢量按照等式15计算,精确到1/16精度。然后再应用运动补偿插值滤波使用得到的运动矢量去生成每个子块的预测。


       在MCP后,每个子块的高精度运动矢量被取整,存储成和正常运动矢量一样的精度。

 在JEM中,有两种仿射运动模式:AF_INTER模式和AF_MERGE模式。对于宽和高大于8的CU,应用AF_INTER模式。在比特流中要发送仿射标记指示是否使用AF_INTER模式。在此模式中,使用相邻块创建有运动矢量对的候选列表 。v0是从块A,B和C中的运动矢量中选出的。根据参考列表和相邻块的参考POC,当前CU的参考POC与当前CU的POC之间的相关性对相邻块的运动矢量进行缩放。从相邻块D和E中选择v1的方法是相似的。如果候选列表的数量小于2,该列表就通过复制每个AMVP候选项组成的运动向量对来填充。当候选列表数量大于2,候选列表先按照相邻运动矢量的一致性进行排序,只保留前两个候选。然后使用RD check去确定选择哪个运动矢量对候选作为当前CU的控制点运动矢量预测。一个指示该CPMVP在候选列表中位置的索引要在比特流中发送。在确定当前仿射CU的CPMVP后,应用仿射运动估计,找到控制点运动矢量CPMV。然后CPMV和CPMVP的残差在比特流中发送。


当一个CU应用AF_MERGE模式时,从有效的相邻重建块中得到第一个用仿射模式的编码块。候选块的选择顺序是从左,上,右上,左下到左上。如果相邻的左下块A用仿射模式编码,则包含块A的CU的左上角,右上角和左下角的运动矢量v2,v3,v4就能被推导。当前CU的左上角的运动矢量v0按照v2,v3,v4来计算。其次,计算当前CU左上角的运动矢量v1。

在推导当前CU v0和v1的CPMV后,按照简化的仿射运动模型等式15,生成当前CU的MVF。为了确认当前CU是否用AF_MERGE

模式编码,当至少有一个相邻块是用仿射模式进行编码时,要在比特流中发送仿射标记。


7.模式匹配运动矢量推导

模式匹配的运动矢量推导模式是一种特别的merge模式,基于FRUC技术。用这种模式,一个块的运动信息不需要发送,但是要在解码端推导。

当CU的merge标记是true的时候,要发送一个FRUC标记。当FRUC的标记是false的时候,发送一个merge索引,使用常规的merge模式。当FRUC标记是true的时候,要发送一个额外的FRUC模式标记去指示使用哪种方法(双边匹配或者模板匹配)去推导块的运动矢量。

 在编码端,对于是否对CU使用FRUC合并模式的决策是基于对正常merge候选的RDcost选择。要为CU的两种匹配模式(双边匹配和模板匹配),都使用RD cost选择进行检查。成本最小的的一种方法要进一步与其他CU模式相比。如果一个FRUC匹配模式是最有效的一个,CU的FRUC 标记设置为true,并使用相关的匹配模式。

        在FRUC merge 模式的运动推导过程分为两步。首先执行CU层的运动搜索,然后进行子CU层的运动优化。在CU层,基于双边匹配或者模板匹配为整个CU推导一个最初的运动矢量。首先,生成一个MV候选列表,选择一个匹配代价最小的候选作为进一步CU层优化的起点。然后,在起始点附近基于双边匹配或者模板匹配进行局部搜索,匹配代价最小的MV作为整个CU的MV。随后,用推导出来的运动矢量作为起始点,在子CU层进一步优化运动信息。

举个例子,为W*H CU运动矢量执行下列的推导过程。在第一个阶段,为整个CU推导一个MV。在第二阶段,CU被划分成M*M的子CU。M的值用下列等式进行计算,D是预定义的划分深度,默认设置成3。然后,为每个子CU推导MV。


如图19所示,使用双边滤波去推导当前CU的运动信息,通过在两种不同的参考图像中,沿着当前CU的运动轨迹找到两个方块之间的最接近的匹配。假设运动轨迹是连续的,指向两个参考块的运动矢量MV0和MV1应该是和时间距离(即,当前图像和两个参考图像之间的TD0和TD1)成比例的。有一个特例,当当前图像时间上处于两个参考图像之间,且当前图像到两个参考图像的时间距离一样时,双边匹配就变成了基于镜像的双向MV。


如图20所示,使用模板匹配推导当前CU的运动信息,通过寻找当前图像中的模板和参考图像中的块之间的最接近匹配。除了上述提及的FRUC merge 模式,模板匹配也应用于AMVP模式中。在JEM中,AMVP有两个候选。用模板匹配方法,可以推导一个新的候选。如果用模板匹配推导出来的新的候选不同于第一个存在的AMVP候选,则将他插入到AMVP候选列表的开头,然后将列表大小设置为2.当应用AMVP模式时,只应用CU层的搜索。


7.1.CU层的MV候选集

  CU层的MV候选集包括:

1)         如果当前CU是AMVP模式,则有原始AMVP模式

2)         所有merge候选

3)         插值MV场中的几个MV

4)         相邻上和左块的运动矢量

当使用双边匹配时,merge候选中的每个有效MV都被用作输入去生成一个MV对。举个例子,在参考列表A中,merge 候选中的一个有效MV是(MVa, refa)。然后,他的成对的双边MV的参考图像refb在另一个参考列表B中找到,以至于refa和refb在时间上处于当前图像上的两端。如果refb在参考列表B中是无效的,refb就被确定为一个不同于refa的参考,他到当前图像的时间距离在列表B中是最小的一个。在refb被确定后,通过缩放的MVa基于当前图像和refa和refb的时间距离来推导MVb。

从插值的MV场得到的4个MV被加到CU层的候选列表中。具体地说,在当前CU的位置(0, 0), (W/2, 0), (0, H/2) and (W/2, H/2)的插值MV被增加。

        当FRUC被应用在AMVP模式中,原始的AMVP候选被增加到CU层的候选集中。

在CU层,对于AMVP CU最多有15个MV,对于merge CU最多有13个MV被增加到候选列表中。


7.2.子 CU层的MV候选集

子CU层的MV候选集包括:

1)         从CU层的搜索中确定一个MV

2)         上,左,左上和右上的相邻MVs;

3)         从参考图像的同位MV的缩放版本

4)         最多4个ATMVP候选

5)         最多4个STMVP候选

从参考图像得来的缩放MVs的推导过程如下。遍历列表中的索引参考图像。在参考图像中的子CU的同位位置的MV被缩放到起始CU层MV的参考。ATMVP和STMVP候选被限制在前四个。

    在子CU层,最多有17个MVs被添加到候选列表中。

7.3. 插值MV场的生成

在编码一个帧时,为整个图像基于单边运动估计生成一个插值运动场。该运动场在后面可能会被用作CU层或者子CU层的MV候选。

首先遍历参考列表中的所有参考图像的运动场,以4*4块为遍历单位。

对于每个4*4块,如果与通过当前图像的一个4*4块的块相关的运动和块还没有被分配给任何插值运动场,则参考块的运动按照时间距离TD0和TD1缩放到当前图像,缩放的运动分配给当前帧的块。如果没有缩放的MV分配给一个4*4块,该块的运动在运动场中就被标记为不可用。


7.4.插值和匹配代价

当运动矢量指向一个分像素采样位置,需要进行运动补偿插值。为了减少复杂度,双边匹配和模板匹配都使用双边插值滤波器,而不是用HEVC里的8抽头插值滤波器。

     在不同的步骤中,匹配代价的计算略有不同。当在CU层从候选集中选择候选是,匹配代价是双边匹配或者模板匹配的SAD。在确定起始MV后,在子CU层的双边匹配的代价C用下式进行计算:


其中权重因子w通常设置为4,MV和MVS表示当前MV和起始MV。在子CU层的搜索中,仍然使用SAD作为模板匹配的匹配代价。

    在FRUC模式中,MV只使用亮度采样推导。推导的运动将用于亮度和色度的MV帧间预测。在确定MV后,最后的亮度MC使用8抽头插值滤波器,色度MC使用4抽头插值滤波器。

7.5.MV细化

MV细化是基于模式的MV搜索,以双边匹配或者模板匹配代价为标准。在JEM中,支持两种所搜模式—一种是不受限制的中偏菱形搜索,一种是自适应交叉搜索,各自用于CU层和子CU层的MV细化。对于所有的CU和子CU层的MV细化,MV都是直接在1/4亮度采样的MV精确度直接搜索的,然后在进行一个1/8的亮度采样MV细化。CU和子CU的MV细化的搜索范围都被设置为8亮度采样。

7.6.在模板匹配FRUCmerge模式中的预测方向的选择

在双边匹配merge模式中,总是应用双边预测因为CU的运动信息是基于两个不同参考图像中沿着当前CU的运动轨迹的两个块之间的最接近的匹配而推导出来的。对于模板匹配merge模式没有这样的限制。在模板匹配merge模式中,编码器能在list0的单一预测,list1的单一预测或者CU的双向预测之间选择。这个选择是基于下列的模板匹配代价的:

If costBi <= factor * min (cost0, cost1)

                          使用双向预测;

                 Otherwise, if cost0 <= cost1

                         使用list0的单一预测;

           Otherwise,

                        使用list1的单一预测;

8.双向光流(太复杂了,任性的不看了)

9.解码端运动矢量细化

在双向预测操作中,对于一个块区域的预测,分别用list0的运动矢量(MV)和list1的MV形成的两个预测块,联合组成一个单一的预测信号。在解码端运动矢量精细方法中,双向预测的两个运动矢量通过一个双边模板匹配过程进一步的细化。应用在解码端的双边模板匹配在一个双边模板和参考图像的重建采样中执行一个基于失真的搜索,去获得一个细化的MV,而不需要额外运动信息的传输。

在DMVR中,从list0的原始MV0和list1的MV1中得到两个预测块,加权联合生成一个双边模板,如图24所示。模板匹配操作包括计算生成的模板和参考图像中采样区域之间的代价。对于两个参考图像中的任一个,匹配代价最小的MV被认为是该列表更新的MV,去替代原始的MV。在JEM中,每个列表搜索9个MV候选。这9个MV候选包含一个原始MV和8个周围的MV,这些周围的MV中相对于原始的MV有一个亮度采样的偏移,可能是水平方向或者是垂直方向,或者两者都有。最后,这两个新的MV,即MV0’和MV1’如图24所示,用于生成最后的双向预测结果。SAD被用作代价测度。

DMVR用于双向预测的merge模式中,其中一个MV来自过去的参考图像,另一个MV来自后面的参考图像中,不需要传输额外的语法元素。在JEM中,当LIC,仿射运动,FRUC,或者子CU的merge候选启用时,DMVR被关闭。


  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值