阈值),则测试4像素MV;否则跳过4像素MV。基本上,在检查整数或4像素MV时,对于1/4像素MV已经知道运动信息和RD成本等,其可以被重新使用以加快整数或4像素MV的编码过程。 [0120] 2.3更高的运动矢量存储精度的示例 [0121] 在HEVC中,运动矢量精度为四分之一像素(对于4:2:0视频,四分之一亮度样点和八分之一 色度样点)。在JEM中,内部运动矢量存储和Merge候选的精度增加到1/16像素。更高的运动矢量精度(1/16像素)用于以跳过/Merge模式编码的CU的运动补偿帧间预测。对于以常规AMVP模式而编码的CU,使用整数像素或四分之一像素运动。 [0122] 具有与HEVC运动补偿插值 滤波器相同的滤波器长度和归一化因子的SHVC上 采样插值滤波器被用作附加分数像素位置的运动补偿插值滤波器。在JEM中色度分量运动矢量精度为1/32样点,通过使用两个相邻的1/16像素分数位置的滤波器的平均来推导1/32像素分数位置的附加插值滤波器。 [0123] 2.4重叠块运动补偿(OBMC)的示例 [0124] 在JEM中,可以使用CU级别的语法来打开和关闭OBMC。当在JEM中使用OBMC时,除了CU的右侧边界和底部边界之外,对所有运动补偿(Motion Compensation,MC)块边界执行OBMC。此外,它还应用于亮度和色度分量两者。在JEM中,MC块对应于编码块。当用子CU模式(包括子CU Merge、仿射和FRUC模式)编码CU时,CU的每个子块是MC块。为了以统一的方式处理CU边界,对于所有MC块边界以子块级别执行OBMC,其中子块尺寸被设置为等于4×4,如图13A和图13B所示。
[0125] 图13A示出了CU/PU边界处的子块,并且阴影子块是OBMC应用的位置。类似地,图13B示出了ATMVP模式中的子Pus。
[0126] 当OBMC应用于当前子块时,除了当前运动矢量之外,四个连接的相邻子块的运动矢量(如果可用且与当前运动矢量不同)也用于推导当前子块的预测块。组合基于多个运动矢量的这些多个预测块以生成当前子块的最终预测 信号。 [0127] 将基于相邻子块的运动矢量的预测块表示为PN,其中N指示相邻的上侧、下侧、左侧和右侧子块的索引,并且将基于当前子块的运动矢量的预测块表示为PC。当PN是基于包含与当前子块相同的运动信息的相邻子块的运动信息时,不从PN执行OBMC。否则,将PN的每个样点添加到PC中的相同样点,即将PN的四行/列添加到PC。加权因子{1/4,1/8,1/16,1/32}用于PN,并且加权因子{3/4,7/8,15/16,31/32}用于PC。例外是小MC块(即,当编码块的高度或宽度等于4或CU是用子CU模式编码的时),对其仅将PN的两行/列添加到PC。在这种情况下,加权因子{1/4,1/8}用于PN,并且加权因子{3/4,7/8}用于PC。对于基于垂直( 水平)相邻子块的运动矢量生成的PN,将PN的相同行(列)中的样点添加到具有相同加权因子的PC。 [0128] 在JEM中,对于尺寸小于或等于256个亮度样点的CU,信令通知CU级别标志以指示是否对当前CU应用OBMC。对于尺寸超过256个亮度样点或未使用AMVP模式进行编码的CU,默认应用OBMC。在编码器处,当将OBMC应用于CU时,在运动估计阶段期间考虑其影响。由OBMC使用顶部相邻块和左侧相邻块的运动信息形成的预测信号用于补偿当前CU的原始信号的顶部边界和左侧边界,然后应用常规运动估计处理。 [0129] 2.5局部光照补偿(LIC)的示例 [0130] LIC是基于使用缩放因子a和偏移b的、用于光照变化的线性模型。并且针对每个帧间模式编码的编码单元(CU)自适应地启用或禁用它。 [0131] 当LIC应用于CU时,采用最小平方误差方法来通过使用当前CU的相邻样点及其对应参考样点来推导参数a和b。图14示出了用来推导IC算法的参数的相邻样点的示例。更具体地并且如图14所示,使用CU的子采样(2:1子采样)相邻样点和参考图片中的(由当前CU或子CU的运动信息识别的)对应样点。推导IC参数并将其分别应用于每个预测方向。 [0132] 当用Merge模式编码CU时,以类似于Merge模式中的运动信息复制的方式从相邻块复制LIC标志;否则,向CU信令通知LIC标志以指示是否应用LIC。 [0133] 当针对图片启用LIC时,需要附加CU级别RD检查以确定是否将LIC应用于CU。当针对CU启用LIC时,分别针对整数像素运动搜索和分数像素运动搜索,使用去均值绝对差之和(Mean-Removed Sum of Absolute Difference,MR-SAD)和去均值绝对哈达玛变换差之和(Mean-Removed Sum of Absolute Hadamard-Transformed Difference,MR-SATD),而不是SAD和SATD。 [0134] 为了降低编码复杂度,在JEM中应用以下编码方案: [0135] --当当前图片与其参考图片之间没有明显的光照变化时,对于整个图片禁用LIC。为了识别这种情形,在编码器处计算当前图片和当前图片的每个参考图片的直方图。如果当前图片与当前图片的每个参考图片之间的直方图差小于给定阈值,则针对当前图片禁用LIC;否则,针对当前图片启用LIC。
[0137] 在HEVC中,仅将平移运动模型应用于运动补偿预测(Motion Compensation Prediction,MCP)。然而,相机和物体可以具有多种运动,例如放大/缩小、旋转、透视运动和/或其他不规则运动。另一方面,JEM应用简化的仿射变换运动补偿预测。图15示出了块1500的由两个控制点运动矢量V0和V1描述的仿射运动场的示例。块1500的运动矢量场(MVF)可以通过以下等式描述:
[0138] [0139] 如图15所示,(v0x,v0y)是左上 角控制点的运动矢量,并且(v1x,v1y)是右上角控制点的运动矢量。为了简化运动补偿预测,可以应用基于子块的仿射变换预测。子块尺寸M×N如下推导: [0140] [0141] 这里,MvPre是运动矢量分数精度(例如,JEM中的1/16)。(v2x,v2y)是左下角控制点的运动矢量,根据等式(1)而计算。如果需要,可以向下调整M和N,使其分别为w和h的除数。 [0142] 图16示出了块1600的每个子块的仿射MVF的示例。为了推导每个M×N子块的运动矢量,可以根据等式(1)计算每个子块的中心样点的运动矢量,并且将其取整到运动矢量分数精度(例如,JEM中的1/16)。然后,可以应用运动补偿插值滤波器以用推导的运动矢量生成每个子块的预测。在MCP之后,对每个子块的高精度运动矢量进行取整,并且将其以与常规运动矢量相同的精度保存。 [0143] 2.6.1AF_INTER模式的示例 [0144] 在JEM中,存在两种仿射运动模式:AF_INTER模式和AF_MERGE模式。对于宽度和高度都大于8的CU,可以应用AF_INTER模式。在比特流中信令通知CU级别中的仿射标志以指示是否使用AF_INTER模式。在AF_INTER模式中,使用相邻块来构建具有运动矢量对{(v0,v1)|v0={vA,vB,vc},v1={vD,vE}}的候选列表。 [0145] 图17示出了AF_INTER模式中的块1700的运动矢量预测(MVP)的示例。如图17所示,从子块A、B或C的运动矢量选择v0。可以根据参考列表缩放来自相邻块的运动矢量。还可以根据相邻块的参考的图片顺序计数(POC)、当前CU的参考的POC和当前CU的POC之间的关系来缩放运动矢量。从相邻子块D和E选择v1的方法是类似的。如果候选列表的数量小于2,则由通过复制每个AMVP候选而组成的运动矢量对填充列表。当候选列表大于2时,可以首先根据相邻运动矢量(例如,基于对候选(pair candidate)中的两个运动矢量的相似性)对候选进行排序。在一些实施方式中,保留前两个候选。在一些实施例中,速率失真(Rate Distortion,RD)成本检查用来确定选择哪个运动矢量对候选作为当前CU的控制点运动矢量预测(Control Point Motion Vector Prediction,CPMVP)。可以在比特流中信令通知指示CPMVP在候选列表中的位置的索引。在确定当前仿射CU的CPMVP之后,应用仿射运动估计并找到控制点运动矢量(Control Point Motion Vector,CPMV)。然后在比特流中信令通知CPMV和CPMVP的差。 [0146] 在AF_INTER模式中,当使用4/6参数仿射模式时,需要2/3个控制点,因此需要针对这些控制点编码2/3个MVD,如图18A和图18B所示。在现有实施方式中,MV可以如下推导,例如,它从mvd0预测mvd1和mvd2。 [0147] [0148] [0149] [0150] 本文中, mvdi和mv1是预测的运动矢量,左上方像素(i=0)、右上方像素(i=1)或左下方像素(i=2)的运动矢量差和运动矢量分别如图18B所示。在一些实施例,添加两个运动矢量(例如,mvA(xA,yA)和mvB(xB,yB))等于两个分量各自地的和。例如,newMV=mvA+mvB暗示newMV的两个分量被分别设置为(xA+xB)和(yA+yB)。
[0151] 2.6.2AF_INTER模式中的快速仿射ME算法的示例 [0152] 在仿射模式的一些实施例中,需要联合确定2个或3个控制点的MV。直接联合搜索多个MV是计算复杂的。在示例中,提出一种快速仿射ME算法,并且将其纳入VTM/BMS。 [0153] 例如,针对4-参数仿射模型描述了快速仿射ME算法,并且该思想可以扩展到6-参数仿射模型。 [0154] [0155] [0156] 用a’替换(a-1)使得运动矢量能够被重写为: [0157] [0158] 如果假设两个控制点(0,0)和(0,w)的运动矢量是已知的,则根据等式(5),仿射参数可以被推导为: [0159] [0160] 可以以矢量形式将运动矢量重写为: [0161] [0162] 本文中,P=(x,y)是像素位置。 [0163] [0164] [0165] 在一些实施例中,并且在编码器处,可以 迭代地推导AF_INTER的MVD。将MVi(P)表示为在位置P的第i次迭代中推导的MV,并且将dMVCi表示为在第i次迭代中MVC的更新的增量。然后在第(i+1)次迭代中, [0166] [0167] 将Picref表示为参考图片,并将Piccur表示为当前图片,并且表示Q=P+MVi(P)。如果MSE用作匹配准则,则需要最小化的函数可以写为: [0168] [0169] 如果假设 足够小,则 可以被重写为基于1阶泰勒展开的近似值,如下:
[0170] [0171] 本文中, 如果采用符号Ei+1(P)=Piccur(P)-Picref(Q),则:
[0172] [0173] 项 可以通过将误差函数的导数设置为零,然后根据 计算控制点(0,0)和(0,w)的增量MV而推导,如下:
[0174] [0175] [0176] [0177] [0178] 在一些实施例中,该MVD推导过程可以迭代n次,并且最终MVD可以如下计算: [0179] [0180] [0181] [0182] [0183] 在前述实施方式中,从由mvd0表示的控制点(0,0)的增量MV预测由mvd1表示的控制点(0,w)的增量MV,引起对于mvd1,仅 被编码。
[0184] 2.6.3AF_MERGE模式的示例 [0185] 当在AF_MERGE模式中应用CU时,其从有效的相邻重构块得到以仿射模式编码的第一块。图19A示出了当前CU 1900的候选块的选择顺序的示例。如图19A所示,选择顺序可以是从当前CU 1900的左侧(1901)、上侧(1902)、右上侧(1903)、左下角(1904)到左上侧(1905)。图19B示出了AF_MERGE模式中的当前CU 1900的候选块的另一示例。如果相邻的左下角块1901以仿射模式而编码,如图19B所示,则推导包含子块1901的CU的左上角、右上角和左下角的运动矢量v2、v3和v4。基于v2、v3和v4计算当前CU 1900的左上角的运动矢量v0。可以相应地计算当前CU的右上侧的运动矢量v1。 [0186] 在根据等式(1)中的仿射运动模型计算当前CU v0和v1的CPMV之后,可以生成当前CU的MVF。为了识别当前CU是否以AF_MERGE模式而编码,当存在至少一个相邻块以仿射模式而编码时,可以在比特流中信令通知仿射标志。 [0187] 2.7模式匹配的运动矢量推导(PMMVD)的示例 [0188] PMMVD模式是基于帧速率上转换(FRUC)方法的特殊Merge模式。利用该模式,在解码器侧推导块的运动信息,而不是信令通知块的运动信息。 [0189] 当CU的Merge标志为真时,可以向CU信令通知FRUC标志。当FRUC标志为假时,可以信令通知Merge索引并使用常规Merge模式。当FRUC标志为真时,可以信令通知附加FRUC模式标志以指示将使用哪种方法(例如,双边匹配或模板匹配)来推导该块的运动信息。 [0190] 在编码器侧,关于是否对CU使用FRUC Merge模式的决定是基于对常规Merge候选所做的RD成本选择。例如,通过使用RD成本选择来针对CU检查多个匹配模式(例如,双边匹配和模板匹配)。引起最小成本的匹配模式与其他CU模式进一步比较。如果FRUC匹配模式是最有效的模式,则对于CU将FRUC标志设置为真,并且使用相关的匹配模式。 [0191] 通常,FRUC Merge模式中的运动推导过程具有两个步骤:首先执行CU级别运动搜索,然后进行子CU级别运动细化。在CU级别处,基于双边匹配或模板匹配,为整个CU推导初始运动矢量。首先,生成MV候选的列表,并且选择引起最小匹配成本的候选作为进一步CU级别细化的起点。然后,在起点附近执行基于的双边匹配或模板匹配的局部搜索。将引起最小匹配成本的MV结果作为整个CU的MV。随后,以推导的CU运动矢量作为起点,在子CU级别处进一步细化运动信息。 [0192] 例如,对于W×HCU运动信息推导执行以下推导过程。在第一阶段,推导整个W×HCU的MV。在第二阶段,该CU进一步被划分为M×M子CU。M的值如等式(3)而计算,D是预定义的划分深度,在JEM中默认设置为3。然后推导每个子CU的MV。 [0193] [0194] 图20示出了在帧速率上转换(FRUC)方法中使用的双边匹配的示例。通过在两个不同参考图片(2010、2011)中沿当前CU(2000)的运动轨迹找到两个块之间的最接近匹配,使用双边匹配来推导当前CU的运动信息。在连续运动轨迹的假设下,指向两个参考块的运动矢量MV0(2001)和MV1(2002)与当前图片和两个参考图片之间的时域距离(例如,TD0(2003)和TD1(2004))成比例。在一些实施例中,当当前图片2000在时域上在两个参考图片(2010、2011)之间并且从当前图片到两个参考图片的时域距离相同时,双边匹配成为基于镜像的双向MV。
[0195] 图21示出了在帧速率上转换(FRUC)方法中使用的模板匹配的示例。模板匹配可以用来通过找到当前图片中的模板(例如,当前CU的顶部和/或左侧相邻块)与参考图片2110中的块(例如,与模板的尺寸相同)之间的最接近匹配来推导当前CU 2100的运动信息。除了前述FRUC Merge模式之外,模板匹配也可以应用于AMVP模式。在JEM和HEVC两者中,AMVP具有两个候选。利用模板匹配方法,新的候选可以被推导。如果模板匹配新推导的候选与第一现有AMVP候选不同,则将其插入AMVP候选列表的最开始处,然后将列表尺寸设置为二(例如,通过移除第二现有AMVP候选)。当应用于AMVP模式时,仅应用CU级别搜索。 [0196] CU级别处的MV候选集可以包括以下:(1)如果当前CU处于AMVP模式,则原始AMVP候选,(2)所有Merge候选,(3)插值MV场中的几个MV(稍后描述),以及(4)顶部和左侧相邻运动矢量。 [0197] 当使用双边匹配时,可以将Merge候选的每个有效MV用作输入,以生成假设双边匹配的情况下的MV对。例如,在参考列表A处,Merge候选的一个有效MV是(MVa,refa)。然后,在另一参考列表B中找到其 配对的双边MV的参考图片refb,使得refa和refb在时域上位于当前图片的不同侧。如果这样的refb在参考列表B中不可用,则refb被确定为与refa不同的参考,并且其到当前图片的时域距离是列表B中的最小值。在确定refb之后,通过基于当前图片与refa、refb之间的时域距离来缩放MVa来推导MVb。 [0198] 在一些实施例中,来自插值MV场的四个MV也可以被添加到CU级别候选列表。更具体地,添加当前CU的位置(0,0)、(W/2,0)、(0,H/2)和(W/2,H/2)处的插值MV。当FRUC应用于AMVP模式中时,原始AMVP候选也被添加到CU级别MV候选集。在一些实施例中,在CU级别处,AMVP CU的15个MV和Merge CU的13个MV可以被添加到候选列表。 [0199] 子CU级别处的MV候选集包括: [0200] (1)从CU级别搜索确定的MV, [0201] (2)顶部、左侧、左上角和右上角相邻MV, [0202] (3)来自参考图片的并置MV的缩放版本, [0203] (4)一个或多个ATMVP候选(例如,多达四个),和 [0204] (5)一个或多个STMVP候选(例如,多达四个)。 [0205] 来自参考图片的缩放MV如下推导。遍历两个列表中的参考图片。参考图片中的子CU的并置位置处的MV被缩放到起始CU级别MV的参考。ATMVP和STMVP候选可以是前四个。在子CU级别处,一个或多个MV(例如,多达17个)被添加到候选列表。 [0206] 插值MV场的生成。在对帧进行编码之前,基于单边ME为整个图片生成插值运动场。然后,运动场可以稍后用作CU级别或子CU级别MV候选。
[0207] 在一些实施例中,两个参考列表中的每个参考图片的运动场以4×4块级别遍历。图22示出了FRUC方法中的单边运动估计(Motion Estimation,ME)2200的示例。对于每个4×4块,如果与块相关联的运动通过当前图片中的4×4块并且块未被分配任何插值运动,则参考块的运动根据时域距离TD0和TD1(以与HEVC中的TMVP的MV缩放的方式相同的方式)被缩放到当前图片,并且缩放的运动被分配给当前帧中的块。如果没有缩放的MV被分配给4× 4块,则在插值运动场中将块的运动标记为不可用。
[0208] 插值和匹配成本。当运动矢量指向分数样点位置时,需要运动补偿插值。为了降低复杂度,可以将双线性插值而不是常规8抽头HEVC插值用于双边匹配和模板匹配。 [0209] 匹配成本的计算在不同步骤处有点不同。当从CU级别处的候选集中选择候选时,匹配成本可以是双边匹配或模板匹配的绝对和差(Absolute Sum Difference,SAD)。在确定起始MV之后,子CU级别搜索处的双边匹配的匹配成本C如下计算: [0210] [0211] 这里,w是加权因子。在一些实施例中,w可以被经验主义地设置为4。MV和MVs分别指示当前MV和起始MV。SAD仍可以用作子CU级别搜索处的模板匹配的匹配成本。 [0212] 在FRUC模式中,仅通过使用亮度样点来推导MV。推导的运动将用于MC帧间预测的亮度和色度两者。在决定MV之后,对于亮度使用8抽头插值滤波器并且对于色度使用4抽头插值滤波器来执行最终MC。 [0213] MV细化是基于模式的MV搜索,具有双边匹配成本或模板匹配成本的准则。在JEM中,对于CU级别处和子CU级别处的MV细化,分别支持两种搜索模式—无限制中心偏置菱形搜索(Unrestricted Center-Biased DiamondSearch,UCBDS)和自适应交叉搜索。对于CU和子CU级别MV细化两者,以四分之一亮度样点MV精度直接搜索MV,并且接着是八分之一亮度样点MV细化。将用于CU和子CU步骤的MV细化的搜索范围设置为等于8亮度样点。 [0214] 在双边匹配Merge模式中,应用双向预测,因为CU的运动信息是基于两个不同的参考图片中沿当前CU的运动轨迹的两个块之间的最接近匹配推导的。在模板匹配Merge模式中,编码器可以从来自列表0的单向预测、来自列表1的单向预测、或双向预测当中为CU选择。选择可以如下基于模板匹配成本: [0215] 如果costBi<=factor*min(cost0,cost1) [0216] 则使用双向预测; [0217] 否则,如果cost0<=cost1 [0218] 则使用来自列表0的单向预测; [0219] 否则, [0220] 使用来自列表1的单向预测; [0221] 这里,cost0是列表0模板匹配的SAD,cost1是列表1模板匹配的SAD,并且costBi是双向预测模板匹配的SAD。例如,当factor的值等于1.25时,这意味着选择过程偏向于双向预测。帧间预测方向选择可以应用于CU级别模板匹配过程。 [0222] 2.8双向光流(BIO)的示例 [0223] 双向光流(BIO)方法是在用于双向预测的块方式运动补偿的顶部执行的样点方式的运动细化。在一些实施例中,样点级别运动细化不使用信令。 [0224] 假定I(k)是来自块运动补偿之后的参考k(k=0,1)的亮度值,并且 和分别表示I(k)梯度的水平分量和垂直分量。假设光流是有效的,则运动矢量场 (vx,vy)由以下等式给出:
[0225] [0226] 将此光流等式与每个样点运动轨迹的埃尔米特插值相结合,得到唯一的三阶多项式,该三阶多项式最后匹配函数值I(k)和其导数 和 该三阶多项式在t=0处的值是BIO预测:
[0227] [0228] 图23示出了双向光流(BIO)方法中的光流轨迹的示例。这里,τ0和τ1表示到参考帧的距离。基于Ref0和Ref1的POC计算距离τ0和τ1:τ0=POC(当前)-POC(Ref0),τ1=POC(Ref1)-POC(当前)。如果两个预测都来自相同的时域方向(两者都来自过去或都来自未来),则sign是不同的(例如,τ0·τ1<0)。在这种情况下,如果预测不是来自相同的时刻(例如,τ0≠τ1),则应用BIO。两个参考区域都具有非零运动(例如,MVx0,MVy0,MVx1,MVy1≠0)并且块运动矢量与时域距离成比例(例如,MVx0/MVx1=MVy0/MVy1=-τ0/τ1)。 [0229] 通过最小化点A和B中的值之间的差Δ来确定运动矢量场(vx,vy)。图9示出了运动轨迹和参考帧平面的交叉的示例。模型仅使用Δ的局部泰勒展开的第一线性项: [0230] [0231] 上述等式中的所有值都取决于表示为(i′,j′)的样点位置。假设运动在局部周围区域是一致的,可以在以当前预测点(i,j)为中心的(2M+1)×(2M+1)的方形窗口Ω内部最小化Δ,其中M等于2: [0232] [0233] 对于该优化问题,JEM使用简化的方法,首先在垂直方向上进行最小化,然后在水平方向上进行最小化。结果如下所示: [0234] [0235] [0236] 其中, [0237] [0238] 为了避免除以零或非常小的值,可以在等式(28)和等式(29)中引入正则化参数r和m,其中 [0239] r=500·4d-8 等式(31) [0240] m=700·4d-8 等式(32) [0241] 这里d是视频样点的比特深度。 [0242] 为了使BIO的存储访问与常规双向预测运动补偿保持相同,针对当前块内部的位置计算所有预测和梯度值I(k)、 图24A示出了块2400的外部的访问位置的示例。如图24A所示,在等式(30)中,以在预测块的边界上的当前预测点为中心的(2M+1)×(2M+1)方形窗口Ω需要访问块的外部的位置。在JEM中,将块的外部的I(k)、的值设置为等于块内部最近的可用值。例如,这可以实施为填充区 域2401,如图24B所示。
[0243] 利用BIO,可以针对每个样点细化运动场。为了降低计算复杂度,在JEM中使用基于块的BIO设计。可以基于4×4块计算运动细化。在基于块的BIO中,可以聚合4×4块中的所有样点的等式(30)中的sn的值,然后将sn的聚合值用于推导4×4块的BIO运动矢量偏移。更具体地,以下公式可以用于基于块的BIO推导: [0244] [0245] 这里,bk表示属于预测块的第k个4×4块的样点集。将等式(28)和等式(29)中的sn替换为((sn,bk)>>4),以推导相关联的运动矢量偏移。 [0246] 在一些场景中,由于噪音或不规则运动,BIO的MV群(MV regiment)可能不可靠。因此,在BIO中,MV群的幅度被 限幅到阈值。阈值是基于当前图片的参考图片是否都来自一个方向而确定的。例如,如果当前图片的所有参考图片都来自一个方向,则将阈值的值设置为12×214-d;否则,将其设置为12×213-d。 [0247] 可以利用使用与HEVC运动补偿过程(例如,2D可分离有限脉冲响应(Finite Impulse Response,FIR))一致的操作的运动补偿插值来同时计算BIO的梯度。在一些实施例中,该2D可分离FIR的输入是与运动补偿过程和根据块运动矢量的分数部分的分数位置(fracX,fracY)相同的参考帧样点。对于水平梯度 首先使用与具有去缩放偏移d-8的分数位置fracY相对应的BIOfilterS垂直插值信号。然后在水平方向上应用梯度滤波器BIOfilterG,该BIOfilterG与具有去缩放偏移18-d的分数位置fracX相对应。对于垂直梯度使用与具有去缩放偏移d-8的分数位置fracY相对应的BIOfilterG垂直应用梯度滤波器。然后在水平方向上使用BIOfilterS执行信号位移,该BIOfilterS与具有去缩放偏移18-d的分数位置fracX相对应。为了保持合理的复杂度,用于梯度计算的插值滤波器BIOfilterG和用于信号位移的插值滤波器BIOfilterF的长度可以更短(例如,6抽头)。表1示出了可以用于BIO中块运动矢量的不同分数位置的梯度计算的示例滤波器。表2示出了可以用于BIO中预测信号生成的示例插值滤波器。
[0248] 表1:用于BIO中的梯度计算的示例性滤波器 [0249]分数像素位置 梯度的插值滤波器(BIOfilterG) 0 {8,-39,-3,46,-17,5} 1/16 {8,-32,-13,50,-18,5} 1/8 {7,-27,-20,54,-19,5} 3/16 {6,-21,-29,57,-18,5} 1/4 {4,-17,-36,60,-15,4} 5/16 {3,-9,-44,61,-15,4} 3/8 {1,-4,-48,61,-13,3} 7/16 {0,1,-54,60,-9,2} 1/2 {-1,4,-57,57,-4,1}
[0250] 表2:用于BIO中的预测信号生成的示例性插值滤波器 [0251] 分数像素位置 预测信号的插值滤波器(BIOfilterS)0 {0,0,64,0,0,0} 1/16 {1,-3,64,4,-2,0} 1/8 {1,-6,62,9,-3,1} 3/16 {2,-8,60,14,-5,1} 1/4 {2,-9,57,19,-7,2} 5/16 {3,-10,53,24,-8,2} 3/8 {3,-11,50,29,-9,2} 7/16 {3,-11,44,35,-10,3} 1/2 {3,-10,35,44,-11,3}
[0252] 在JEM中,当两个预测来自不同的参考图片时,BIO可以应用于所有双向预测块。当针对CU启用了局部光照补偿(LIC)时,可以禁用BIO。 [0253] 在一些实施例中,OBMC在常规MC过程之后应用于块。为了降低计算复杂性,在OBMC过程期间可以不应用BIO。这意味着BIO在使用其自身的MV时才应用于块的MC过程,并且当在OBMC过程期间使用相邻块的MV时不应用于MC过程。 [0254] 2.9解码器侧运动矢量细化(DMVR)的示例 [0255] 在双向预测操作中,对于一个块区域的预测,将分别使用列表0的运动矢量(MV)和列表1的MV形成的两个预测块进行组合以形成单个预测信号。在解码器侧运动矢量细化(Decoder-Side Motion Vector Refinement,DMVR)方法中,通过双边模板匹配过程进一步细化双向预测的两个运动矢量。双边模板匹配应用在解码器中,以在双边模板和参考图片中的重构样点之间执行基于失真的搜索,以便获得细化的MV而无需发送附加运动信息。 [0256] 在DMVR中,双边模板被生成为两个预测块的加权组合(即,平均),该两个预测块分别来自列表0的初始MV0和列表1的MV1,如图25所示。模板匹配操作包括计算生成的模板与参考图片中的(在初始预测块周围的)样点区域之间的成本计量(cost measure)。对于两个参考图片中的每一个,将产生最小模板成本的MV考虑为该列表的更新MV以替换原始MV。在JEM中,针对每个列表搜索九个MV候选。该九个MV候选包括原始MV和8个与原始MV在水平或垂直方向上或两个方向上具有一个亮度样点偏移的环绕的MV。最后,将两个新的MV,即如图25中所示的MV0'和MV1',用于生成最终的双向预测结果。将绝对差之和(SAD)用作成本计量。
[0257] 将DMVR应用于双向预测的Merge模式,其中一个MV来自过去的参考图片,另一MV来自未来的参考图片,而无需发送附加语法元素。在JEM中,当针对CU启用LIC、仿射运动、FRUC或子CU Merge候选时,不应用DMVR。 [0258] 3.现有实施方式的缺点 [0259] 在如ATMVP、STMVP和仿射模式的基于子块的编码工具中,更小的子块通常带来更高的编码增益,尽管是以更高的存储带宽为代价的。另一方面,如果直接使用更大的子块以减小存储带宽,则可能导致不小的编码性能损失。 [0260] 在仿射模式的一些实施方式中,为每个4×4块推导运动矢量,并且还以4×4块级别执行运动补偿,与4×8、8×4或8×8块相比,这可能会增加存储带宽。 [0261] 在现有实施方式中,针对最坏情况的带宽减小,提出了对仿射模式的限制。为了确保仿射块的最坏情况的带宽不比4×8或8×4块差,仿射控制点之间的运动矢量差用来决定仿射块的子块尺寸是4×4还是8×8。 [0262] 通过限制仿射控制点之间的运动矢量差(也称为控制点差)来控制仿射模式的存储带宽减小。通常,如果控制点差满足如(34)中的以下限制,则仿射运动使用4×4子块(即4×4仿射模式)。否则,它使用8×8子块(8×8仿射模式)。6-参数模型和4-参数模型的限制如下。 [0263] 6-参数仿射模型的限制: [0264] [0265] 在上述等式中,左侧表示子仿射块的跨度(span)级别的缩小,(7/2)因子指示3.5像素偏移,并且Norm(.)函数是运动矢量差基于(W×H)的归一化。在一些实施例中,Norm(.)被定义为: [0266] [0267] 4-参数仿射模型的限制: [0268] 在4-参数仿射模型中,(v2x-v0x)和(v2y-v0y)被设置如下: [0269] [0270] 在这种情况下,(v2x-v0x)和(v2y-v0y)的Norm为: [0271] [0272] 通过将(36)应用于(34),建立了4-参数仿射模型的限制。 [0273] 在另一现有实施方式中,块内的每个8×8块被视为基本单元。约束8×8块内部的所有四个4×4子块的MV,使得四个4×4子块MV的整数部分之间的最大差不超过1个像素。使得带宽为(8+7+1)*(8+7+1)/(8*8)=4样点/像素。 [0274] 两种实施方式都能够将最坏情况的带宽减小到小于4×8或8×4,但是会导致不小的编码性能损失。 [0275] 4.仿射帧间模式的示例性实施例 [0276] 在一些实施例中,可以通过分析仿射模型的参考图片中的涉及区域来解决仿射模式中的存储带宽问题。如图26所示,CU的四个角的参考像素定义了可以覆盖CU的所有参考像素的最小矩形区域。假设CU及其矩形参考区域的尺寸分别为W×H和M×N,如果(M+7)*(N+7)/(W*H),例如,平均存储带宽,小于给定值,则可以加载图26中示出的外部矩形2603中一次插值参考区域所需的像素,但是可以用不同的MV插值CU的不同子块。
[0277] 在仿射模式中,实际上为包括角点像素(corner pixel)的子块推导了角点像素的运动矢量,详细描述如下。 [0278] 对于如等式(38)中所示的6-参数模型,通过用(SW/2,SH/2)、(W–SW/2,SH/2)、(SW/2,H–SH/2)、(W–SW/2,H–SH/2)替换(x,y)到公式(38)中来推导四个角点像素的运动矢量,其中W×H和SW×SH分别是CU尺寸和子块尺寸。等式(39)至(42)中示出了四个角点像素的运动矢量,并且0、1、2和3分别是指左上角、右上角、左下角和右下角。
[0279] [0280] [0281] [0282] [0283] [0284] 利用运动矢量,参考像素(相对于当前CU的左上角)的位置可以计算如下: [0285] [0286] [0287] [0288] [0289] 表3中列出了四个角点像素中的任何两个参考像素之间的水平和垂直距离。从中可以看出,P0和P1之间的水平/垂直距离与P2和P3之间的水平/垂直距离相同,并且P0和P2之间的水平/垂直距离与P1和P3之间的水平/垂直距离相同。以horMax和verMax表示最大水平和垂直距离,则矩形参考区域为horMax*verMax。对于任何给定的仿射模型参数,都可以计算出CU的矩形参考区域,并且确定所需的存储带宽。 [0290] 表3:不同参考像素之间的示例性距离 [0291] 水平距离 垂直距离 (P0,P1) |a*(W-SW)+W-1| |e*(W-SW)| (P0,P2) |b*(H-SH)| |d*(H-SH)+H-1| (P0,P3) |a*(W-SW)+b*(H-SH)+W-1| |e*(W-SW)+d*(H-SH)+H-1| (P1,P2) |a*(W-SW)-b*(H-SH)+W-1| |-e*(W-SW)+d*(H-SH)+H-1| (P1,P3) |b*(H-SH)| |d*(H-SH)+H-1| (P2,P3) |a*(W-SW)+W-1| |e*(W-SW)|
[0292] 类似地,对于等式(47)中的4-参数仿射模型,用-b和a代替等式(39)至(46)和表3中的e和f。 [0293] [0294] 5.用于子块编码工具中的存储带宽减小的示例方法 [0295] 本公开技术的实施例克服了现有实施方式的缺点,从而为视频编码提供了更高的编码效率。在针对各种实施方式描述的以下示例中阐明了基于所公开的技术的子块编码工具中的存储带宽减小可以增强现有和未来视频编码标准。下面提供的所公开技术的示例解释了一般概念,并且不意味着被解释为限制性的。在示例中,除非明确地相反指示,否则可以组合这些示例中描述的各种特征。 [0296] 尽管在编码单元(CU)的上下文中描述了示例,但是它们也可以应用于块、预测单元(PDU)等。此外,对于预测方向0和1,分别将CU的参考矩形区域的尺寸表示为M0×N0和M1×N1,并且将CU的尺寸表示为W×H。 [0297] 示例1.提出在ATMVP/STMVP中使用的子块尺寸可以取决于CU(或当前块)的运动信息(如预测方向、运动矢量、参考图片等)。 [0298] (a)在一个示例中,具有更小尺寸的子块可以用于单向预测,并且具有更大尺寸的子块可以用于双向预测。例如,如果当前CU是单向预测的,则使用4×4、4×8或8×4子块。可替代地,如果当前CU是双向预测的,则使用8×8子块。 [0299] (b)在一个示例中,如果当前CU是单向预测的,则当CU高度大于CU宽度时使用M×N子块,以及在其他情况下使用N×M子块。N大于或等于M,诸如M=4且N=8。 [0300] (i)可替代地,如果当前CU是单向预测的,则当CU高度大于CU宽度时使用M×N子块,以及在其他情况下使用N×M子块。M大于或等于N,诸如M=8且N=4。 [0301] (c)在一个示例中,如果W<=N且H<=M,例如,N=M=8,则针对尺寸为W×H的CU禁用ATMVP/STMVP。 [0302] (i)可替代地,如果W<=N或H<=M,例如,N=M=8,则针对尺寸为W×H的CU禁用ATMVP/STMVP。 [0303] (ii)可替代地,如果W>=N且H>=M,例如,N=M=64,则针对尺寸为W×H的CU禁用ATMVP/STMVP。 [0304] (iii)可替代地,如果W>=N或H>=M,例如N=M=64,则针对尺寸为W×H的CU禁用ATMVP/STMVP。 [0305] (d)在一个示例中,不同子块的MV被约束在一个或多个所选择的MV周围的给定范围内。 [0306] (i)在一个示例中,所选择的MV是中心子块的MV。 [0307] (ii)在一个示例中,所选择的MV是左上角子块的MV。 [0308] 示例2.提出仿射模式中使用的子块尺寸可以取决于仿射模式参数、预测方向、参考图片和CU的形状。 [0309] (a)在一个示例中,CU的参考矩形区域的每个维度的填充像素的数量是FLEN1和FLEN2。对于双向预测的CU,如果(M0+FLEN1)*(N0+FLEN2)+(M1+FLEN1)*(N1+FLEN2)小于或等于TH1*W*H,则使用子块SW1×SH1;否则,使用子块SW2×SH2。 [0310] (i)在一些实施例中,对于单向预测的CU,如果(M0+FLEN1)*(N0+FLEN2)小于或等于TH2*W*H,则使用子块SW1×SH1;否则,使用子块SW2×SH2。 [0311] (ii)在一些实施例中,对于双向预测的CU,如果(M0+FLEN1)*(N0+FLEN2)大于TH3*W*H,或者如果(M1+FLEN1)*(N1+FLEN2)大于TH3*W*H,则使用子块SW2×SH2;否则,使用子块SW1×SH1。 [0312] (iii)在一些实施例中,对于双向预测的CU,可以将不同的子块尺寸用于不同的预测方向。如果(M0+FLEN1)*(N0+FLEN2)大于TH4*W*H,则对于预测方向0,使用子块SW2×SH2,否则使用子块SW1×SH1。如果(M1+FLEN1)*(N1+FLEN2)大于TH4*W*H,则对于预测方向1,使用子块SW2×SH2,否则使用子块SW1×SH1。 [0313] (iv)在一个示例中,子块的尺寸可以取决于当前块的位置。例如,当当前块在或不在编码树单元(Coding Tree Unit,CTU)边界处时,子块的尺寸可以不同。 [0314] (v)在一个示例中,SW1和SH1等于4,并且SW2和SH2等于8。可替代地,SW1×SH1等于4×8或8×4。可替代地,SW1和SH1可以取决于CU的形状。例如,对于宽度大于或等于高度的CU,将SW1×SH1设置为等于8×4,以及对于其他CU,将SW1×SH1设置为等于4×8。
[0315] (vi)可以将FLEN1和FLEN2设置为等于插值滤波器的长度,或可替代地,可以将其设置为等于插值滤波器的长度加上/减去N,例如,N等于1。可替代地,如果水平MV分量具有整数MV精度,则将FLEN1设置为零,以及如果垂直MV分量具有整数MV精度,则将FLEN2设置为零。 [0316] (vii)TH1、TH2和TH3为正浮点数。 [0317] (1)在一个示例中,将TH2设置为等于10.3125(165/16),并且将TH1、TH3和TH4设置为等于5.15625(165/32)。 [0318] (2)在一个示例中,将TH2设置为等于7.03125(225/32),并且将TH1,TH3和TH4设置为等于3.515625(225/64)。 [0319] (b)在一个示例中,始终使用子块SW1×SH1,但是,可以约束每个子块的MV。如图27所示,首先将CU划分为SW2×SH2(大于SW1×SH1)子块,然后使用中心位置来推导SW2×SH2子块的运动矢量(表示为MVC),最终推导SW2×SH2块内的每个SW1×SH1子块的MV,并且将MV限制在MVC周围的给定范围内。对于双向预测的CU,在每个预测方向上执行这样的处理。 [0320] (i)在一个示例中,SW1×SH1等于4×4,并且SW2×SH2等于8×8。左上角、右上角、左下角和右下角4×4子块的运动矢量分别被表示为MV0、MV1、MV2、MV3。对于每个预测方向X(X=0或1),将abs(MViLX[0]-MVCLX[0])限制为小于Rhori,并且将abs(MViLX[1]-MVCLX[1])限制为小于Rveri,其中Rhori和Rveri是正浮点数,并且对于不同的i(i=0、1、2或3),它们可以不同,并且MViLX[0]和MViLX[1]分别是MViLX的水平和垂直分量。 [0321] (ii)在一个示例中,SW1×SH1等于4×4,并且SW2×SH2等于4×8。顶部和底部4×4子块的运动矢量分别被表示为MV0和MV1。对于每个预测方向X(X=0或1),将abs(MViLX[0]-MVCLX[0])限制为小于Rhori,并且将abs(MViLX[1]-MVCLX[1])限制为小于Rveri,其中Rhori和Rveri是正浮点数,并且对于不同的i(i=0或1),它们可以不同,并且MViLX[0]和MViLX[1]分别是MViLX的水平和垂直分量。 [0322] (iii)在一个示例中,SW1×SH1等于4×4,并且SW2×SH2等于8×4。左侧和右侧4×4子块的运动矢量分别被表示为MV0和MV1。对于每个预测方向X(X=0或1),将abs(MViLX[0]-MVCLX[0])限制为小于Rhori,并且将abs(MViLX[1]-MVCLX[1])限制为小于Rveri,其中Rhori和Rveri是正浮点数,并且对于不同的i(i=0或1),它们可以不同,并且MViLX[0]和MViLX[1]分别是MViLX的水平和垂直分量。
[0323] (iv)在一个示例中,MVC被设置为等于SW1×SH1子块中的一个的MV,例如,MVC被设置为等于左上角SW1×SH1子块的MV。 [0324] (v)Rhori和Rveri可以取决于CU的预测方向和SW2×SH2的尺寸,例如,对于单向预测的CU,它们可以更大,以及对于双向预测的CU,它们可以更小;并且对于更大的SW2×SH2,它们可以更大,反之亦然。 [0325] (vi)在一个示例中,当SW2×SH2等于8×8/8×4/4×8并且SW1×SH1等于4×4时,Rhori和Rveri都被设置为等于1/2像素。 [0326] (vii)在一个示例中,当SW2×SH2等于8×8/8×4/4×8并且SW1×SH1等于4×4时,Rhori和Rveri都被设置为等于1/4像素。 [0327] (viii)在一个示例中,当SW2×SH2等于8×8/8×4/4×8并且SW1×SH1等于4×4时,Rhori被设置为等于1/2像素并且Rveri被设置为等于1像素。 [0328] (ix)在一个示例中,当SW2×SH2等于8×8/8×4/4×8并且SW1×SH1等于4×4时,Rhori被设置为等于1/2像素并且Rveri被设置为等于1/4像素。 [0329] 示例3.当CU尺寸大于Wmax×Hmax时,可以将其划分为几个更小的区域,并且基于示例2中描述的技术来处理每个区域。 [0330] (a)在一个示例中,当CU尺寸为128×128时,其被划分为4个64×64区域。 [0331] (b)在一个示例中,当CU尺寸为128×64或64×128时,其被划分为2个64×64区域。 [0332] 示例4.是否在子块编码的CU上应用或如何在子块编码的CU上应用存储带宽减小可以取决于CU的尺寸。 [0333] (a)在一个示例中,如果CU尺寸大于W×H,则不执行存储带宽减小方法。 [0334] (b)在一个示例中,如果CU尺寸小于W×H,则不执行存储带宽减小方法。 [0335] 上面描述的示例可以并入下面描述的例如方法2800的方法的上下文中,该方法可以在视频解码器或视频编码器处实施。 [0336] 图28示出了用于视频编码的示例性方法的流程图。方法2800包括,在步骤2810处,对于当前块的比特流表示,基于与当前块相关联的运动信息来选择子块尺寸。 [0337] 在一些实施例中,并且在示例1的上下文中,选择子块尺寸包括:如果执行转换包括单向预测,则选择第一尺寸;以及如果执行转换包括双向预测,则选择第二尺寸,并且其中第一尺寸小于第二尺寸。在一个示例中,当前块的高度大于当前块的宽度,并且子块尺寸为4×8。在另一示例中,当前块的宽度大于当前块的高度,并且子块尺寸为8×4。 [0338] 在一些实施例中,其中子块尺寸为M×N,其中当前块的尺寸为W×H,并且其中执行转换不包括可选时域运动矢量预测(ATMVP)和空时运动矢量预测(STMVP)。在一个示例中,W≤N且H≤M,并且N=M=8。在另一示例中,W≤N或H≤M,并且N=M=8。在又一示例中,W≥N且H≥M,并且N=M=64。在又一示例中,W≥N或H≥M,并且N=M=64。 [0339] 在一些实施例中,选择子块尺寸进一步基于当前块的一个或多个维度,并且运动信息包括预测方向、运动矢量或参考图片中的至少一个。在其他实施例中,执行转换基于当前块的中心子块的运动矢量。在又一些其他实施例中,执行转换基于当前块的左上角子块的运动矢量。 [0340] 方法2800包括,在步骤2820处,基于子块尺寸来执行比特流表示和当前块之间的转换。在一些实施例中,该转换从比特流表示生成当前块(例如,可以在视频解码器中实施)。在其他实施例中,该转换从当前块生成比特流表示(例如,可以在视频编码器中实施)。 [0341] 在一些实施例中,并且在示例2的上下文中,执行转换基于仿射模式,并且其中选择子块尺寸进一步基于一个或多个仿射模型参数。 [0342] 在一些实施例中,并且在示例2的上下文中,执行转换基于仿射模式,其中当前块的尺寸为W×H,其中对于第一预测方向,当前块的参考矩形区域的尺寸为M0×N0,其中对于第二预测方向,参考矩形区域的尺寸为M1×N1,并且其中参考矩形区域的每个维度的填充像素的数量分别为FLEN1和FLEN2。 [0343] 在一种场景中,执行转换包括双向预测,其中选择子块尺寸包括:如果(M0+FLEN1)×(N0+FLEN2)+(M1+FLEN1)×(N1+FLEN2)小于或等于TH1×W×H,则选择第一尺寸;否则选择第二尺寸,并且其中TH1为正分数。例如,TH1为165/32或225/64。 [0344] 在另一种场景中,执行转换包括单向预测,其中选择子块尺寸包括:如果(M0+FLEN1)×(N0+FLEN2)小于或等于TH2×W×H,则选择第一尺寸;否则选择第二尺寸,并且其中TH2为正分数。例如,TH2为165/16或225/32。 [0345] 在又一种场景中,执行转换包括双向预测,其中选择子块尺寸包括:如果(M0+FLEN1)×(N0+FLEN2)或(M1+FLEN1)×(N1+FLEN2)大于TH3×W×H,则选择第一尺寸;否则选择第二尺寸,并且其中TH3为正分数。例如,TH3为165/32或225/64。 [0346] 在又一种场景中,执行转换包括双向预测,并且不同的子块尺寸用于不同的预测方向。例如,选择子块尺寸包括:如果(M0+FLEN1)×(N0+FLEN2)小于或等于TH4×W×H,则对于第一预测方向,选择第一尺寸;否则选择第二尺寸,并且其中TH4为正分数。此外,选择子块尺寸进一步包括:如果(M1+FLEN1)×(N1+FLEN2)小于或等于TH4×W×H,则对于第二预测方向,选择第一尺寸;否则选择第二尺寸。在示例中,TH4为165/32或225/64。 [0347] 在上述示例性场景中,第一尺寸可以是4×4或4×8或8×4,并且第二尺寸可以是8×8。 [0348] 在一些实施例中,执行转换基于尺寸为SW2×SH2的子块的中心位置并且包括双向预测,并且其中尺寸为SW2×SH2的子块包括尺寸为SW1×SH1的多个子块。 [0349] 在一些实施例中,尺寸为SW2×SH2的子块的第一运动矢量和尺寸为SW1×SH1的多个子块中的一个的第二运动矢量之间的绝对差小于预定阈值。在一个示例中,SW2×SH2是8×8或8×4或4×8,SW1×SH1是4×4,并且预定阈值是1/2像素。在另一示例中,SW2×SH2是8×8或8×4或4×8,SW1×SH1是4×4,并且预定阈值是1/4像素。 [0350] 在一些实施例中,并且在示例3的上下文中,当前块的尺寸为128×128,并且执行转换包括将当前块划分为四个64×64块并针对四个64×64块中的每一个执行转换。 [0351] 在一些实施例中,当前块的尺寸为128×64或64×128,并且执行转换包括将当前块划分为两个64×64块并针对两个64×64块中的每一个执行转换。 [0352] 在一些实施例中,并且对于上述实施例,当前块可以是编码单元或预测单元。 [0353] 6.所公开的技术的示例实施方式 [0354] 图29是视频处理装置2900的框图。装置2900可以用来实施本文描述的方法中的一种或多种。装置2900可以体现在智能电话、 平板电脑、计算机、 物联网(Internet of Things,IoT)接收器等中。装置2900可以包括一个或多个处理器2902、一个或多个 存储器2904、以及视频处理硬件2906。(多个)处理器2902可以被配置为实施本文档中描述的一种或多种方法(包括但不限于方法2800)。存储器(多个存储器)2904可以用于存储用于实施本文描述的方法和技术的数据和代码。视频处理硬件2906可以用来在硬件电路中实施本文档中描述的一些技术。 [0355] 在一些实施例中,视频编码方法可以使用在如关于图29描述的硬件平台上实施的装置而实施。 [0356] 图30是示出可以在其中实施本文公开的各种技术的示例视频处理系统3000的框图。各种实施方式可以包括系统3000的一些或所有组件。系统3000可以包括用于接收视频内容的输入3002。视频内容可以以例如8或10比特多分量像素值的原始或未压缩格式而接收,或者可以是压缩或编码格式。输入3002可以表示网络 接口、外围总线接口或存储接口。网络接口的示例包括诸如以太网、无源光网络(Passive Optical Network,PON)等的有线接口和诸如Wi-Fi或蜂窝接口的无线接口。 [0357] 系统3000可以包括可以实施本文档中描述的各种编码方法的编码组件3004。编码组件3004可以将来自输入3002的视频的平均比特率减小到编码组件3004的输出,以产生视频的编码表示。编码技术因此有时被称为视频压缩或视频转码技术。编码组件3004的输出可以被存储,或者经由如由组件3006表示的通信连接而发送。在输入3002处接收的视频的存储或通信传送的比特流(或编码)表示可以由组件3008用于生成像素值或传送到显示接口3010的可显示视频。从比特流表示生成用户可视视频的过程有时被称为视频解压缩。此外,虽然某些视频处理操作被称为“编码”操作或工具,但是将理解,编码工具或操作在编码器处被使用,并且反转编码结果的对应的解码工具或操作将由解码器执行。 [0358] 外围总线接口或显示接口的示例可以包括通用 串行总线(Universal Serial Bus,USB)、或 高清晰度多媒体接口(High Definition Multimedia Interface,HDMI)、或显示端口(Displayport)等。存储接口的示例包括SATA(Serial Advanced Technology Attachment,串行高级技术附件)、PCI、IDE接口等。本文档中描述的技术可以体现在各种电子设备中,诸如 移动电话、膝上型电脑、智能电话、或能够执行数字 数据处理和/或视频显示的其他设备。 [0359] 图31是根据本技术的用于视频处理的方法3100的流程图表示。方法3100包括,在操作3110处,对于视频的编码单元和视频的比特流表示之间的转换,基于与编码单元相关联的运动信息来确定编码单元的子块的子块尺寸。方法3100包括,在操作3120处,基于确定的子块尺寸来执行该转换。在一些实施例中,该转换从比特流表示生成编码单元。在一些实施例中,该转换从编码单元生成比特流表示。 [0360] 在一些实施例中,选择子块尺寸包括在转换包括单向预测的编码单元的情况下选择第一尺寸作为子块尺寸,以及在转换包括双向预测的编码单元的情况下选择第二尺寸。第一尺寸可以小于第二尺寸。在一些实施例中,在转换包括单向预测的编码单元的情况下,第一尺寸包括4×4、4×8或8×4作为子块尺寸。在一些实施例中,在转换包括双向预测的编码单元的情况下,第二尺寸包括8×8作为子块尺寸。在一些实施例中,在转换包括单向预测的编码单元的情况下,在确定编码单元的高度大于编码单元的宽度时,编码单元包括M×N子块。在一些实施例中,在转换包括单向预测的编码单元的情况下,在确定编码单元的高度小于或等于编码单元的宽度时,编码单元包括N×M子块。在一些实施例中,N大于或等于M。 例如,M=4且N=8。在一些实施例中,M大于或等于N。例如,M=8且N=4。
[0361] 在一些实施例中,当前块的维度为W×H,W和H为正整数。转换不包括对编码单元执行可选时域运动矢量预测(ATMVP)或空时运动矢量预测(STMVP)。在一些实施例中,在W≤N且H≤M的情况下,转换不包括对编码单元执行ATMVP或STMVP,N和M为正整数。例如,N=M=8。在一些实施例中,在W≤N或H≤M的情况下,转换不包括对编码单元执行ATMVP或STMVP。例如,N=M=8。在一些实施例中,在W≥N且H≥M的情况下,转换不包括对编码单元执行ATMVP或STMVP。例如,N=M=64。在一些实施例中,在W≥N或H≥M的情况下,转换不包括对编码单元执行ATMVP或STMVP。例如,N=M=64。
[0362] 在一些实施例中,运动信息包括编码单元的预测方向、运动矢量或参考图片中的至少一个。在一些实施例中,编码单元的子块的运动矢量被约束在所选择的运动矢量周围的范围内。在一些实施例中,所选择的运动矢量是编码单元的中心子块的运动矢量。在一些实施例中,所选择的运动矢量是编码单元的左上角子块的运动矢量。 [0363] 在一些实施例中,子块尺寸基于编码单元的尺寸而选择性地调整。在一些实施例中,在编码单元大于Wmax×Hmax的情况下,不调整子块尺寸,Wmax和Hmax为正整数。在一些实施例中,在编码单元小于Wmin×Hmin的情况下,不调整子块尺寸,Wmin和Hmin为正整数。 [0364] 图32是根据本技术的用于视频处理的方法3200的流程图表示。方法3200包括,在操作3210处,对于包括子块的视频的编码单元和视频的比特流表示之间的转换,基于编码单元的尺寸来确定是否针对该转换使用存储带宽减小工具。方法3200包括,在操作3220处,基于该确定来执行该转换。在一些实施例中,在编码单元大于Wmax×Hmax的情况下,不使用存储带宽减小工具,Wmax和Hmax为正整数。在一些实施例中,在编码单元小于Wmin×Hmin的情况下,不使用存储带宽减小工具,Wmin和Hmin为正整数。在一些实施例中,该转换从比特流表示生成编码单元。在一些实施例中,该转换从编码单元生成比特流表示。 [0365] 图33是根据本技术的用于视频处理的方法3300的流程图表示。方法3300包括,在操作3310处,对于仿射模式中视频的编码单元和视频的比特流表示之间的转换,基于与编码单元相关联的信息来确定子块尺寸。方法3300包括,在操作3320处,基于子块尺寸来执行仿射模式中的转换。该转换可以从比特流表示生成编码单元。该转换可以从编码单元生成比特流表示。在一些实施例中,该信息包括仿射模式的一个或多个参数、编码单元的预测方向、编码单元的一个或多个参考图片或编码单元的形状。 [0366] 在一些实施例中,编码单元的尺寸为W×H,其中对于第一预测方向,当前块的第一参考矩形区域的尺寸为M0×N0,其中对于第二预测方向,第二参考矩形区域的尺寸为M1×N1,并且其中第一参考矩形区域和第二参考矩形区域的每个维度分别包括用于运动补偿的FLEN1个和FLEN2个附加像素。在一些实施例中,转换包括双向预测,并且其中在(M0+FLEN1)×(N0+FLEN2)+(M1+FLEN1)×(N1+FLEN2)小于或等于TH1×W×H的情况下,子块尺寸为第一尺寸,否则子块尺寸为第二尺寸,TH1为正分数。TH1可以是165/32或225/64。在一些实施例中,转换包括单向预测,并且其中在(M0+FLEN1)×(N0+FLEN2)小于或等于TH2×W×H的情况下,子块尺寸为第一尺寸,否则子块尺寸为第二尺寸,TH2为正分数。TH2可以是165/16或225/32。在一些实施例中,转换包括双向预测,并且其中在(M0+FLEN1)×(N0+FLEN2)或(M1+FLEN1)×(N1+FLEN2)大于TH3×W×H的情况下,子块尺寸为第一尺寸,否则子块尺寸为第二尺寸,TH3为正分数。TH3可以是165/32或225/64。
[0367] 在一些实施例中,转换包括双向预测,并且其中不同的子块尺寸用于不同的预测方向。在一些实施例中,在(M0+FLEN1)×(N0+FLEN2)小于或等于TH4×W×H的情况下,对于第一预测方向,子块尺寸为第一尺寸,否则子块尺寸为第二尺寸,TH4为正分数。在一些实施例中,在(M1+FLEN1)×(N1+FLEN2)小于或等于TH4×W×H的情况下,对于第二预测方向,子块尺寸为第一尺寸,否则子块尺寸为第二尺寸。TH可以是165/32或225/64。 [0368] 在一些实施例中,第一尺寸是4×4、4×8或8×4,并且其中第二尺寸是8×8。在一些实施例中,第一尺寸基于编码单元的形状而确定。在一些实施例中,FLEN1和FLEN2基于插值滤波器的长度而确定。在一些实施例中,插值滤波器的长度是L,并且其中FLEN1=L±N并且FLEN2=L±N,N为正整数。例如,N=1。在一些实施例中,FLEN1和FLEN2根据编码单元的运动矢量的精度而确定。在一些实施例中,在运动矢量的水平分量具有整数精度的情况下,FLEN1=0。在一些实施例中,在运动矢量的垂直分量具有整数精度的情况下,FLEN2=0。 [0369] 在一些实施例中,子块尺寸进一步基于编码单元的位置而确定。在一些实施例中,子块尺寸基于编码单元是否位于编码树单元的边界处而确定。在一些实施例中,转换包括双向预测,并且子块尺寸被固定为SW1×SH1。编码单元被分割为尺寸为SW2×SH2的至少一个区域,该至少一个区域包括每个的子块尺寸为SW1×SH1的多个子块,区域的运动矢量MVc根据区域的中心位置而推导,并且多个子块中的每一个的运动矢量被局限在区域的运动矢量MVc周围的范围内。在一些实施例中,对于多个子块中的每一个的一个或多个预测方向,多个子块中的每一个的运动矢量和区域的运动矢量MVc之间的绝对差小于与运动矢量的预测方向相关联的一个或多个阈值。在一些实施例中,对于多个子块中的每一个的不同预测方向,一个或多个阈值不同。在一些实施例中,一个或多个阈值基于编码单元的预测方向或区域的尺寸而确定。在一些实施例中,区域的运动矢量MVc与多个子块中的一个的第一运动矢量相同。在一些实施例中,第一运动矢量对应于多个子块中的左上角子块。 [0370] 在一些实施例中,SW2×SH2是8×8、8×4或4×8,SW1×SH1是4×4,并且一个或多个预定阈值都等于1/2像素。在一些实施例中,SW2×SH2是8×8、8×4或4×8,SW1×SH1是4×4,并且一个或多个预定阈值都等于1/4像素。在一些实施例中,SW2×SH2是8×8、8×4或4×8,SW1×SH1是4×4,一个或多个预定阈值的第一阈值等于1/2像素,并且一个或多个预定阈值中的第二阈值等于1像素。在一些实施例中,SW2×SH2是8×8、8×4或4×8,SW1×SH1是4×4,一个或多个预定阈值的第一阈值等于1/2像素,并且一个或多个预定阈值中的第二阈值等于1/4像素。
[0371] 在一些实施例中,在编码单元的尺寸大于Wmax×Hmax的情况下,编码单元被分割为至少一个区域。在一些实施例中,编码单元的尺寸为128×128,并且编码单元被分割为四个区域,每个区域的尺寸为SW2×SH2=64×64。在一些实施例中,编码单元的尺寸为128×64或64×128,并且编码单元被分割为两个区域,每个区域的尺寸为SW2×SH2=64×64。在一些实施例中,在编码单元大于Wmax×Hmax或小于Wmin×Hmin的情况下,子块尺寸是固定的,Wmax、Hmax、Wmin和Hmin为正整数。在一些实施例中,在编码单元大于Wmax×Hmax或小于Wmin×Hmin的情况下,多个子块中的每一个的运动矢量不被局限在区域的运动矢量MVc周围的范围内,Wmax、Hmax、Wmin和Hmin为正整数。
[0372] 根据前述内容,将理解,本文已经出于说明的目的描述了本公开技术的特定实施例,但是在不脱离本发明的范围的情况下可以进行各种修改。因此,本公开技术不受除了所附权利要求之外的限制。 [0373] 本专利文档中描述的主题和功能操作的实施方式可以在各种系统、数字 电子电路中、或者在计算机软件、 固件或硬件(包括本说明书中公开的结构及其结构等同物)中、或者在它们中的一个或多个的组合中实施。本说明书中描述的主题的实施方式可以实施为一个或多个 计算机程序产品,即在有形且非暂时性计算机可读介质上编码的计算机程序指令的一个或多个模块,该计算机程序指令用于由数据处理装置运行或控制数据处理装置的操作。计算机可读介质可以是机器可读存储设备、机器可读存储 基板、存储器设备、影响机器可读传播信号的物质的组合、或它们中的一个或多个的组合。术语“数据处理单元”或“数据处理装置”包含用于处理数据的所有装置、设备和机器,包括例如可编程处理器、计算机、或多个处理器或计算机。除了硬件之外,装置还可以包括为所讨论的计算机程序创建运行环境的代码,例如,构成处理器固件、协议栈、 数据库管理系统、 操作系统、或它们中的一个或多个的组合的代码。 [0374] 计算机程序(也已知为程序、软件、软件应用、脚本或代码)可以以任何形式的编程语言(包括编译或解释语言)编写,并且其可以以任何形式部署,包括作为独立程序或作为适合在计算环境中使用的模块、组件、子例程或其他单元。计算机程序不一定对应于文件系统中的文件。程序可以存储在保存其他程序或数据(例如,存储在 标记语言文档中的一个或多个脚本)的文件的一部分中,存储在专用于所讨论的程序的单个文件中,或存储在多个协调文件中(例如,存储一个或多个模块、子程序或代码部分的文件)。计算机程序可以被部署以在一个计算机上或在位于一个 站点上或跨多个站点分布并通过通信网络互连的多个计算机上运行。 [0375] 本说明书中描述的过程和逻辑流程可以由运行一个或多个计算机程序的一个或多个可编程处理器执行,以通过对输入数据进行操作并生成输出来执行功能。过程和逻辑流程也可以由 专用逻辑电路执行,并且装置也可以实施为专用 逻辑电路,例如,FPGA(Field Programmable Gate Array,现场可编程 门阵列)或ASIC(Application Specific Integrated Circuit, 专用集成电路)。 [0376] 适合于运行计算机程序的处理器包括例如通用和专用 微处理器、以及任何类型的数字计算机的任何一个或多个处理器。通常,处理器将从 只读存储器或 随机存取存储器或两者接收指令和数据。计算机的基本元件是用于执行指令的处理器和用于存储指令和数据的一个或多个存储器设备。通常,计算机还将包括用于存储数据的一个或多个 大容量存储设备(例如,磁盘、磁光盘或光盘),或可操作地耦合以从该一个或多个大容量存储设备接收数据或向该一个或多个大容量存储设备传递数据、或者从其接收数据并向其传递数据。然而,计算机不需要这样的设备。适用于存储计算机程序指令和数据的计算机可读介质包括所有形式的 非易失性存储器、介质和存储器设备,包括例如 半导体存储器设备,例如EPROM、EEPROM和闪存设备。处理器和存储器可以由专用逻辑电路补充或并入专用逻辑电路中。 [0377] 旨在将说明书与附图一起视为仅示例性的,其中示例性意味着示例。如本文所使用的,“或”的使用旨在包括“和/或”,除非上下文另外明确地指示。 [0378] 虽然本专利文档包含许多细节,但这些细节不应被解释为对任何发明或可能要求保护的范围的限制,而是作为特定于特定发明的特定实施例的特征的描述。在本专利文档中在单独的实施例的上下文中描述的某些特征也可以在单个实施例中组合实施。相反,在单个实施例的上下文中描述的各种特征也可以分别在多个实施例中或以任何合适的子组合实施。此外,尽管特征可以在上面描述为以某些组合起作用并且甚至最初如此要求保护,但是在一些情况下可以从组合排除来自所要求保护的组合的一个或多个特征,并且所要求保护的组合可以针对子组合或子组合的变化。 [0379] 类似地,虽然在附图中以特定顺序描绘了操作,但是这不应该被理解为需要以所示的特定顺序或以先后顺序执行这样的操作或者执行所有示出的操作以实现期望的结果。此外,在本专利文档中描述的实施例中的各种系统组件的分离不应被理解为在所有实施例中都需要这样的分离。
[0380] 仅描述了一些实施方式和示例,并且可以基于本专利文档中描述和示出的内容来进行其他实施方式、增强和变化。
高效检索全球专利
专利汇是专利免费检索,专利查询,专利分析-国家发明专利查询检索分析平台,是提供专利分析,专利查询,专利检索等数据服务功能的知识产权数据服务商。
我们的产品包含105个国家的1.26亿组数据,免费查、免费专利分析。
申请试用
专利汇分析报告产品可以对行业情报数据进行梳理分析,涉及维度包括行业专利基本状况分析、地域分析、技术分析、发明人分析、申请人分析、专利权人分析、失效分析、核心专利分析、法律分析、研发重点分析、企业专利处境分析、技术处境分析、专利寿命分析、企业定位分析、引证分析等超过60个分析角度,系统通过AI智能系统对图表进行解读,只需1分钟,一键生成行业专利分析报告。
申请试用
该功能需要专业版企业版VIP权限,您可以:
您也可以联系官方QQ: 2157717237 电话: 13264338900
|