一种使用基于历史的运动矢量预测的编码器、解码器及相应方法与流程


numhmvpcand=0将变量numhmvpcand设置为0来完成。基本上,使用变量numhmvpcand跟踪hmvp列表(hmvp list)中有效候选的数量,并且只有以范围0
……ꢀ
numhmvpcand内的索引为起始的hmvp候选还用于构建融合列表。其中,初始化是根据预 定义的条件进行的。一个分块组可以包括一个或多个分块,一个分块包括一个或多个ctu。 从左到右以分块为单位逐行完成对ctu的处理。一般的层次结构是:图像包含分块组,然 后分块组包含分块。分块包含ctu,且从分块的左列边界开始到该分块的右列边界的每组 ctu构成该分块内部的一个ctu行。
13.换言之,可以通过检查给定ctu的地址与列表中的ctu的地址是否相同,来识别分块 中的每个ctu行中的第一个ctu,其中,该列表存储以ctb为单位的左分块列边界的地址, 该地址间接表示分块中的每个ctu行中的第一个ctu。
14.根据前述方面,在所述方法的一种可能的实现方式中,所述对当前ctu行对应的 hmvp列表进行初始化可以包括以下步骤:
15.重置当前ctu行对应的所述hmvp列表;和/或
16.为当前ctu行对应的所述hmvp列表设置默认值;和/或
17.基于编码和/或扫描顺序上的前一个ctu行中的ctu的hmvp列表对当前ctu行对应 的所述hmvp列表进行初始化。
18.这里,可以在满足以下条件时对所述hmvp列表进行初始化:
19.ctbaddrx==ctbtotilecolbd[ctbaddrx]。
[0020]
列表ctbtotilecolbd[ctbaddrx]包括从水平ctb地址到以ctb为单位的左分块列边界 的地址的转换,“ctbaddrx”的范围为“0至picwidthinctbsy”(包括端值)。因此,在水平 ctb地址ctbaddrx与左分块列边界的地址相同时,可以满足以下等式:
[0021]
ctbaddrx==ctbtotilecolbd[ctbaddrx]。
[0022]
其中,该左分块列边界的地址基本上是分块中的每个ctu行中的第一个ctu。当满足 上述条件时,numhmvpcand设置为0(numhmvpcand=0)。这相当于重置或清空hmvp 列表。
[0023]
根据前述方面或前述方面的任一前述实现方式,在所述方法的一种可能的实现方式中, 编码和/或扫描顺序上的前一个ctu行是在所述编码和/或扫描顺序上与当前ctu行紧邻的 前一个ctu行。
[0024]
根据前述方面或前述方面的任一前述实现方式,在所述方法的一种可能的实现方式中, 所述在编码和/或扫描顺序上与当前ctu行紧邻的前一个ctu行是与所述当前ctu行空间 相邻或直接相邻的ctu行。
[0025]
根据前述方面或前述方面的任一前述实现方式,在所述方法的一种可能的实现方式中, 所述对当前ctu行对应的hmvp列表进行初始化的操作在分块组(tile group,tg)的起始 处执行,在所述分块的起始处执行,或者在所述分块中每个ctu行的起始处执行。
[0026]
这里,三种情况可以是一致的。可以在满足以下条件时对所述hmvp列表进行初始化:
[0027]
ctbaddrx==ctbtotilecolbd[ctbaddrx]。
[0028]
列表ctbtotilecolbd[ctbaddrx]包括从水平ctb地址到以ctb为单位的左分块列边界 的地址的转换,“ctbaddrx”的范围为“0至picwidthinctbsy”(包括端值)。因此,在水平 ctb地址ctbaddrx与左分块列边界的地址相同时,可以满足以下条件:
的长度加1,并将所述运动矢量添加到所述hmvp列表中。
[0046]
根据前述方面的任一前述实现方式,在所述方法的一种可能的实现方式中,仅在所述 hmvp列表中未包含运动信息的情况下才增加所述hmvp列表的长度以及添加所述运动矢 量。
[0047]
根据前述方面的任一前述实现方式,在所述方法的一种可能的实现方式中,所述运动信 息包括运动矢量和参考图像索引中的至少一种。
[0048]
根据前述方面或前述方面的任一前述实现方式,在所述方法的一种可能的实现方式中, 仅对所述hmvp列表的长度进行增加操作,直到达到所述hmvp列表的最大长度。
[0049]
根据前述方面或前述方面的任一前述实现方式,在所述方法的一种可能的实现方式中, 所述方法还包括:
[0050]
仅根据所述hmvp列表的当前长度考虑减少的hmvp列表候选的数量对所述当前ctu 的当前块进行编码,其中,所述hmvp列表的当前长度小于所述hmvp列表的最大长度。
[0051]
根据前述方面的任一前述实现方式,在所述方法的一种可能的实现方式中,所述减少的 hmvp列表候选的数量对应于或等于所述hmvp列表的当前长度。
[0052]
根据前述方面或前述方面的任一前述实现方式,在所述方法的一种可能的实现方式中, 无论分块的尺寸如何,都针对所述分块中的每个ctu行重置hmvp列表。
[0053]
根据前述方面或前述方面的任一前述实现方式,在所述方法的一种可能的实现方式中, 当分块的尺寸大于或等于阈值尺寸时,针对所述分块中的每个ctu行重置hmvp列表,和/ 或当分块的尺寸小于所述阈值尺寸时,不针对所述分块中的每个ctu行重置hmvp列表。
[0054]
根据前述方面或前述方面的任一前述实现方式,在所述方法的一种可能的实现方式中, 所述为当前ctu行对应的所述hmvp列表设置默认值包括:
[0055]
将所述hmvp列表中的运动矢量(motion vector,mv)填充为单向预测方式中的mv;
[0056]
其中,所述单向预测方式中的mv为零运动矢量或非零运动矢量;
[0057]
参考图像包括列表0(list 0,l0)中的第一参考图像;和/或
[0058]
将所述hmvp列表中的mv填充为双向预测方式中的mv,其中,所述双向预测方式 中的mv为零运动矢量或非零运动矢量,参考图像包括列表l0中的第一参考图像以及列表 1(list 1,l1)中的第一参考图像。
[0059]
根据前述方面或前述方面的任一前述实现方式,在所述方法的一种可能的实现方式中, 每个并置图像存储对应每个ctu行或对应整个图像的时域hmvp列表,所述为当前ctu 行对应的所述hmvp列表设置默认值包括:
[0060]
根据所述时域hmvp列表对当前ctu行对应的所述hmvp列表进行初始化。
[0061]
根据前述方面或前述方面的任一前述实现方式,在所述方法的一种可能的实现方式中, 所述前一个ctu行是与所述当前ctu行紧邻且位于所述当前ctu行上方的ctu行;
[0062]
所述前一个ctu行中的所述ctu为所述前一个ctu行中的第二个ctu,或者所述前 一个ctu行中的所述ctu为所述前一个ctu行中的第一个ctu。
[0063]
根据前述方面或前述方面的任一前述实现方式,在所述方法的一种可能的实现方式中, ctu行中的ctu具有对应的地址,通过以下表达式确定分块中的ctu行中的第一个ctb 来识别所述ctu行中的第一个ctu的地址:
[0064]
firstctbincturowintile=((ctbaddrints-firstctbaddrts[tileidx]
–ꢀ
numctusintile[tileidx])%colwidth[tileidx]==0)?1:0,
[0065]
if((tile_group_type!=i)&&(firstctbincturowintile))
[0066]
hmvpcandnum=0
[0067]
其中,firstctbincturowintile表示分块中的ctu行中的第一个ctu,ctbaddrintx表 示分块中的ctb的地址,firstctbaddrts表示分块中的ctb的第一地址,tileidx表示各个分 块的索引,numctusintile表示分块中的ctu的数量,colwidth表示所述分块相对于ctu 数量的宽度,“%”是模运算符,tile_group_type表示分块组的类型。
[0068]
根据前述方面或前述方面的任一前述实现方式,在所述方法的一种可能的实现方式中, ctu行中的ctu具有对应的地址,通过以下表达式判断地址j相对于当前分块的模运算是 否产生0来识别ctu行中的第一个ctu的地址:
[0069]
if(j%colwidth[tileidx]==0),
[0070]
其中,j为当前ctu的地址,colwidth[tileidx]表示所述分块相对于ctu数量的宽度, tileidx表示各个分块的索引,“%”是模运算符。
[0071]
根据前述方面或前述方面的任一前述实现方式,在所述方法的一种可能的实现方式中, ctu行中的ctu具有对应的地址,通过判断所述当前ctu的地址与列表或数组中的ctu 的地址是否相同,来识别分块中的每个ctu行中的第一个ctu的地址,从而推导出分块中 的每个ctu行中的第一个ctu,其中,所述列表或数组存储以ctb为单位的左分块列边界 的地址。
[0072]
根据前述方面或前述方面的任一前述实现方式,在所述方法的一种可能的实现方式中, 通过以下表达式判断所述当前ctu的地址与所述列表中的ctu的地址是否相同,其中,所 述列表存储以ctb为单位的所述左分块列边界的地址:
[0073]
if(ctbaddrx==ctbtotilecolbd[ctbaddrx]),
[0074]
其中,列表或数组ctbtotilecolbd[ctbaddrx]包括从水平ctb地址到以ctb为单位的 左分块列边界的地址的转换,“ctbaddrx”的范围为“0至picwidthinctbsy”(包括端值), 其中,ctbaddrx表示水平ctb的索引。
[0075]
另一方面,提供一种由编码设备实现的图像编码方法,包括:
[0076]
对图像的分块中的当前译码树单元(coding tree unit,ctu)行对应的基于历史的运动 矢量预测(history-based motion vector prediction,hmvp)列表进行初始化;
[0077]
根据所述初始化的hmvp列表处理当前ctu行中的ctu。
[0078]
根据前述方面,在所述方法的一种可能的实现方式中,所述对当前ctu行对应的 hmvp列表进行初始化包括以下步骤:
[0079]
重置当前ctu行对应的所述hmvp列表;和/或
[0080]
为当前ctu行对应的所述hmvp列表设置默认值;和/或
[0081]
基于编码和/或扫描顺序上的前一个ctu行中的ctu的hmvp列表,对当前ctu行对 应的所述hmvp列表进行初始化。
[0082]
根据前述方面,在所述方法的一种可能的实现方式中,编码和/或扫描顺序上的前一个 ctu行是在所述编码和/或扫描顺序上与当前ctu行紧邻的前一个ctu行。
[0083]
根据前述方面,在所述方法的一种可能的实现方式中,所述在编码和/或扫描顺序上与 当前ctu行紧邻的前一个ctu行是与所述当前ctu行空间相邻或直接相邻的ctu行。
[0084]
根据前述方面或前述方面的任一前述实现方式,在所述方法的一种可能的实现方式中, 所述对当前ctu行对应的hmvp列表进行初始化的操作在分块组(tile group,tg)的起始 处执行,在所述分块的起始处执行,或者在所述分块中每个ctu行的起始处执行。
[0085]
根据前述方面或前述方面的任一前述实现方式,在所述方法的一种可能的实现方式中, 所述对当前ctu行对应的hmvp列表进行初始化的操作,是在处理所述当前ctu行中编 码和/或扫描顺序上的第一个ctu之前执行的,其中,所述当前ctu行中的第一个ctu为 或者包括:
[0086]
分块组(tile group,tg)中编码和/或扫描顺序上的第一个ctu;和/或
[0087]
分块中编码和/或扫描顺序上的第一个ctu;和/或
[0088]
ctu行中编码和/或扫描顺序上的第一个ctu。
[0089]
根据前述方面或前述方面的任一前述实现方式,在所述方法的一种可能的实现方式中, 所述对当前ctu行对应的hmvp列表进行初始化包括:重置当前ctu行对应的所述 hmvp列表,其中,所述重置当前ctu行对应的所述hmvp列表包括:
[0090]
将所述hmvp列表的长度置零,以处理所述当前ctu行中编码或扫描顺序上的第一个 ctu。
[0091]
根据前述方面或前述方面的任一前述实现方式,在所述方法的一种可能的实现方式中, 所述对当前ctu行对应的hmvp列表进行初始化包括:重置当前ctu行对应的所述 hmvp列表,其中,重置分块中第一个ctu对应的hmvp列表允许并行处理或编码分块。
[0092]
根据前述方面,在所述方法的一种可能的实现方式中,所述对当前ctu行对应的 hmvp列表进行初始化包括:重置当前ctu行对应的所述hmvp列表,其中,重置每个分 块中第一个ctu对应的hmvp列表允许并行处理或编码分块。
[0093]
根据前述方面或前述方面的任一前述实现方式,在所述方法的一种可能的实现方式中, 所述对当前ctu行对应的hmvp列表进行初始化的操作是在处理各个ctu行中的第一个 ctu之前针对分块中的每个ctu行执行的。
[0094]
根据前述方面或前述方面的任一前述实现方式,在所述方法的一种可能的实现方式中, 所述重置当前ctu行对应的所述hmvp列表还包括:
[0095]
当使用运动矢量对第一个ctu的块进行编码,即进行帧间编码时,将所述hmvp列表 的长度加1,并将所述运动矢量添加到所述hmvp列表中。
[0096]
根据前述方面或前述方面的任一前述实现方式,在所述方法的一种可能的实现方式中, 仅在所述hmvp列表中未包含运动信息的情况下,才增加所述hmvp列表的长度以及添加 所述运动矢量。
[0097]
根据前述方面或前述方面的任一前述实现方式,在所述方法的一种可能的实现方式中, 所述运动信息包括运动矢量和参考图像索引中的至少一种。
[0098]
根据前述方面或前述方面的任一前述实现方式,在所述方法的一种可能的实现方式中, 仅对所述hmvp列表的长度进行增加操作,直到达到所述hmvp列表的最大长度。
[0099]
根据前述方面或前述方面的任一前述实现方式,在所述方法的一种可能的实现方式中, 所述方法还包括:
[0100]
仅根据所述hmvp列表的当前长度考虑减少的hmvp列表候选的数量,对所述当前 ctu的当前块进行编码,其中,所述hmvp列表的当前长度小于所述hmvp列表的最大长 度。
[0101]
根据前述方面或前述方面的任一前述实现方式,在所述方法的一种可能的实现方式中, 所述减少的hmvp列表候选的数量对应于或等于所述hmvp列表的当前长度。
[0102]
根据前述方面或前述方面的任一前述实现方式,在所述方法的一种可能的实现方式中, 无论分块的尺寸如何,都针对所述分块中的每个ctu行重置hmvp列表。
[0103]
根据前述方面或前述方面的任一前述实现方式,在所述方法的一种可能的实现方式中, 当分块的尺寸大于或等于阈值尺寸时,针对所述分块中的每个ctu行重置hmvp列表,和/ 或当分块的尺寸小于所述阈值尺寸时,不针对所述分块中的每个ctu行重置hmvp列表。
[0104]
根据前述方面或前述方面的任一前述实现方式,在所述方法的一种可能的实现方式中, 所述为当前ctu行对应的所述hmvp列表设置默认值包括:
[0105]
将所述hmvp列表中的运动矢量(motion vector,mv)填充为单向预测方式中的mv;
[0106]
其中,所述单向预测方式中的mv为零运动矢量或非零运动矢量;
[0107]
参考图像包括列表0(list 0,l0)中的第一参考图像;和/或
[0108]
将所述hmvp列表中的mv填充为双向预测方式中的mv,其中,所述双向预测方式 中的mv为零运动矢量或非零运动矢量,参考图像包括列表l0中的第一参考图像以及列表 1(list 1,l1)中的第一参考图像。
[0109]
根据前述方面或前述方面的任一前述实现方式,在所述方法的一种可能的实现方式中, 每个并置图像存储对应每个ctu行或对应整个图像的时域hmvp列表,所述为当前ctu 行对应的所述hmvp列表设置默认值包括:
[0110]
根据所述时域hmvp列表对当前ctu行对应的所述hmvp列表进行初始化。
[0111]
根据前述方面或前述方面的任一前述实现方式,在所述方法的一种可能的实现方式中, 所述前一个ctu行是与所述当前ctu行紧邻且位于所述当前ctu行上方的ctu行;
[0112]
所述前一个ctu行中的所述ctu为所述前一个ctu行中的第二个ctu,或者所述前 一个ctu行中的所述ctu为所述前一个ctu行中的第一个ctu。
[0113]
根据前述方面或前述方面的任一前述实现方式,在所述方法的一种可能的实现方式中, ctu行中的ctu具有对应的地址,通过以下表达式判断地址j相对于当前分块的模运算是 否产生0来识别ctu行中的第一个ctu的地址:
[0114]
if(j%colwidth[tileidx]==0),
[0115]
其中,j为当前ctu的地址,colwidth[tileidx]表示所述分块相对于ctu数量的宽度, tileidx表示各个分块的索引,“%”是模运算符。
[0116]
根据前述方面或前述方面的任一前述实现方式,在所述方法的一种可能的实现方式中, ctu行中的ctu具有对应的地址,通过判断所述当前ctu的地址与列表或数组中的ctu 的地址是否相同,来识别分块中的每个ctu行中的第一个ctu的地址,从而推导出分块中 的每个ctu行中的第一个ctu,其中,所述列表或数组存储以ctb为单位的左分块列边界 的地址。
[0117]
根据前述方面或前述方面的任一前述实现方式,在所述方法的一种可能的实现方式中, 通过以下表达式判断所述当前ctu的地址与所述列表中的ctu的地址是否相同,其中,所 述列表存储以ctb为单位的所述左分块列边界的地址:
[0118]
if(ctbaddrx==ctbtotilecolbd[ctbaddrx]),
[0119]
其中,列表或数组ctbtotilecolbd[ctbaddrx]包括从水平ctb地址到以ctb为单位
的 左分块列边界的地址的转换,“ctbaddrx”的范围为“0至picwidthinctbsy”(包括端值), 其中,ctbaddrx表示水平ctb的索引。
[0120]
另一方面,提供一种解码器,所述解码器包括处理电路,用于执行根据前述方面或前述 方面的任一前述实现方式的方法。
[0121]
另一方面,提供一种编码器,所述编码器包括处理电路,用于执行根据前述方面或前述 方面的任一前述实现方式的方法。
[0122]
另一方面,提供一种计算机程序产品,所述计算机程序产品包括程序代码,用于执行根 据前述方面或前述方面的任一前述实现方式的方法。
[0123]
另一方面,提供一种计算机可读非瞬时性介质,所述计算机可读非瞬时性介质存储程序, 所述程序包括指令。当所述指令在处理器上执行时,所述处理器执行根据前述方面或前述方 面的任一前述实现方式的方法。
[0124]
另一方面,提供一种解码器,包括:
[0125]
一个或多个处理器;
[0126]
非瞬时性计算机可读存储介质,耦合至所述处理器,并存储由所述处理器执行的程序, 其中,当所述处理器执行所述程序时,所述程序配置所述解码器以执行根据前述方面或前述 方面的任一前述实现方式的方法。
[0127]
另一方面,提供一种编码器,包括:
[0128]
一个或多个处理器;
[0129]
非瞬时性计算机可读存储介质,耦合至所述处理器,并存储由所述处理器执行的程序, 其中,当所述处理器执行所述程序时,所述程序配置所述编码器以执行根据前述方面或前述 方面的任一前述实现方式的方法。
[0130]
附图和以下描述对一个或多个实施例的细节进行了阐述。其它特征、目的和优点在说明 书、附图以及权利要求中是显而易见的。
附图说明
[0131]
下面结合本发明实施例中的附图对本发明实施例进行详细描述。在附图中:
[0132]
图1a为用于实现本发明实施例的视频译码系统示例的框图;
[0133]
图1b为用于实现本发明实施例的视频译码系统另一示例的框图;
[0134]
图2为用于实现本发明实施例的视频编码器示例的框图;
[0135]
图3为用于实现本发明实施例的视频解码器示例的框图;
[0136]
图4为编码装置或解码装置示例的框图;
[0137]
图5为编码装置或解码装置另一示例的框图;
[0138]
图6示出了包括或被划分为12个分块的图像的示例,其中,所述12个分块划分为3个 分块组;
[0139]
图7示出了针对图6示例的分块组、分块以及分块内部的ctu行的重置;
[0140]
图8示出了针对分块组、分块以及分块内部的ctu行的hmvp列表重置的示例语法说 明;
[0141]
图9示出了针对分块组、分块以及分块内部的ctu行的hmvp列表重置;
[0142]
图10示出了用于融合候选列表构建和amvp候选列表构建的空间相邻块的位置的
成预测块;从当前块(当前处理/待处理的块)中减去预测块,获得残差块;在变换域中变 换残差块并量化残差块,以减少待传输(压缩)的数据量,而在解码器处,将相对于编码器 的逆处理应用于经编码或压缩的块,以重建当前块以进行表示。此外,编码器复制解码器的 处理循环,使得两者生成相同的预测(例如,帧内预测和帧间预测)和/或重建,用于对后 续块进行处理(即译码)。
[0153]
在以下视频译码系统10的实施例中,视频编码器20和视频解码器30根据图1至图3 进行描述。
[0154]
图1a为示意性框图,示出了示例性译码系统10,例如可以利用本技术技术的视频译码 系统10(或简称为译码系统10)。视频译码系统10的视频编码器20(或简称为编码器20) 和视频解码器30(或简称为解码器30)代表可用于根据本技术中描述的各种示例执行各技 术的设备示例。
[0155]
如图1a所示,译码系统10包括源设备12,源设备12用于将编码图像数据13等编码 图像数据21提供给用于对编码数据13进行解码的目的地设备14。
[0156]
源设备12包括编码器20,另外即可选地,可包括图像源16、图像预处理器18等预处 理器(或预处理单元)18、通信接口或通信单元22。
[0157]
图像源16可以包括或可以是任何类型的图像采集设备,例如用于采集真实世界图像的 摄像机,和/或任何类型的图像生成设备,例如用于生成计算机动画图像的计算机图形处理 器,或用于获取和/或提供真实世界图像、计算机生成图像(例如,屏幕内容、虚拟现实 (virtual reality,vr)图像)和/或其任何组合(例如,增强现实(augmented reality,ar) 图像)的任何类型的其它设备。所述图像源可以为存储任一上述图像的任何类型的存储器 (memory/storage)。
[0158]
区别于预处理器18和预处理单元18执行的处理,图像或图像数据17也可以称为原始 图像或原始图像数据17。
[0159]
预处理器18用于接收(原始)图像数据17,对图像数据17进行预处理,以获得经预处 理的图像19或经预处理的图像数据19。预处理器18执行的预处理可包括修剪、颜格式转 换(例如从rgb转换为ycbcr)、颜校正或去噪等。可以理解的是,预处理单元18可以 是可选组件。
[0160]
视频编码器20用于接收预处理后的图像数据19并提供经编码的图像数据21(下面将根 据图2等进一步描述)。源设备12中的通信接口22可用于:接收经编码的图像数据21并通 过通信信道13向目的地设备14等另一设备或任何其它设备发送经编码的图像数据21(或其 它任意处理后的版本),以便存储或直接重建。
[0161]
目的地设备14包括解码器30(例如视频解码器30),另外即可选地,可包括通信接口 或通信单元28、后处理器32(或后处理单元32)和显示设备34。
[0162]
目的地设备14中的通信接口28用于直接从源设备12或从存储设备等任意其它源设备 接收经编码的图像数据21(或其它任意处理后的版本),例如,存储设备为编码图像数据存 储设备,并将经编码的图像数据21提供给解码器30。
[0163]
通信接口22和通信接口28可以用于经由源设备12与目的地设备14之间的直接通信链 路(例如,直接有线或无线连接),或经由任何类型的网络(例如,有线或无线网络或其任 意组合,或任何类型的专用和公共网络),或其任意组合发送或接收经编码的图像数据
21或 编码数据13。
[0164]
例如,通信接口22可用于将经编码的图像数据21封装为报文等合适的格式,和/或使 用任意类型的传输编码或处理来处理所述经编码的图像数据,以便在通信链路或通信网络上 进行传输。
[0165]
例如,与通信接口22对应的通信接口28可用于接收传输数据,并采用任何类型的对应 传输解码或处理和/或解封装对传输数据进行处理,以获得经编码的图像数据21。
[0166]
通信接口22和通信接口28均可配置为如图1a中从源设备12指向目的地设备14的对 应通信信道13的箭头所指示的单向通信接口,或配置为双向通信接口,并且可用于发送和 接收消息等,以建立连接,确认并交换与通信链路和/或例如经编码的图像数据传输等数据 传输相关的任何其它信息,等等。
[0167]
解码器30用于接收经编码的图像数据21并提供经解码的图像数据31或经解码的图像 31(下面将根据图3或图5等进一步描述)。
[0168]
目的地设备14的后处理器32用于对经解码的图像数据31(也称为经重建的图像数据) (例如,解码图像31)进行后处理,以获得经后处理的图像数据33(例如,后处理图像 33)。后处理单元32执行的后处理可以包括例如颜格式转换(例如从ycbcr转换为rgb)、 调、修剪或重采样,或者用于产生供显示设备34等显示的经解码的图像数据31等任何其 它处理。
[0169]
目的地设备14的显示设备34用于接收经后处理的图像数据33,以向用户或观看者等显 示图像。显示设备34可以为或包括任意类型的用于表示重建后图像的显示器,例如,集成 或外部显示屏或显示器。例如,显示器可以包括液晶显示器(liquid crystal display,lcd)、 有机发光二极管(organic light emitting diode,oled)显示器、等离子显示器、投影仪、微 型led显示器、硅基液晶显示器(liquid crystal on silicon,lcos)、数字光处理器(digitallight processor,dlp)或任何类型的其它显示器。
[0170]
尽管图1a将源设备12和目的地设备14作为单独的设备进行描述,但是设备实施例还 可以包括两种设备或两种功能,即源设备12或对应功能以及目的地设备14或对应功能。在 这类实施例中,源设备12或对应功能以及目的地设备14或对应功能可以使用相同的硬件和 /或软件或通过单独的硬件和/或软件或其任意组合来实现。
[0171]
根据描述,图1a所示的源设备12和/或目的地设备14中的不同单元或功能的存在和 (准确)划分可能根据实际设备和应用而有所不同,这对技术人员来说是显而易见的。
[0172]
编码器20(例如视频编码器20)或解码器30(例如视频解码器30),或编码器20和解 码器30两者都可经由如图1b所示的处理电路实现,如一个或多个微处理器、数字信号处理 器(digital signal processor,dsp)、专用集成电路(application-specific integrated circuit, asic)、现场可编程门阵列(field-programmable gate array,fpga)、离散逻辑、硬件、视频 译码专用处理器或其任意组合。编码器20可以通过处理电路46实现,以包含参照图2编码 器20论述的各种模块和/或本文描述的任何其它编码器系统或子系统。解码器30可以通过 处理电路46实现,以包含参照图3解码器30论述的各种模块和/或本文描述的任何其它解码 器系统或子系统。所述处理电路可用于执行下文描述的各种操作。如图5所示,如果部分技 术在软件中实施,则设备可以将软件的指令存储在合适的非瞬时性计算机可读存储介质中, 并且使用一个或多个处理器在硬件中执行指令,从而执行本发明技术。
视频序列的图像序列中的图像。接收的图像或图像数据也可以是经预处理的图像19(或经 预处理的图像数据19)。为简单起见,以下描述使用图像17。图像17也可称为当前图像或 待编码的图像(尤其是在视频译码中将当前图像与其它图像区分开时,其它图像例如同一视 频序列,即也包括当前图像的视频序列,中的之前经编码图像和/或经解码图像)。
[0181]
(数字)图像为或可以看作具有强度值的像素点的二维阵列或矩阵。阵列中的像素点也 可以称为像素(pixel或pel)(图像元素的简称)。图像的尺寸和/或分辨率由阵列或图像在水 平和垂直方向(或轴)上的像素点数量定义。为了表示颜,通常使用三种颜分量,即该 图像可表示为三个像素点阵列或包括三个像素点阵列。在rgb格式或颜空间中,图像包 括对应的红、绿和蓝像素点阵列。然而,在视频译码中,每个像素通常由亮度和度 格式或在颜空间中表示,例如,ycbcr,包括y表示的亮度分量(有时也用l指示)和 cb和cr表示的两个度分量。亮度(或简称luma)分量y表示亮度或灰度级强度(例如, 在灰度图像中),而两个度(或简称chroma)分量cb和cr表示度或颜信息分量。因 此,ycbcr格式的图像包括亮度像素点值(y)的亮度像素点阵列和度值(cb和cr)的 两个度像素点阵列。rgb格式的图像可以转换或变换为ycbcr格式,反之亦然,该过程 也称为颜变换或转换。如果图像是单的,则该图像可以仅包括亮度像素点阵列。相应地, 例如,图像可以为单格式的亮度像素点阵列或4:2:0、4:2:2和4:4:4彩格式的亮度像素点 阵列和两个对应的度像素点阵列。
[0182]
在一个实施例中,视频编码器20的实施例可包括图像分割单元(图2中未示出),用于 将图像17分割成多个(通常不重叠)图像块203。这些块也可以称为根块、宏块 (h.264/avc)或译码树块(coding tree block,ctb),或译码树单元(coding tree unit, ctu)(h.265/hevc和vvc)。分割单元可用于对视频序列中的所有图像使用相同的块尺寸 和使用限定块尺寸的对应网格,或在图像或图像子集或图像组之间改变块尺寸,并将每个图 像分割成对应块。
[0183]
在其它实施例中,视频编码器可用于直接接收图像17的块203,例如,组成图像17的 一个、几个或所有块。图像块203也可以称为当前图像块或待译码图像块。
[0184]
与图像17一样,图像块203同样是或可认为是具有强度值(像素点值)的像素点组成 的二维阵列或矩阵,但是图像块203的比图像17的小。换句话说,块203可包括一个像素 点阵列(例如,单图像17情况下的亮度阵列或彩图像情况下的亮度阵列或差阵列) 或三个像素点阵列(例如,彩图像17情况下的一个亮度阵列和两个差阵列)或根据所 采用的颜格式的任何其它数量和/或类型的阵列。块203的水平方向和垂直方向(或轴线) 上的像素点数量限定了块203的尺寸。因此,块可以为m
×
n(m列
×
n行)个像素点阵列, 或m
×
n个变换系数阵列等。
[0185]
图2所示的视频编码器20的实施例可以用于逐块对图像17进行编码,例如,按块203 进行编码和预测。
[0186]
残差计算
[0187]
残差计算单元204可用于通过如下方式基于图像块203和预测块265(下文将详细描述 预测块265)来计算残差块205(也称为残差205):逐个像素点(逐个像素)从图像块203 的像素点值中减去预测块265的像素点值,以获得像素点域中的残差块205。
[0188]
变换
[0189]
变换处理单元206可用于对残差块205的像素点值应用离散余弦变换(discrete cosinetransform,dct)或离散正弦变换(discrete sine transform,dst)等变换,以获得变换域中 的变换系数207。变换系数207也可以称为变换残差系数,表示变换域中的残差块205。
[0190]
变换处理单元206可用于应用dct/dst的整数化近似,例如为h.265/hevc指定的变 换。与正交dct变换相比,该整数近似法通常通过某一因子按比例缩放。为了维持经过正 变换和逆变换处理的残差块的范数,使用其它比例缩放因子作为变换过程的一部分。缩放因 子通常是基于某些约束条件来选择的,例如缩放因子是用于移位运算的2的幂、变换系数的 位深度、准确性与实施成本之间的权衡等。例如,通过逆变换处理单元212等为逆变换(以 及在视频解码器30处通过逆变换处理单元312等为对应逆变换)指定具体的缩放因子,以 及相应地,可以在编码器20处通过变换处理单元206等为正变换指定对应的缩放因子。
[0191]
视频编码器20(具体是变换处理单元206)的实施例可以用于直接或通过熵编码单元 270编码或压缩等输出变换参数(例如,一种或多种变换的类型),使得例如视频解码器30 可以接收并使用变换参数进行解码。
[0192]
量化
[0193]
量化单元208可以用于通过应用标量量化或矢量量化等对变换系数207进行量化,以获 得量化系数209。量化系数209也可以称为经量化的变换系数209或经量化的残差系数209。
[0194]
量化过程可以降低与一些或全部变换系数207相关联的位深度。例如,可以在量化期间 将n位变换系数向下舍入到m位变换系数,其中n大于m。可以通过调整量化参数 (quantization parameter,qp)修改量化程度。例如,对于标量量化,可以应用不同程度的 缩放来实现较细或较粗的量化。较小量化步长对应较细量化,而较大量化步长对应较粗量化。 可以通过量化参数(quantization parameter,qp)表示合适的量化步长。例如,量化参数可 以为合适的量化步长的预定义集合的索引。例如,较小的量化参数可对应精细量化(较小量 化步长),较大的量化参数可对应粗糙量化(较大量化步长),反之亦然。量化可以包括除以 量化步长,而反量化单元210等执行的对应和/或反量化可包括乘以量化步长。根据hevc 等一些标准的实施例可用于使用量化参数来确定量化步长。一般而言,可以根据量化参数使 用包含除法的等式的定点近似来计算量化步长。量化和解量化可以引入附加缩放因子以恢复 残差块的范数,由于在量化步长和量化参数的方程的定点近似中使用了缩放,可能会修改残 差块的范数。在一种示例性实现方式中,可以合并逆变换和解量化的比例。或者,可以使用 自定义量化表并从编码器向解码器指示(signal)自定义量化表,例如在码流中指示。量化 是有损操作,其中量化步长越大,损耗越大。
[0195]
在一个实施例中,视频编码器20(对应地,量化单元208)可用于输出量化参数 (quantization parameter,qp),例如,直接输出或由熵编码单元270进行编码或压缩后输出, 例如使得视频解码器30可接收并使用量化参数进行解码。
[0196]
反量化
[0197]
反量化单元210用于对量化系数执行量化单元208的反量化,得到解量化系数211,例 如,根据或使用与量化单元208相同的量化步长执行与量化单元208所执行的量化方案的反 量化方案。解量化系数211也可称为解量化残差系数211,对应于变换系数207,但是由
于 量化造成损耗,反量化系数211通常与变换系数不完全相同。
[0198]
逆变换
[0199]
逆变换处理单元212用于应用变换处理单元206应用的变换的逆变换,例如,逆离散余 弦变换(discrete cosine transform,dct)或逆离散正弦变换(discrete sine transform,dst), 以获得像素点域中的重建残差块213(或对应的解量化系数213)。重建残差块213也可称为 变换块213。
[0200]
重建
[0201]
重建单元214(例如,求和器214)用于将变换块213(即重建残差块213)添加到预测 块265,以在像素点域中得到重建块215,例如,将重建残差块213的像素点值和预测块 265的像素点值相加。
[0202]
滤波
[0203]
环路滤波单元220(或简称“环路滤波器”220)用于对重建块215进行滤波以获得滤 波块221,或通常用于对重建像素点进行滤波以获得滤波像素点。例如,环路滤波单元用于 平滑像素转变或提高视频质量。环路滤波单元220可以包括一个或多个环路滤波器,如去块 效应滤波器、像素点自适应偏移(sample-adaptive offset,sao)滤波器或一个或多个其它滤 波器,例如双边滤波器、自适应环路滤波器(adaptive loop filter,alf)、锐化、平滑滤波器 或协作滤波器或其任意组合。尽管环路滤波器单元220在图2中示为环路滤波器,但在其它 配置中,环路滤波器单元220可以实现为环后滤波器。滤波块221也可称为滤波重建块221。
[0204]
视频编码器20(具体是环路滤波单元220)的实施例可用于直接或经由熵编码单元270 编码等输出环路滤波器参数(如像素点自适应偏移信息),使得例如解码器30可以接收和应 用相同环路滤波器参数或相应的环路滤波器进行解码。
[0205]
解码图像缓冲器
[0206]
解码图像缓冲器(decoded picture buffer,dpb)230可以是存储参考图像数据以供视频 编码器20在编码视频数据时使用的参考图像存储器。dpb 230可以由多种存储器设备中的 任一种形成,例如动态随机存取存储器(dynamic random access memory,dram),包括同 步dram(synchronous dram,sdram)、磁阻ram(magnetoresistive ram,mram)、 电阻ram(resistive ram,rram)或其它类型的存储设备。解码图像缓冲器(decodedpicture buffer,dpb)230可用于存储一个或多个滤波块221。解码图像缓冲器230还可用于 存储同一当前图像或例如之前的重建图像等不同图像的其它之前的滤波块,例如之前重建和 滤波的块221,并可提供完整的之前重建即解码图像(和对应参考块和像素点)和/或部分重 建的当前图像(和对应参考块和像素点),例如用于帧间预测。解码图像缓冲器230还可用 于存储一个或多个未经滤波的重建块215,或一般存储未经滤波的重建像素点,例如,未被 环路滤波单元220滤波的重建块215,或未进行任何其它处理的重建块或重建像素点。
[0207]
模式选择(分割和预测)
[0208]
模式选择单元260包括分割单元262、帧间预测单元244和帧内预测单元254,用于从 解码图像缓冲器230或其它缓冲器(例如,列缓冲器,图中未显示)接收或获得原始块203 (当前图像17的当前块203)和重建图像数据等原始图像数据,例如,同一(当前)图像 和/或一个或多个之前解码图像的滤波和/或未经滤波的重建像素点或重建块。重建图像数据 用
法结构(用于编码像素点)编码的图像的像素点的译码块。相应地,译码块(cb)可以为 m
×
n个像素点块,其中m和n可以设为某个值使得ctb划分为译码块,这就是分割。
[0217]
在实施例中,例如根据hevc,可以通过表示为译码树的四叉树结构将译码树单元 (coding tree unit,ctu)划分为多个cu。在cu级决定是使用帧间(时域)预测还是帧内 (空间)预测对图像区域进行译码。可以根据pu划分类型将每个cu进一步划分为一个、 两个或四个pu。一个pu内使用相同的预测过程,并以pu为单位向解码器发送相关信息。 在根据pu划分类型应用预测过程获得残差块之后,可以根据与用于cu的译码树类似的另 一种四叉树结构将cu分割为变换单元(transform unit,tu)。
[0218]
在实施例中,例如根据当前研发的称为通用视频译码(versatile video coding,vvc) 的最新视频译码标准,使用四叉树和二叉树(quad-tree and binary tree,qtbt)分割来分割 译码块。在qtbt块结构中,cu可以为正方形或矩形。例如,首先通过四叉树结构分割译 码树单元(coding tree unit,ctu)。通过二叉树或三叉树(或三叉树)结构进一步分割四叉 树叶节点。分割树叶节点称为编码单元(coding unit,cu),这样的分段用于预测和变换处 理,无需其它任何分割。这意味着在qtbt译码块结构中,cu、pu和tu的块尺寸相同。 同时,还提出将三叉树分割等多重分割与qtbt块结构结合使用。
[0219]
在一个示例中,视频编码器20的模式选择单元260可以用于执行本文描述的分割技术 的任意组合。
[0220]
如上所述,视频编码器20用于从(预定的)预测模式集合中确定或选择最好或最优的 预测模式。预测模式集合可以包括帧内预测模式和/或帧间预测模式等。
[0221]
帧内预测
[0222]
帧内预测模式集合可包括35种不同的帧内预测模式,例如,像dc(或均值)模式和平 面模式的非方向性模式,或如hevc定义的方向性模式,或者可包括67种不同的帧内预测 模式,例如,像dc(或均值)模式和平面模式的非方向性模式,或如vvc中定义的方向 性模式。
[0223]
帧内预测单元254用于根据帧内预测模式集合中的帧内预测模式,使用同一当前图像的 邻块的重建像素点来生成帧内预测块265。
[0224]
帧内预测单元254(或通常为模式选择单元260)还用于将帧内预测参数(或通常为表 示块的所选帧内预测模式的信息)以语法元素266的形式输出到熵编码单元270,以包括到 经编码的图像数据21中,从而视频解码器30可执行操作,例如接收并使用用于解码的预测 参数。
[0225]
帧间预测
[0226]
在可能的实现中,帧间预测模式集合取决于可用参考图像(即,例如前述存储在dbp 230中的至少部分之前解码的图像)和其它帧间预测参数,例如取决于是否使用整个参考图 像或只使用参考图像的一部分,例如当前块的区域附近的搜索窗口区域,来搜索最佳匹配参 考块,和/或例如取决于是否执行像素内插,例如半像素和/或四分之一像素内插。
[0227]
除上述预测模式外,还可以采用跳过模式和/或直接模式。
[0228]
帧间预测单元244可包括运动估计(motion estimation,me)单元和运动补偿(motioncompensation,mc)单元(两者在图2中未示出)。运动估计单元可用于接收或获取图像块 203(当前图像17的当前图像块203)和解码图像231,或至少一个或多个先前重建
块,例 如,一个或多个其他/不同先前解码图像231的重建块,以进行运动估计。例如,视频序列 可包括当前图像和之前的解码图像231,或换句话说,当前图像和之前的解码图像231可以 为形成视频序列的图像序列的一部分或形成该图像序列。
[0229]
例如,编码器20可用于从多个其他图像中的相同或不同图像的多个参考块中选择参考 块,并将参考图像(或参考图像索引)和/或参考块的位置(x坐标、y坐标)与当前块的位 置之间的偏移(空间偏移)作为帧间预测参数提供给运动估计单元。该偏移也称为运动矢量 (motion vector,mv)。
[0230]
运动补偿单元用于获取,例如接收,帧间预测参数,并根据或使用该帧间预测参数执行 帧间预测,得到帧间预测块265。由运动补偿单元执行的运动补偿可能包含根据通过运动估 计确定的运动/块矢量来提取或生成预测块,还可能包括对子像素精度执行内插。内插滤波 可从已知像素的像素点中产生其它像素的像素点,从而潜在地增加可用于对图像块进行编码 的候选预测块的数量。一旦接收到当前图像块的pu对应的运动矢量时,运动补偿单元可在 其中一个参考图像列表中定位运动矢量指向的预测块。
[0231]
运动补偿单元还可以生成与块和视频条带相关的语法元素,以供视频解码器30在解码 视频条带的图像块时使用。可以使用分块和分块组以及相应语法作为视频条带和相应语法元 素的补充或替代。
[0232]
熵译码
[0233]
例如,熵编码单元270用于对量化系数209、帧间预测参数、帧内预测参数、环路滤波 器参数和/或其它语法元素应用熵编码算法或方案(例如,可变长度译码(variable lengthcoding,vlc)方案、上下文自适应vlc(context adaptive vlc,cavlc)方案、算术编码 方案、二值化、上下文自适应二进制算术编码(context adaptive binary arithmetic coding, cabac)、基于语法的上下文自适应二进制算术编码(syntax-based context-adaptive binaryarithmetic coding,sbac)、概率区间分割熵(probability interval partitioning entropy,pipe) 译码或其它熵编码方法或技术)或旁路熵编码算法或方案(不压缩),以获得可以经由输出 端272以经编码码流21等形式输出的经编码的图像数据21,使得例如视频解码器30可以接 收并使用参数进行解码。可以将经编码码流21传输到视频解码器30,或将其存储在存储器 中以供稍后传输或由视频解码器30检索。
[0234]
视频编码器20的其它结构变体可用于对视频流进行编码。例如,基于非变换的编码器 20可以在没有变换处理单元206的情况下直接量化某些块或帧的残差信号。在另一种实现方 式中,编码器20中,量化单元208和反量化单元210可以组合成一个单元。
[0235]
解码器和解码方法
[0236]
图3示出了用于实现本技术技术的示例性视频解码器30。视频解码器30用于接收例如 由编码器20编码的编码图像数据21(例如编码比特流21),得到解码图像331。编码图像 数据或比特流包括用于解码所述编码图像数据的信息,例如表示编码视频条带(和/或分块 或分块组)的图像块的数据和相关的语法元素。
[0237]
在图3的示例中,解码器30包括熵解码单元304、反量化单元310、逆变换处理单元 312、重建单元314(例如求和器314)、环路滤波器320、解码图像缓冲器(decoded picturebuffer,dpb)330、帧间预测单元344和帧内预测单元354。帧间预测单元344可以为或包 括运动补偿单元。在一些示例中,视频解码器30可执行大体上与参照图2的视频编码器 100描
offset, sao)滤波器或一个或多个其它滤波器,例如双边滤波器、自适应环路滤波器(adaptiveloop filter,alf)、锐化、平滑滤波器或协作滤波器或其任意组合。尽管环路滤波器单元 320在图3中示为环路滤波器,但在其它配置中,环路滤波器单元320可以实现为环后滤波 器。
[0249]
解码图像缓冲器
[0250]
随后将一个图像中的解码视频块321存储在解码图像缓冲器330中,解码图像缓冲器 330存储作为参考图像的解码图像331,参考图像用于其它图像和/或分别输出显示的后续运 动补偿。
[0251]
解码器30用于经由输出312等输出解码图像311,向用户呈现或供用户观看。
[0252]
预测
[0253]
帧间预测单元344的功能可以与帧间预测单元244(特别是运动补偿单元)相同,帧内 预测单元354的功能可以与帧间预测单元254相同,并基于从经编码的图像数据21接收的 分割和/或预测参数或相应信息(例如,通过熵解码单元304等解析和/或解码)决定划分或 分割并执行预测。模式选择单元360可用于基于重建图像、块或相应像素点(经滤波或未经 滤波)执行每个块的预测(帧内或帧间预测),以获得预测块365。
[0254]
当将视频条带编码为帧内编码(i)条带时,模式选择单元360的帧内预测单元354用 于根据指示的帧内预测模式和来自当前图像的先前解码块的数据生成当前视频条带的图像块 的预测块365。当将视频图像编码为帧间编码(即,b或p)条带时,模式选择单元360的 帧间预测单元344(例如,运动补偿单元)用于基于运动矢量和从熵解码单元304接收的其 它语法元素产生当前视频条带的视频块的预测块365。对于帧间预测,可从其中一个参考图 像列表中的其中一个参考图像产生这些预测块。视频解码器30可以根据存储在dpb 330中 的参考图像,使用默认构建技术来构建参考帧列表:列表0和列表1。相同处或相似处可以 应用于使用分块(视频分块)或分块组(视频分块组)作为条带(视频条带)的补充或替代 的实施例。
[0255]
模式选择单元360用于通过解析运动矢量和其它语法元素来确定当前视频条带的视频块 的预测信息,并使用所述预测信息针对所解码的当前视频块生成预测块。例如,模式选择单 元360使用接收到的一些语法元素确定用于对视频条带的视频块进行编码的预测模式(例如, 帧内预测或帧间预测)、帧间预测条带类型(例如b条带、p条带或gpb条带)、条带的一 个或多个参考图像列表的构建信息、条带的每个帧间编码视频块的运动矢量、条带的每个帧 间编码视频块的帧间预测状态以及其它信息,以对当前视频条带的视频块进行解码。相同处 或相似处可以应用于使用分块(视频分块)或分块组(视频分块组)作为条带(视频条带) 的补充或替代的实施例。
[0256]
可以使用视频解码器30的其它变体对经编码的图像数据21进行解码。例如,解码器 30可以在没有环路滤波单元320的情况下产生输出视频流。例如,基于非变换的解码器30 可以在没有逆变换处理单元312的情况下直接反量化某些块或帧的残差信号。在另一种实现 方式中,视频解码器30中,反量化单元310和逆变换处理单元312可以组合成单个单元。
[0257]
应理解,在编码器20和解码器30中,可以对当前步骤的处理结果进一步处理,然后输 出到下一步骤。例如,在插值滤波、运动矢量推导或环路滤波之后,可以对插值滤波、运
动矢量推导或环路滤波的处理结果进行进一步的运算,例如裁剪(clip)或移位(shift)运算。
[0258]
应该注意的是,可以对当前块的推导运动矢量(包括但不限于仿射模式的控制点运动矢量、仿射、平面、atmvp模式的子块运动矢量、时域运动矢量等)进行进一步运算。例如,根据运动矢量的表示位将运动矢量的值限制在预定义范围。如果运动矢量的表示位为bitdepth,则范围为-2^(bitdepth-1)至2^(bitdepth-1)-1,其中“^”表示幂次方。例如,如果bitdepth设置为16,则范围为-32768~32767;如果bitdepth设置为18,则范围为-131072~131071。例如,推导运动矢量的值(例如一个8
×
8块中的4个4
×
4子块的mv)被限制,使得所述4个4
×
4子块mv的整数部分之间的最大差值不超过n个像素,例如不超过1个像素。这里提供了两种根据bitdepth限制运动矢量的方法。
[0259]
方法1:通过平滑操作来去除溢出的最高有效位(mostsignificantbit,msb)
[0260]
ux=(mvx+2
bitdepth
)%2
bitdepth
(1)
[0261]
mvx=(ux》=2
bitdepth-1
)?(ux-2
bitdepth
):ux(2)
[0262]
uy=(mvy+2
bitdepth
)%2
bitdepth
(3)
[0263]
mvy=(uy》=2
bitdepth-1
)?(uy-2
bitdepth
):uy(4)
[0264]
其中,mvx为一个图像块或子块的运动矢量中的水平分量,mvy为一个图像块或子块的运动矢量中的垂直分量,ux和uy表示中间值。
[0265]
例如,如果mvx的值为

32769,则使用公式(1)和(2)之后得到的值为32767。在计算机系统中,以二进制补码的形式存储十进数。-32769的二进制补码为1,0111,1111,1111,1111(17位),这时丢弃msb,那么得到的二进制补码为0111,1111,1111,1111(十进数为32767),这与使用公式(1)和(2)之后得到的输出相同。
[0266]
ux=(mvpx+mvdx+2
bitdepth
)%2
bitdepth
(5)
[0267]
mvx=(ux》=2
bitdepth-1
)?(ux-2
bitdepth
):ux(6)
[0268]
uy=(mvpy+mvdy+2
bitdepth
)%2
bitdepth
(7)
[0269]
mvy=(uy》=2
bitdepth-1
)?(uy-2
bitdepth
):uy(8)
[0270]
这些操作可以在对mvp和mvd求和的过程中执行,如公式(5)至(8)所示。
[0271]
方法2:对值进行裁剪来去除溢出的msb
[0272]
vx=clip3(-2
bitdepth-1
,2
bitdepth-1-1,vx)
[0273]
vy=clip3(-2
bitdepth-1
,2
bitdepth-1-1,vy)
[0274]
其中,vx为一个图像块或子块的运动矢量中的水平分量,vy为一个图像块或子块的运动矢量中的垂直分量;x、y和z分别对应于mv裁剪过程的3个输入值,函数clip3的定义如下:
[0275][0276]
图4为本发明实施例提供的视频译码设备400的示意图。视频译码设备400适用于实现本文描述的公开实施例。在一个实施例中,视频译码设备400可以是解码器,例如图1a中的视频解码器30,也可以是编码器,例如图1a中的视频编码器20。
[0277]
视频译码设备400包括:入端口410(或输入端口410)和接收单元(rx)420,用于接
收数据;处理器、逻辑单元或中央处理单元(central processing unit,cpu)430,用于处理 数据;发送单元(tx)440和出端口450(或输出端口450),用于发送数据;存储器460, 用于存储数据。视频译码设备400还可以包括与入端口410、接收单元420、发送单元440 和出端口450耦合的光电(optical-to-electrical,oe)组件和电光(electrical-to-optical,eo) 组件,用作光信号或电信号的出口或入口。
[0278]
处理器430通过硬件和软件实现。处理器430可实现为一个或多个cpu芯片、核(例 如,多核处理器)、fpga、asic和dsp。处理器430与入端口410、接收单元420、发送单 元440、出端口450和存储器460通信。处理器430包括译码模块470。译码模块470实施 上文所公开的实施例。例如,译码模块470执行、处理、准备或提供各种译码操作。因此, 包括译码模块470使得视频译码设备400功能得到了显著改进,实现了视频译码设备400不 同状态的转换。或者,以存储在存储器460中并由处理器430执行的指令来实现译码模块 470。
[0279]
存储器460包括一个或多个磁盘、磁带机和固态硬盘,可以用作溢出数据存储设备,用 于在选择执行程序时存储此类程序,并且存储在程序执行过程中读取的指令和数据。例如, 存储器460可以是易失性和/或非易失性的,并且可以是只读存储器(read-only memory, rom)、随机存取存储器(random access memory,ram)、三态内容寻址存储器(ternarycontent-addressable memory,tcam)和/或静态随机存取存储器(static random-accessmemory,sram)。
[0280]
图5为示例性实施例提供的装置500的简化框图,其中,装置500可用作图1中的源设 备12和目的地设备14中的任一个或两个。
[0281]
装置500中的处理器502可以是中央处理单元。或者,处理器502可以是现有的或今后 将开发出的能够操控或处理信息的任何其它类型的设备或多个设备。虽然可以使用如图所示 的处理器502等单个处理器来实施所公开的实现方式,但使用多于一个处理器可以提高速度 和效率。
[0282]
在一种实现方式中,装置500中的存储器504可以是只读存储器(read only memory, rom)设备或随机存取存储器(random access memory,ram)设备。任何其它合适类型的 存储设备都可以用作存储器504。存储器504可以包括处理器502通过总线512访问的代码 和数据506。存储器504还可包括操作系统508和应用程序510,应用程序510包括允许处 理器502执行本文所述方法的至少一个程序。例如,应用程序510可以包括应用1至n,还 包括执行本文所述方法的视频译码应用。
[0283]
装置500还可以包括一个或多个输出设备,例如显示器518。在一个示例中,显示器 518可以是将显示器与可用于感测触摸输入的触敏元件组合的触敏显示器。显示器518可以 经由总线512耦合到处理器502。
[0284]
虽然装置500的总线512在本文中描述为单个总线,但是总线512可以包括多个总线。 此外,辅助储存器514可以直接耦合到装置500的其它组件或通过网络访问,并且可以包括 存储卡等单个集成单元或多个存储卡等多个单元。因此,装置500可以具有各种各样的配置。
[0285]
数学运算符
[0286]
本技术中使用的数学运算符与c编程语言中使用的数学运算符类似。然而,对整数除法 和算术移位运算的结果进行了更准确的定义,并且定义了其它运算,如幂运算和实值
除法。编号和计数规范通常从零开始,例如,“第一个”相当于第0个,“第二个”相当于第1个,等等。
[0287]
算术运算符
[0288]
算术运算符定义如下:
[0289]
+加法
[0290]-减法(作为双参数运算符)或者非运算(作为一元前缀运算符)
[0291]
*乘法,包括矩阵乘法
[0292][0293][0294]
÷
用来表示算术等式中的除法操作,但是这里没有截断或者四舍五入操作。
[0295]
用来表示算术等式中的除法操作,但是这里没有截断或者四舍五入操作。
[0296]
f(i)的求和,其中i取从x到y(包括y)的所有整数值。
[0297]
x%y取模运算,x除y的余数,这里x和y都必须是整数,并且x≥0和y》0。
[0298]
逻辑运算符
[0299]
逻辑运算符定义如下:
[0300]
x&&yx和y的布尔逻辑“与”操作
[0301]
x||yx和y的布尔逻辑“或”操作
[0302]
!布尔逻辑“非”操作
[0303]
x?y:z如果x为真(true)或者不等于0,那么返回y的值,否则,返回z的值。
[0304]
关系运算符
[0305]
关系运算符定义如下:
[0306]
》大于
[0307]
》=大于或者等于
[0308]
《小于
[0309]
《=小于或者等于
[0310]
==等于
[0311]
!=不等于
[0312]
当一个关系运算符应用于一个已被赋值na(notapplicable,不适用)的语法元素或变量时,na值被视为该语法元素或变量的不同值。na值被视为不等于任何其它值。
[0313]
按位运算符
[0314]
按位运算符定义如下:
[0315]
&按位与。当对整数变量运算时,运算的是整数值的二的补码表示。当对二进制 参数运算时,如果它包含的位比另一个参数少,则通过添加更多等于0的有效 位来扩展较短的参数。
[0316]
|按位或。当对整数变量运算时,运算的是整数值的二的补码表示。当对二进制参数运算时,如果它包含的位比另一个参数少,则通过添加更多等于0的有效位来扩展较短的参数。
[0317]
^按位异或。当对整数变量运算时,运算的是整数值的二的补码表示。当对二进制参数运算时,如果它包含的位比另一个参数少,则通过添加更多等于0的有效位来扩展较短的参数。
[0318]
x》》yx的二的补码整数表示向右算术移动y个二进制位。只有y为正数时才有这个函数定义。右移的结果是移进最高有效位(mostsignificantbit,msb)的比特位应该等于移位操作之前的x的msb。
[0319]
x《《yx的二的补码整数表示向左算术移动y个二进制位。只有y为正数时才有这个函数定义。左移的结果是移进最低有效位(leastsignificantbit,lsb)的比特位应该等于0。
[0320]
赋值运算符
[0321]
算术运算符定义如下:
[0322]
=赋值运算符
[0323]
++增,例如,x++等于x=x+1;当使用在数组索引中时,应该等于增操作之前变量的值。
[0324]
‑‑
减,例如,x
––
等于x=x

1;当使用在数组索引中时,应该等于减操作之前变量的值。
[0325]
+=增加说明的量,例如:x+=3等于x=x+3,x+=(-3)等于x=x+(-3)。
[0326]-=减少说明的量,例如:x

=3等于x=x

3,x

=(-3)等于x=x

(-3)。
[0327]
范围表示法
[0328]
下面的符号用来说明一个值的范围:
[0329]
x=y..zx取的整数值在y到z的范围内,包括y和z,这里x,y和z都是整数,且z大于y。
[0330]
运算优先级顺序
[0331]
当没有使用括号来显式的表示优先顺序,那么使用下面的规则:
[0332]

高优先级的运算在低优先级的运算之前计算。
[0333]

相同优先级的运算从左到右依次计算。
[0334]
下表从最高到最低的顺序说明运算的优先级,表中位置越高优先级越高。
[0335]
对于c编程语言中也使用的运算符,本规范中运算符优先级顺序与在c编程语言中优先级顺序相同。
[0336]
表:运算优先级按照最高(表格顶部)到最低(表格底部)排序
[0337][0338]
逻辑运算的文字描述
[0339]
在文中,逻辑运算语句用数学形式描述如下:
[0340][0341]
可用以下方式描述:
[0342]
...as follows/...the following applies:
[0343]

if condition 0,statement 0
[0344]

otherwise,if condition 1,statement 1
[0345]

...
[0346]

otherwise(informative remark on remaining condition),statement n
[0347]“if...”后面紧跟着“...as follows”或“...the following applies”用来介绍文中的每个
ꢀ“
if...otherwise,if...otherwise,...”语句。“if...otherwise,if...otherwise,...”的最后一个条 件始终是“otherwise,...”。间插的“if...otherwise,if...otherwise,...”语句可以通过将“... as follows”或“...the following applies”与结尾的“otherwise,...”进行匹配来识别。
[0348]
在文中,逻辑运算语句用数学形式描述如下:
[0349][0350]
可用以下方式描述:
[0351]
...as follows/...the following applies:
[0352]

if all of the following conditions are true,statement 0:
[0353]

condition 0a
[0354]

condition 0b
[0355]

otherwise,if one or more of the following conditions are true,statement 1:
[0356]

condition 1a
[0357]

condition 1b
[0358]

...
[0359]

otherwise,statement n
[0360]
在文中,逻辑运算语句用数学形式描述如下:
[0361][0362]
可用以下方式描述:
[0363]
when condition 0,statement 0
[0364]
when condition 1,statement 1
[0365]
分块组和分块
[0366]
本技术实施例可用于实现分块和分块组的概念,换句话说,用于使用分块和分块组处理 或编码图像。下文提供更详细的描述。
[0367]
分块:图像中特定分块列和特定分块行内的ctu所在的矩形区域。不同图像以及同一 图像中的分块的尺寸可能不同。
[0368]
分块列:ctu所在的矩形区域,具有与图像高度相等的高度以及指定的宽度。例如, 该宽度通过图像参数集中的语法元素指定。
[0369]
分块组:图像的分块光栅扫描中该图像的整数个分块。分块组中的分块可以仅包含在单 个nal单元中。
[0370]
分块组头:经译码的分块组的一部分,包含与分块组中表示的第一个或所有分块相关的 数据元素。
[0371]
分块组数据:包含属于给定分块组的所有分块的实际译码数据。
[0372]
分块行:ctu所在的矩形区域,具有指定的高度以及与图像宽度相等的宽度。例如, 该高度通过图像参数集中的语法元素指定。
[0373]
分块扫描:分割图像的ctu的一种特定顺序排列,其中,ctu在分块的ctu光栅扫描 中连续排列,而图像中的分块在图像的分块光栅扫描中连续排列。
[0374]
光栅扫描:矩形二维图案到一维图案的映射,以使一维图案中的第一条目来自从左到右 扫描的二维图案的最上一行,随后是第二行,第三行等图案(向下)的从左向右扫描的行。
[0375]
关于其它术语和定义,如果在此未详细说明,则参考2018年12月14日的jvet
‑ꢀ
l1001-v10以及2018年10月12日的jvet-l0686-v2,其全部内容以引用的方式并入本文中, 尤其是本文中具体引用的jvet-l1001-v10的各个部分(也称为条款)。
[0376]
图像到分块组和分块的分割:
[0377]
示例性的,如图6所示,可以将图像分为分块组和分块。例如,在图像的分块光栅扫描 中,分块组是一列分块。分块是一列ctu,这些ctu覆盖了图像中的矩形区域。在图6中, 图像被分为12个分块(分块1至12)和3个分块组(分块组1至3)。在图6中,图像包括 3个分块列和4个分块行,分块1和2属于分块组1,分块3至7属于分块组2,分块8至 12属于分块组3。图6中描绘的每个分块包括18个ctu,分布在6个ctu列和3个ctu 行中。跨分块(图像内的分块扫描顺序)光栅扫描可以是光栅扫描,例如,从位于左上角的 分块1开始逐分块行地横向扫描图像,在位于右下角的分块12处结束扫描。这通过表示分 块组扫描顺序(即跨分块光栅扫描)的虚线箭头来表示。在分块内,可以执行另一光栅扫描 (分块内光栅扫描)(分块内的ctu扫描顺序),例如,从位于左上角的ctu开始逐ctu 行地横向扫描分块,在位于右下角的ctu处结束扫描。分块内光栅扫描由实线箭头指示, 该实线箭头指示分块内的ctu扫描顺序。
[0378]
因此,如图6所示,示出的分块组由分块组成,并且分块包括整数个ctu。对于图6, 还需要说明的是,通用测试模型(versatile test model,vtm)3.1版本也使用分块组。
[0379]
图6和图7示出了涉及光栅扫描顺序的分块组(tile group,tg)。这可以与图9相比较, 图9示出了矩形tg。分块组也可以认为是包括分块的条带。
[0380]
ctb光栅和分块扫描流程
[0381]
列表colwidth[i]表示以ctb为单位的第i个分块列的宽度,其中,i的范围为0到 num_tile_columns_minus1(包括端值)。该列表colwidth[i]的推导过程如下:
[0382]
[0383]
列表rowheight[j]表示以ctb为单位的第j个分块行的高度,其中,j的范围为0到num_tile_rows_minus1(包括端值)。该列表rowheight[j]的推导过程如下:
[0384][0385]
列表colbd[i]表示以ctb为单位的第i个分块列边界的位置,其中,i的范围为0到num_tile_columns_minus1+1(包括端值)。该列表colbd[i]的推导过程如下:
[0386]
for(colbd[0]=0,i=0;i《=num_tile_columns_minus1;i++)colbd[i+1]=colbd[i]+colwidth[i](3)
[0387]
列表rowbd[j]表示以ctb为单位的第j个分块行边界的位置,其中,j的范围为0到num_tile_rows_minus1+1(包括端值)。该列表rowbd[j]的推导过程如下:
[0388]
for(rowbd[0]=0,j=0;j《=num_tile_rows_minus1;j++)rowbd[j+1]=rowbd[j]+rowheight[j](4)
[0389]
列表ctbaddrrstots[ctbaddrrs]表示从图像的ctb光栅扫描中的ctb地址到分块扫描中的ctb地址的转换,其中,ctbaddrrs的范围为0到picsizeinctbsy-1(包括端值)。该列表ctbaddrrstots[ctbaddrrs]的推导过程如下:
[0390]
[0391]
列表ctbaddrtstors[ctbaddrts]表示从分块扫描中的ctb地址到图像的ctb光栅扫描 中的ctb地址的转换,其中,ctbaddrts的范围为0到picsizeinctbsy-1(包括端值)。该 列表ctbaddrtstors[ctbaddrts]的推导过程如下:
[0392][0393]
列表tileid[ctbaddrts]表示从分块扫描中的ctb地址到分块id的转换,其中, ctbaddrts的范围为0到picsizeinctbsy-1(包括端值)。该列表tileid[ctbaddrts]的推导过 程如下:
[0394][0395]
列表numctusintile[tileidx]表示从分块索引到分块中ctu的数量的转换,其中, tileidx的范围为0到picsizeinctbsy-1(包括端值)。该列表numctusintile[tileidx]的推导 过程如下:
[0396][0397]
列表firstctbaddrts[tileidx]表示从分块id到分块中第一个ctb的分块扫描中的ctb 地址的转换,其中,tileidx的范围为0到numtilesinpic-1(包括端值)。该列表 firstctbaddrts[tileidx]的推导过程如下:
[0398][0399]
columnwidthinlumasamples[i]的值表示以亮度像素点为单位的第i个分块列的宽度, 并被设置为与colwidth[i]《《ctblog2sizey相等,其中,i的范围为0到 num_tile_columns_minus1(包括端值)。
[0400]
rowheightinlumasamples[j]的值表示以亮度像素点为单位的第j个分块行的高度,并 被设置为与rowheight[j]《《ctblog2sizey相等,其中,j的范围为0到num_tile_
rows_minus1(包括端值)。
[0401]
图像参数集原始字节序列净荷(raw byte sequence payload,rbsp)语法
[0402]
分块和分块组的图像参数集语法如下所示。
[0403][0404]
分块组头语法
[0405]
[0406][0407]
分块组数据语法
[0408]
[0409][0410]
图像参数集语义
[0411]
single_tile_in_pic_flag等于1表示在每个参考pps的图像中只有一个分块。 single_tile_in_pic_flag等于0表示在每个参考pps的图像中有不止一个分块。
[0412]
码流一致性要求,对于cvs内激活的所有pps,single_tile_in_pic_flag的值应相同。
[0413]
num_tile_columns_minus1加1表示分割后的图像中分块列的数量。 num_tile_columns_minus1应在范围0到picwidthinctbsy-1内(包括端值)。如果不存在, 则推断num_tile_columns_minus1的值等于0。
[0414]
num_tile_rows_minus1加1表示分割后的图像中分块行的数量。num_tile_rows_minus1 应在范围0到picheightinctbsy-1内(包括端值)。如果不存在,则推断 num_tile_rows_minus1的值等于0。
[0415]
将变量numtilesinpic设置为等于 (num_tile_columns_minus1+1)*(num_tile_rows_minus1+1)。
[0416]
当single_tile_in_pic_flag等于0时,numtilesinpic应大于1。
[0417]
uniform_tile_spacing_flag等于1表示分块列边界以及分块行边界在整个图像中是一致分 布的。uniform_tile_spacing_flag等于0表示分块列边界以及分块行边界在整个图像中并不是 一致分布的,而是使用语法元素tile_column_width_minus1[i]和tile_row_height_minus1[i] 显式地指示。如果不存在,则推断uniform_tile_spacing_flag的值等于1。
[0418]
tile_column_width_minus1[i]加1表示以ctb为单位的第i个分块列的宽度。
[0419]
tile_row_height_minus1[i]加1表示以ctb为单位的第i个分块行的高度。
[0420]
如“ctb光栅和分块扫描过程”部分所述,通过调用ctb光栅和分块扫描转换过程, 可以得出以下变量:
[0421]

表示以ctb为单位的第i个分块列的宽度的列表colwidth[i],其中,i的范围为0 到num_tile_columns_minus1(包括端值);
[0422]

表示以ctb为单位的第j个分块行的高度的列表rowheight[j],其中,j的范围为 0到num_tile_rows_minus1(包括端值);
[0423]

表示以ctb为单位的第i个分块列边界的位置的列表colbd[i],其中,i的范围为 0到num_tile_columns_minus1+1(包括端值);
[0424]

表示以ctb为单位的第j个分块行边界的位置的列表rowbd[j],其中,j的范围为 0到num_tile_rows_minus1+1(包括端值);
[0425]

表示从图像的ctb光栅扫描中的ctb地址到分块扫描中的ctb地址的转换的列表 ctbaddrrstots[ctbaddrrs],其中,ctbaddrrs的范围为0到picsizeinctbsy-1 (包括端值);
[0426]

表示从分块扫描中的ctb地址到图像的ctb光栅扫描中的ctb地址的转换的列表 ctbaddrtstors[ctbaddrts],其中,ctbaddrts的范围为0到picsizeinctbsy-1(包 括端值);
[0427]

表示从分块扫描中的ctb地址到分块id的转换的列表tileid[ctbaddrts],其中, ctbaddrts的范围为0到picsizeinctbsy-1(包括端值);
[0428]

表示从分块索引到分块中ctu的数量的转换的列表numctusintile[tileidx],其中, tileidx的范围为0到picsizeinctbsy-1(包括端值);
[0429]

表示从分块id到分块中第一个ctb的分块扫描中的ctb地址的转换的列表 firstctbaddrts[tileidx],其中,tileidx的范围为0到numtilesinpic-1(包括端值);
[0430]

表示以亮度像素点为单位的第i个分块列的宽度的列表 columnwidthinlumasamples[i],其中,i的范围为0到num_tile_columns_minus1 (包括端值);
[0431]

表示以亮度像素点为单位的第j个分块行的高度的列表 rowheightinlumasamples[j],其中,j的范围为0到num_tile_rows_minus1(包括 端值)。
[0432]
columnwidthinlumasamples[i]的值和rowheightinlumasamples[j]的值均应大于0, 其中,i的范围为0到num_tile_columns_minus1(包括端值),j的范围为0到 num_tile_rows_minus1(包括端值)。
[0433]
loop_filter_across_tiles_enabled_flag等于1表示可以在参考pps的图像中跨分块边界执 行环内滤波操作。loop_filter_across_tiles_enabled_flag等于0表示在参考pps的图像中不跨 分块边界执行环内滤波操作。环内滤波操作包括去块滤波操作、像素点自适应偏移滤波操作 以及自适应环路滤波操作。如果不存在,则推断loop_filter_across_tiles_enabled_flag的值等 于1。
[0434]
分块组头语义
[0435]
tile_group_pic_parameter_set_id表示当前使用的pps的pps_pic_parameter_set_id的值。 tile_group_pic_parameter_set_id的值应在范围0至63内(包括0和63)。
[0436]
tile_group_address表示分块组中第一个分块的分块地址。tile_group_address的长度为 ceil(log2(numtilesinpic))比特。tile_group_address的值应在范围0至numtilesinpic-1 内(包括端值),并且tile_group_address的值应不等于同一编码图像中任意其它经编码的分 块组nal单元的tile_group_address的值。当tile_group_address不存在时,则推断它的值等 于0。
[0437]
num_tiles_in_tile_group_minus1加1表示分块组中的分块的数量。 num_tiles_in_tile_group_minus1的值应在范围0至numtilesinpic-1内(包括端值)。如果不 存在,则
推断num_tiles_in_tile_group_minus1的值等于0。
[0438]
根据表1,tile_group_type表示分块组的编码类型。
[0439]
表1:tile_group_type的名称关联关系
[0440]
tile_group_typetile_group_type的名称0b(b分块组)1p(p分块组)2i(i分块组)
[0441]
offset_len_minus1加1表示entry_point_offset_minus1[i]语法元素的长度,该长度以比特为单位。offset_len_minus1的值应在范围0至31内(包括0和31)。
[0442]
entry_point_offset_minus1[i]加1表示以字节为单位的第i个条目点偏移量,该第i个条目点偏移量通过offset_len_minus1加1个比特表示。分块组头之后的分块组数据由num_tiles_in_tile_group_minus1+1个子集组成,子集的索引值的范围为0到num_tiles_in_tile_group_minus1(包含0和num_tiles_in_tile_group_minus1)。分块组数据的第一个字节被认为是字节0。如果存在,出现在经编码的分块组nal单元的分块组数据部分中的预防混淆字节会被计为分块组数据的一部分,已达到子集识别的目的。子集0由经编码的分块组数据的字节0到字节entry_point_offset_minus1[0]组成(包括端值),子集k由经编码的分块组数据的字节firstbyte[k]到字节lastbyte[k]组成(包括端值),其中,k的范围为1到num_tiles_in_tile_group_minus1-1(包括端值)。字节firstbyte[k]和字节lastbyte[k]定义如下:
[0443][0444]
lastbyte[k]=firstbyte[k]+entry_point_offset_minus1[k](11)
[0445]
最后一个子集(其子集索引等于num_tiles_in_tile_group_minus1)由经编码的分块组数据的剩余字节组成。
[0446]
每个子集应由分块组中同一个分块内的所有ctu的所有编码比特组成。
[0447]
基于历史的运动矢量预测(historybasedmotionvectorpredictor,hmvp)
[0448]
本技术实施例可用于实现基于历史的运动矢量预测,或者换句话说,用于使用基于历史的运动矢量预测处理或译码图像。下文提供更详细的描述。
[0449]
例如,在通用视频译码(versatilevideocoding,vvc)中,可以通过两种方式指示帧间译码块的运动矢量:先进的运动矢量预测(advancedmotionvectorprediction,amvp)模式或融合模式。对于amvp模式,指示实际运动矢量与运动矢量预测值(motionvectorprediction,mvp)之间的差值、参考索引以及参考amvp候选列表的mvp索引。对于融合模式,指示参考融合候选列表的融合索引,并继承与融合候选相关联的所有运动信息。
[0450]
对于amvp候选列表和融合候选列表两者,运动候选都是从时域相邻译码块或空间相邻译码块推导出的。更具体地,可以通过按如下顺序检查以下四种类型的融合mvp候选来构建融合候选列表:
[0451]
1.空间融合候选(来自五个空间相邻块,如图10所示)。
[0452]
2.时域mvp(temporalmvp,tmvp)融合候选。
[0453]
3.合并的双向预测融合候选。
[0454]
4.零运动矢量融合候选。
[0455]
一旦可用融合候选的数量达到指示的最大容许融合候选的数量(例如,在常规测试条件 下为5),就终止融合候选列表构建过程。
[0456]
类似地,对于amvp候选列表,按如下顺序检查三种类型的mvp候选:
[0457]
1.多达两个空间mvp候选(一个来自b0、b1和b2,另一个来自a0和a1,如图10 所示)。
[0458]
2.时域mvp(temporal mvp,tmvp)。
[0459]
3.零mvp候选。
[0460]
因此,图10示出了用于融合候选列表构建和amvp候选列表构建的空间相邻块的位置。
[0461]
在基于历史的mvp(history-based mvp,hmvp)方法中,hmvp候选定义为先前译 码块的运动信息。在译码(即,编码和/或解码)过程中维护具有多个hmvp候选的表。每 当存在帧间译码块时,就将相关的运动信息添加到表的最后一个条目中,作为新的hmvp 候选。图11示出了整个译码流程。
[0462]
将hmvp表的尺寸(也称为长度l)设置为给定值hmvpcand(hmvpcand可以是正 整数,例如16),这表示可以向表中添加多达16个hmvp候选。如果有超过16个hmvp 候选来自先前译码块,则例如,使用先入先出(first in first out,fifo)规则,使得该表中 始终包含最近的先前编码的16个运动矢量候选。图12示出了hmvp方法中更新hmvp表 的示例。图12(a)示出了一个示例,其中,使用fifo规则移除hmvp候选并将新的候选添 加到所提出的方法中所使用的表中。
[0463]
为了进一步提高译码效率,引入了如图12(b)所示的约束fifo规则,其中,在向表中插 入hmvp候选时,首先进行冗余校验,以搜索表中是否存在相同的hmvp候选。如果存在, 则从表中删除该相同的hmvp候选,并且之后的(按照fifo的顺序)所有hmvp候选都 会移动,即将它们的hmvp候选索引减1。
[0464]
可以在融合候选列表的构建过程中使用hmvp候选。例如,在tmvp候选之后,插入 表中从最后一个条目到第一个条目中的所有hmvp候选。对hmvp候选进行修剪 (pruning)。一旦可用融合候选的总数量达到指示的最大容许融合候选的数量,就终止融合 候选列表构建过程。
[0465]
类似地,也可以在amvp候选列表的构建过程中使用hmvp候选。例如,将表中最后 k个hmvp候选的运动矢量插入到tmvp候选之后。仅使用参考图像与amvp目标参考图 像相同的hmvp候选来构建amvp候选列表。对hmvp候选进行修剪。k可以设置为整数 值,例如,k可以为4。
[0466]
另外,当融合候选的总数大于或等于15时,可以采用截断一元加固定长度(3比特)二 值化方法对融合索引进行编码。融合候选的总数表示为n
mrg
,二值化方法见下表。
[0467]
表:融合索引的二进制串(假设n
mrg
为15)
[0468]
[0469][0470]
包含“hmvp工具”的融合候选列表推导通过以下过程产生:
[0471]
仅在merge_flag[xcb][ypb]等于1时调用此过程,其中,(xcb,ycb)表示相对于当前 图像的左上亮度像素点的当前亮度译码块的左上像素点。
[0472]
该过程的输入是:
[0473]

当前亮度译码块的左上像素点相对于当前图像的左上亮度像素点的亮度位置 (xcb,ycb);
[0474]

变量cbwidth,表示当前译码块以亮度像素点计算的宽度;
[0475]

变量cbheight,表示当前译码块以亮度像素点计算的高度;
[0476]

双向预测权重索引gbiidx。
[0477]
该过程的输出是:
[0478]

1/16分数像素点精度的亮度运动矢量mvl0[0][0]和mvl1[0][0];
[0479]

参考索引refidxl0和refidxl1;
[0480]

预测表利用率标志predflagl0[0][0]和predflagl1[0][0]。
[0481]
双向预测权重索引gbiidx设置为0。
[0482]
所述运动矢量mvl0[0][0]和mvl1[0][0]、所述参考索引refidxl0和refidxl1以及所 述预测表利用率标志predflagl0[0][0]和predflagl1[0][0]通过以下有序的步骤获得:
[0483]
1.以亮度译码块位置(xcb,ycb)、亮度译码块宽度cbwidth以及亮度译码块高度 cbheight为输入调用条款8.3.2.3中所述的从相邻编码单元获得融合候选的过程。该 过程的输出为可用性标志availableflaga0、availableflaga1、availableflagb0、 availableflagb1和availableflagb2、参考索引refidxlxa0、refidxlxa1、refidxlxb0、 refidxlxb1和refidxlxb2、预测表利用率标志predflaglxa0、predflaglxa1、 predflaglxb0、predflaglxb1和predflaglxb2、运动矢量mvlxa0、mvlxa1、 mvlxb0、mvlxb1和mvlxb2以及双向预测权重索引gbiidxa0、gbiidxa1、 gbiidxb0、gbiidxb1和gbiidxb2,其中,x为0或1。
[0484]
2.时域融合候选col的参考索引refidxlxcol以及双向预测权重索引gbiidxcol设置为0,其中,x为0或1。
[0485]
3.以亮度位置(xcb,ycb)、亮度译码块宽度cbwidth、亮度译码块高度cbheight以及变量refidxl0col为输入调用条款8.3.2.11中所述的时域亮度运动矢量预测值的推导过程。该过程的输出为可用性标志availableflagl0col和时域运动矢量mvl0col。
[0486]
变量availableflagcol、predflagl0col和predflagl1col的推导过程如下:
[0487]
availableflagcol=availableflagl0col(12)
[0488]
predflagl0col=availableflagl0col(13)
[0489]
predflagl1col=0(14)
[0490]
4.当tilegroup_type为b时,以亮度位置(xcb,ycb)、亮度译码块宽度cbwidth、亮度译码块高度cbheight以及变量refidxl1col为输入调用条款8.3.2.11中所述的时域亮度运动矢量预测值的推导过程。该过程的输出为可用性标志availableflagl1col和时域运动矢量mvl1col。变量availableflagcol和predflagl1col的推导过程如下:
[0491]
availableflagcol=availableflagl0col||availableflagl1col(15)
[0492]
predflagl1col=availableflagl1col(16)
[0493]
5.融合候选列表mergecandlist的构建过程如下:
[0494][0495]
6.将变量numcurrmergecand和numorigmergecand设置为mergecandlist中融合候选的数量。
[0496]
7.当numcurrmergecand小于(maxnummergecand-1),且numhmvpcand大于0时,执行以下操作:
[0497]

以mergecandlist和numcurrmergecand为输入调用标题为(“基于历史的融合候选的推导过程”)的下一节中所述的基于历史的融合候选的推导过程。该过程的输出为修改后的mergecandlist和numcurrmergecand。
[0498]

将numorigmergecand设置为等于numcurrmergecand。
[0499]
基于历史的融合候选的推导过程
[0500]
该过程的输入是:
[0501]

融合候选列表mergecandlist;
[0502]

列表numcurrmergecand中可用融合候选的数量。
[0503]
该过程的输出是:
[0504]

修改后的融合候选列表mergecandlist;
[0505]

修改后的列表numcurrmergecand中融合候选的数量。
[0506]
将数组ispruned[i]中的每个元素设置为假(false),其中,i=0
……
numcurrmergecand-1。将变量numorigmergecand设置为等于numcurrmergecand。
[0507]
对于hmvpcandlist[hmvpidx]中的每个候选,重复执行以下有序的步骤,直到numcurrmergecand等于(maxnummergecand-1),其中,索引hmvpidx=1..numhmvpcand。
[0508]
1.变量samemotion的推导过程如下:
[0509]

对于i=0
……
numorigmergecand-1中的任意值,如果以下条件均为真(true),则将samemotion和ispruned[i]均设置为真(true):
[0510]

候选hmvpcandlist[numhmvpcand-hmvpidx]等于融合候选mergecandlist[i];
[0511]

ispruned[i]等于假(false)。
[0512]

否则,将samemotion设置为假(false)。
[0513]
2.当samemotion等于假(false)时,将候选hmvpcandlist[numhmvpcand-hmvpidx]添加到融合候选列表中,具体如下:
[0514]
mergecandlist[numcurrmergecand++]=hmvpcandlist[numhmvpcand-hmvpidx](18)
[0515]
包含“hmvp工具”的运动矢量预测值候选列表推导通过以下过程产生:
[0516]
该过程的输入是:
[0517]

当前亮度译码块的左上像素点相对于当前图像的左上亮度像素点的亮度位置(xcb,ycb);
[0518]

变量cbwidth,表示当前译码块以亮度像素点计算的宽度;
[0519]

变量cbheight,表示当前译码块以亮度像素点计算的高度;
[0520]

当前编码单元分区的参考索引refidxlx,其中,x为0或1。
[0521]
该过程的输出是1/16分数像素点精度的运动矢量预测值候选列表mvplistlx,其中,x为0或1。
[0522]
通过以下有序的步骤推导出运动矢量预测值候选列表mvplistlx,其中,x为0或1:
[0523]
1.以亮度译码块位置(xcb,ycb)、亮度译码块宽度cbwidth、亮度译码块高度cbheight以及refidxlx为输入调用条款8.3.2.10中所述的从相邻编码单元分区获得空间运动矢量预测值候选的过程,其中,x为0或1。该过程的输出为可用性标志availableflaglxn和运动矢量mvlxn,其中,n可替换为a或b。
[0524]
2.以设置为mvlxn的mvx、设置为mvshift+2的rightshift以及设置为mvshift+2的leftshift为输入调用条款8.3.2.14中所述的运动矢量的取整过程,其中,n可替换为a或b。该过程的输出为取整后的mvlxn,其中,n可替换为a或b。
[0525]
3.如果availableflaglxa和availableflaglxb均等于1,且mvlxa不等于mvlxb,则将availableflaglxcol设置为0。
[0526]
4.否则,采用以下步骤:
[0527]

以亮度译码块位置(xcb,ycb)、亮度译码块宽度cbwidth、亮度译码块高度cbheight以及refidxlx为输入调用条款8.3.2.11中所述的时域亮度运动矢量预测值的推导过程,其中,x为0或1。该过程的输出为可用性标志 availableflaglxcol和时域运动矢量
于真(true),removeidx设置为等于hmvpidx。
[0547]
3.候选列表hmvpcandlist更新如下:
[0548]

如果identicalcandexist等于真(true)或者numhmvpcand等于6,则采用 以下步骤:
[0549]

对于i=(removeidx+1)
……
(numhmvpcand

1)的每个索引i,将 hmvpcandlist[i

1]设置为等于hmvpcandlist[i]。
[0550]

将hmvpcandlist[numhmvpcand

1]设置为等于mvcand。
[0551]

如果(identicalcandexist等于假(false)且numhmvpcand小于6),则采用 以下步骤:
[0552]

将hmvpcandlist[numhmvpcand++]设置为等于mvcand。
[0553]
下表示例性地示出了在新的分块组的起始处和每个ctu行的起始处重置hmvp列表的 语法。
[0554][0555]
在新的分块组的起始处,使用以下语法重置hmvp列表,当ctbaddrinrs== tilegroup_address,即新的分块组的起始处时,将numhmvpcand设置为0。
[0556]
在每个ctu行的起始处,即每个ctu行的第一个ctu,同样重置hmvp列表。语法 ctbaddrinrs%picwidthinctbsy==0指向每个ctu行的第一个ctu,通过将变量 numhmvpcand设置为0来重置hmvp列表。
[0557]
波前并行处理(wavefront parallel processing,wpp)
[0558]
为了提高处理效率,引入了称为波前并行处理(wavefront parallel processing,wpp)的 处理方式,其中wpp模式允许并行处理各行的ctu。在wpp模式下,通过延迟例如两个 (也可以是一个、三个或多个)连续ctu,来相对于前一个(紧邻的)ctu行对每个ctu 行进行处理。图13示出了波前并行处理。例如,参见图13,将图像分为ctu,每个线程 (行)包括11个ctu,即线程1包括ctu0至ctu10,线程2包括ctu11至ctu21,线 程3包括ctu22至ctu32,线程4包括ctu33至ctu43,以此类推。因此,在wpp模式 下,当线程1中ctu1的编解码过程完成时,可以开始线程2中ctu11的编解码过程。类 似地,当线程2中ctu12的编解码过程完成时,可以开始线程3中ctu22的编解码过程, 当线程3中ctu23的编解码过程完成时,可以开始线程4中ctu33的编解码过程,当线程 4中ctu34的编解码过程完成时,可以开始线程5中ctu44的编解码过程。
[0559]
例如,在采用基于历史的运动矢量预测(history-based motion vector prediction,hmvp) 时,本技术实施例中可以并行处理图像中的ctu。本技术实施例允许结合hmvp使用分块 或分块组。
[0560]
分块扫描定义为对分割图像的ctu的有序排列,其中ctu在分块中的ctu光栅扫描 中连续排列,而图像中的分块在图像的分块光栅扫描中连续排列。分块组头定义为经编码的 分块组的一部分,包含与分块组中表示的第一个或所有分块相关的数据元素。
[0561]
因此,一个给定图像可以包含一个或多个分块组,且每个分块组可以包含一个或多个分 块。允许对分块进行并行处理,例如,对不同分块组或分块进行并行处理。在更精细的粒度 下,还可以在给定分块组中的每一个分块中采用波前并行处理(wavefront parallel processing, wpp)或其它工具,以允许进一步的并行处理,其中,该其它工具例如采用基于ctu行的 并行性。
[0562]
本发明实施例用于,例如,在新分块组的起始处和/或新分块的起始处和/或给定分块内 的每个ctu行的起始处重置hmvp列表。因此,有利于ctu的并行处理。
[0563]
图6示出了被分为3个不同分块组和12个不同分块的图像。hmvp工具维护运动矢量 候选列表,并在处理每个译码块后对其进行维护和更新。如此,维护并不断更新hmvp列 表,直到ctu行的最后一个ctu。因此,波前并行处理工具不能在给定的图像、分块组或 分块内执行。上文已经作了进一步解释。
[0564]
图7和图8示出了针对分块组和分块,在每个ctu行的起始处重置hmvp列表的想法。
[0565]
图7涉及为图6提供的解释。也就是说,分块的数量、三个分块组以及分块组扫描顺序 (即跨分块光栅扫描)对应于已经为图6解释过的内容。图7还示出了分块内的光栅扫描, 如表示分块内的ctu扫描顺序的实线箭头所指示。除了图6之外,图7指示通过图7中分 块1、分块2以及分块3所对应的箭头进行hmvp列表重置。
[0566]
在图7中,对以下所有组合执行hmvp列表重置:
[0567]
·
每个分块组的起始处(相当于条带的起始处);
[0568]
·
分块组内每个分块的起始处;
[0569]
·
给定分块内每个ctu行的第一个ctu。
[0570]
下表中提供了可能的语法说明的第一替代方案。程序tile_group_data由属于给定分块组 的所有分块的编码数据组成。for循环“for(i=0;i《=num_tiles_in_tile_group_minus1;i++, tileidx++)”迭代给定分块组中的所有分块,且for循环“for(j=0;j《 numctusintile[tileidx];j++,ctbaddrints++)”迭代给定分块中的所有ctu。
[0571]
[0572][0573]
此语法说明如图8所示。也就是说,图8示出了针对分块组、分块以及分块内ctu行 的hmvp列表重置的可能语法说明。
[0574]
下文提供重置hmvp列表(例如,在分块内每个ctu行的起始处)的语法的第二种替 代方案:
[0575][0576]
此替代方案如图14所示。也就是说,图14示出了针对分块组、分块以及分块内ctu 行的hmvp列表重置的另一可能语法说明。
[0577]
图9给出了非一致间隔(例如,具有不同的尺寸)的三个不同分块的示例。图9可以与 图5和图6进行比较。图5和图6示出了相对于光栅扫描顺序的分块组(tile group,tg), 图9示出了矩形tg并示出了由虚线表示的分块边界。图9还示出了译码树块(coding tree
block,ctb)。
[0578]
图9示出了针对分块组、分块以及分块内ctu行起始处的hmvp列表重置。
[0579]
例如,基于前面的语法表中指定的公式重置hmvp列表。该公式如下:
[0580][0581]
只有在给定ctu的ctbaddrints等于分块组或分块的起始处,或者给定ctu的地址与 分块内给定ctu行的第一个ctu相同时,才将变量firstctbincturowintile设置为真 (true)。表达式hmvpcandnum=0用于初始化或重置hmvp列表。当变量 firstctbincturowintile设置为真(true)时,将hmvpcandnum设置为0。
[0582]
对图9中的分块1使用该公式将得出以下结果。图9中的分块1共包含12个ctu,编 号为0至11。它的colwidth为4个ctb,且firstctbaddrts的值为0。
[0583]
因此,对于ctb0、ctb4以及ctb8,firstctbincturowintile的值为1,所以对这些 ctb的hmvp列表进行重置。
[0584]
图9中的分块2包含21个ctb,colwidth为7个ctb,且firstctbaddrts的值为12。
[0585]
因此,对于ctb12、ctb19以及ctb26,firstctbincturowintile的值为1,所以对这 些ctb的hmvp列表进行重置。
[0586]
类似地,图9中的分块3共包含12个ctu,它的colwidth为4个ctb,且 firstctbaddrts的值为33。
[0587]
因此,对于ctb33、ctb37以及ctb41,firstctbincturowintile的值为1,所以对这 些ctb的hmvp列表进行重置。
[0588]
因此,通过在分块内每个ctu行的起始处(第一个ctu)重置(即“初始化”) hmvp列表,可以实现波前并行处理或类似并行处理等工具的操作。
[0589]
下文提供了用于在分块内每个ctu行的起始处重置hmvp列表的另一种语法。
[0590]
ctu行的第一个ctu的地址相同。表达式hmvpcandnum=0用于初始化或重置hmvp列 表。当变量firstctbincturowintile设置为真(true)时,将hmvpcandnum设置为0。
[0599]
编码器20和解码器30等的实施例,以及本文描述的与编码器20和解码器30等有关的 功能可以通过硬件、软件、固件或其任意组合来实现。如果以软件来实现,则各种功能可作 为一个或多个指令或代码存储在计算机可读介质中或通过通信介质传输,且由基于硬件的处 理单元执行。计算机可读介质可以包括与有形介质(如数据存储介质)对应的计算机可读存 储介质,或包括任何便于将计算机程序从一处传送到另一处的介质(例如根据通信协议)的 通信介质。以此方式,计算机可读介质通常可以对应(1)非瞬时性的有形计算机可读存储 介质,或(2)如信号或载波等通信介质。数据存储介质可为可由一或多个计算机或一或多 个处理器存取以检索用于实现本技术中描述的技术的指令、代码和/或数据结构的任何可用 介质。计算机程序产品可包括计算机可读介质。
[0600]
作为示例而非限制,这类计算机可读存储介质可以包括ram、rom、eeprom、cd
‑ꢀ
rom或其它光盘存储器、磁盘存储器或其它磁性存储设备、闪存或可用于存储指令或数据 结构形式的所需程序代码并且可由计算机访问的任何其它介质。此外,任何连接都可以适当 地称为计算机可读介质。例如,如果使用同轴缆线、光纤缆线、双绞线、数字订户线 (digital subscriber line,dsl)或例如红外线、无线电和微波等无线技术从网站、服务器或 其它远程源传输指令,那么同轴缆线、光纤缆线、双绞线、dsl或例如红外线、无线电和微 波等无线技术包含在介质的定义中。然而,应理解,计算机可读存储介质和数据存储介质并 不包括连接、载波、信号或其它瞬时性介质,而是针对非瞬时性有形存储介质。本文所使用 的磁盘和光盘包括压缩光盘(compact disc,cd)、激光光盘、光学光盘、数字多功能光盘 (digital versatile disc,dvd)、软盘和蓝光光盘,其中磁盘通常以磁性方式再现数据,而光 盘利用激光以光学方式再现数据。以上各项的组合也应包括在计算机可读介质的范围内。
[0601]
可通过如一个或多个数字信号处理器(digital signal processor,dsp)、通用微处理器、 专用集成电路(application specific integrated circuit,asic)、现场可编程逻辑阵列(fieldprogrammable logic array,fpga)或其它等效集成或离散逻辑电路等一个或多个处理器来执 行指令。因此,如本文中所使用的术语“处理器”可指前述结构或适合于实施本文中所描述 的技术的任一其它结构中的任一者。另外,在一些方面中,本文描述的各种功能可以提供在 用于编码和解码的专用硬件和/或软件模块内,或者并入到组合编解码器中。而且,所述技 术可以完全在一个或多个电路或逻辑元件中实现。
[0602]
本发明的技术可以在多种设备或装置中实现,这些设备或装置包括无线手机、集成电路 (integrated circuit,ic)或一组ic(例如芯片组)。本技术中描述各种组件、模块或单元是 为了强调用于执行所揭示的技术的装置的功能方面,但未必需要由不同硬件单元实现。实际 上,如上所述,各种单元可以结合合适的软件和/或固件组合在编解码器硬件单元中,或者 通过互操作硬件单元(包括如上所述的一个或多个处理器)的集合来提供。
[0603]
本发明包括以下各个方面,其中编号不一定与本技术其他部分中使用的编号一致。
[0604]
第一方面,一种由解码设备实现的图像译码方法包括:对图像的分块中的当前ctu行 对应的基于历史的运动矢量预测(history-based motion vector prediction,hmvp)列表进行 初始化(或构建);根据所述初始化的hmvp列表处理当前ctu行中的ctu。
[0605]
根据第一方面所述的方法,在第二方面中,当前ctu行对应的所述hmvp列表通过如 下方式初始化:重置(或清空)当前ctu行对应的所述hmvp列表;和/或为当前ctu行 对应的所述hmvp列表设置默认值;和/或根据译码和/或扫描顺序上的前一个ctu行中的 ctu的hmvp列表对当前ctu行对应的所述hmvp列表进行初始化(即,前一个是指译 码和/或扫描顺序上的前一个,在一实施例中,所述前一个ctu行可以是在所述译码和/或扫 描顺序上与当前ctu行紧邻的前一个ctu行,例如,与所述当前ctu行空间相邻或直接 相邻的ctu行)。
[0606]
根据第一方面或第二方面所述的方法,在第三方面中,所述对当前ctu行对应的 hmvp列表进行初始化(例如重置)的操作在分块组(tile group,tg)的起始处执行,在 分块的起始处执行,或者在分块中每个ctu行的起始处执行。
[0607]
根据第一方面至第三方面中任一项所述的方法,在第四方面中,所述对当前ctu行对 应的hmvp列表进行初始化(例如重置)的操作是在处理(例如译码)所述当前ctu行中 译码和/或扫描顺序上的第一个ctu时(例如之前)执行的,其中,所述当前ctu行中的 第一个ctu为或者包括:分块组(tile group,tg)中译码和/或扫描顺序上的第一个ctu; 和/或分块中译码和/或扫描顺序上的第一个ctu;和/或ctu行中译码和/或扫描顺序上的第 一个ctu。重置分块中第一个ctu(例如每个分块中的第一个ctu)对应的hmvp列表允 许并行处理或译码分块。重置ctu行中第一个ctu(例如分块中每个ctu行的第一个 ctu)对应的hmvp列表允许并行处理同一分块中独立的ctu行。已经发现,特别是对于 较大的ctu,对应每个ctu行的重置对压缩性能的影响可以忽略不计,但是可以减少处理 或译码时间。
[0608]
根据第一方面至第四方面中任一项所述的方法,在第五方面中,所述对当前ctu行对 应的hmvp列表进行初始化(例如重置)的操作是在处理(例如译码)各个ctu行中的第 一个ctu时(例如之前),例如,在对译码顺序上的第一个ctu的第一个ctb(例如亮度 或度ctb)的第一个块(例如cb,如第一个叶子节点cb)进行处理或译码之前,针对 分块中的每个ctu行执行的。
[0609]
根据第一方面至第五方面中任一项所述的方法,在第六方面中,所述对当前ctu行对 应的hmvp列表进行初始化包括:重置当前ctu行对应的所述hmvp列表,其中,所述重 置当前ctu行对应的所述hmvp列表包括:将所述hmvp列表的长度(也可以是长度指示 符或长度参数,如hmvpcandnum)置零(例如hmvpcandnum=0),以处理(例如译码) 所述当前ctu行中译码或扫描顺序上的第一个ctu。通过将所述hmvp列表的长度置零 (并且仅逐步扩大所述hmvp列表)来重置所述hmvp列表,与具有全长(即最大长度) hmvp列表的情况相比,可以减少针对待译码块的预测而校验的候选的数量。
[0610]
根据第六方面所述的方法,在第七方面中,所述重置当前ctu行对应的所述hmvp列 表还包括:当使用运动矢量对第一个ctu的块(例如第一个块或连续的块,其中,块可以 是ctb或cb,如叶子节点cb)进行译码(即进行帧间译码)时,将所述hmvp列表的长 度加1,并将所述运动矢量添加到所述hmvp列表中。
[0611]
根据第七方面所述的方法,在第八方面中,仅在所述hmvp列表中未包含运动信息(例如,运动信息包括运动矢量或参考图像索引)时才增加所述hmvp列表的长度以及添 加所述运动矢量(修剪实施例)。
[0612]
根据第六方面至第八方面中任一项所述的方法,在第九方面中,仅对所述hmvp列表 的长度进行增加操作,直到达到所述hmvp列表的最大长度。
[0613]
根据第六方面至第九方面中任一项所述的方法,在第十方面中,所述方法还包括:仅根 据所述hmvp列表的当前长度考虑减少的hmvp列表候选的数量对所述当前ctu的当前块 (例如ctb或cb)进行译码,其中,所述hmvp列表的当前长度小于所述hmvp列表的 最大长度(例如,所述减少的hmvp列表候选的数量对应于或等于所述hmvp列表的当前 长度)。
[0614]
根据第二方面至第十方面中任一项所述的方法,在第十一方面中,无论分块的尺寸如何, 都针对所述分块中的每个ctu行重置hmvp列表。
[0615]
根据第二方面至第十方面中任一项所述的方法,在第十二方面中,当分块的尺寸大于 (或者大于或等于)阈值尺寸时,针对所述分块中的每个ctu行重置hmvp列表,和/或当 分块的尺寸小于(或者小于或等于)所述阈值尺寸时,不针对所述分块中的每个ctu行重 置hmvp列表。
[0616]
根据第二方面至第十二方面中任一项所述的方法,在第十三方面中,所述为当前ctu 行对应的所述hmvp列表设置默认值包括:将所述hmvp列表中的mv填充为单向预测方 式中的mv,其中,所述单向预测方式中的mv为零运动矢量或非零运动矢量,参考图像包 括列表l0中的第一参考图像;和/或将所述hmvp列表中的mv填充为双向预测方式中的 mv,其中,所述双向预测方式中的mv为零运动矢量或非零运动矢量,参考图像包括列表 l0中的第一参考图像以及列表l1中的第一参考图像。
[0617]
根据第二方面至第十二方面中任一项所述的方法,在第十四方面中,每个并置图像可存 储对应每个ctu行或对应整个图像的时域hmvp列表,所述为当前ctu行对应的所述 hmvp列表设置默认值包括:根据所述时域hmvp列表对当前ctu行对应的所述hmvp 列表进行初始化。
[0618]
根据第二方面至第十二方面中任一项所述的方法,在第十五方面中,所述前一个ctu 行是与所述当前ctu行紧邻且位于所述当前ctu行上方的ctu行。
[0619]
根据第十五方面所述的方法,在第十六方面中,所述前一个ctu行中的所述ctu为所 述前一个ctu行中的第二个ctu。
[0620]
根据第十五方面所述的方法,在第十七方面中,所述前一个ctu行中的所述ctu为所 述前一个ctu行中的第一个ctu。
[0621]
第十八方面,一种由编码设备实现的图像编码方法包括:对图像的分块中的当前ctu 行对应的hmvp列表进行初始化(或构建);根据所述构建/初始化的hmvp列表处理当前 ctu行中的ctu。
[0622]
根据第十八方面所述的方法,在第十九方面中,当前ctu行对应的所述hmvp列表通 过如下方式初始化:重置(或清空)当前ctu行对应的所述hmvp列表;和/或为当前 ctu行对应的所述hmvp列表设置默认值;和/或基于编码和/或扫描顺序上的前一个ctu 行中的ctu的hmvp列表对当前ctu行对应的所述hmvp列表进行构建/初始化(即,前 一个是指编码和/或扫描顺序上的前一个,在一实施例中,所述前一个ctu行可以是在所述 编码和/或扫描顺序上与当前ctu行紧邻的前一个ctu行,例如,与所述当前ctu行空间 相邻或直接相邻的ctu行)。
[0623]
根据第十八方面或第十九方面所述的方法,在第二十方面中,所述对当前ctu行对应 的hmvp列表进行初始化(例如重置)的操作在分块组(tile group,tg)的起始处执行, 在分块的起始处执行,或者在分块中每个ctu行的起始处执行。
[0624]
根据第十八方面至第二十方面中任一项所述的方法,在第二十一方面中,所述对当前 ctu行对应的hmvp列表进行初始化(例如重置)的操作是在处理(例如编码)所述当前 ctu行中编码和/或扫描顺序上的第一个ctu时(例如之前)执行的,其中,所述当前 ctu行中的第一个ctu为或者包括:分块组(tile group,tg)中编码和/或扫描顺序上的第 一个ctu;和/或分块中编码和/或扫描顺序上的第一个ctu;和/或ctu行中编码和/或扫描 顺序上的第一个ctu。
[0625]
根据第十八方面至第二十一方面中任一项所述的方法,在第二十二方面中,所述对当前 ctu行对应的hmvp列表进行初始化(例如重置)的操作是在处理(例如编码)各个ctu 行中的第一个ctu时(例如之前),例如,在对编码顺序上的第一个ctu的第一个ctb (例如亮度或度ctb)的第一个块(例如cb,如第一个叶子节点cb)进行处理或编码 之前,针对分块中的每个ctu行执行的。
[0626]
根据第十八方面至第二十二方面中任一项所述的方法,在第二十三方面中,所述对当前 ctu行对应的hmvp列表进行初始化包括:重置当前ctu行对应的所述hmvp列表,其 中,所述重置当前ctu行对应的所述hmvp列表包括:将所述hmvp列表的长度(也可以 是长度指示符或长度参数,如hmvpcandnum)置零(例如hmvpcandnum=0),以处理 (例如编码)所述当前ctu行中编码或扫描顺序上的第一个ctu。
[0627]
根据第二十三方面所述的方法,在第二十四方面中,所述重置当前ctu行对应的所述 hmvp列表还包括:当使用运动矢量对第一个ctu的块(例如第一个块或连续的块,其中, 块可以是ctb或cb,如叶子节点cb)进行编码(即进行帧间编码)时,将所述hmvp列 表的长度加1,并将所述运动矢量添加到所述hmvp列表中。
[0628]
根据第二十四方面所述的方法,在第二十五方面中,仅在所述hmvp列表中未包含运 动信息(例如,运动信息包括运动矢量或参考图像索引)时才增加所述hmvp列表的长度 以及添加所述运动矢量(修剪实施例)。
[0629]
根据第二十三方面至第二十五方面中任一项所述的方法,在第二十六方面中,仅对所述 hmvp列表的长度进行增加操作,直到达到所述hmvp列表的最大长度。
[0630]
根据第二十三方面至第二十六方面中任一项所述的方法,在第二十七方面中,所述方法 还包括:仅根据所述hmvp列表的当前长度考虑减少的hmvp列表候选的数量对所述当前 ctu的当前块(例如ctb或cb)进行编码,其中,所述hmvp列表的当前长度小于所述 hmvp列表的最大长度(例如,所述减少的hmvp列表候选的数量对应于或等于所述 hmvp列表的当前长度)。
[0631]
根据第十九方面至第二十七方面中任一项所述的方法,在第二十八方面中,无论分块的 尺寸如何,都针对所述分块中的每个ctu行重置hmvp列表。
[0632]
根据第十九方面至第二十七方面中任一项所述的方法,在第二十九方面中,当分块的尺 寸大于(或者大于或等于)阈值尺寸时,针对所述分块中的每个ctu行重置hmvp列表, 和/或当分块的尺寸小于(或者小于或等于)所述阈值尺寸时,不针对所述分块中的每个 ctu行重置hmvp列表。
[0633]
根据第十九方面至第二十九方面中任一项所述的方法,在第三十方面中,所述为当前 ctu行对应的所述hmvp列表设置默认值包括:将所述hmvp列表中的mv填充为单向预 测方式中的mv,其中,所述单向预测方式中的mv为零运动矢量或非零运动矢量,参考图 像
包括列表l0中的第一参考图像;和/或将所述hmvp列表中的mv填充为双向预测方式 中的mv,其中,所述双向预测方式中的mv为零运动矢量或非零运动矢量,参考图像包括 列表l0中的第一参考图像以及列表l1中的第一参考图像。
[0634]
根据第十九方面至第二十九方面中任一项所述的方法,在第三十一方面中,每个并置图 像可存储对应每个ctu行或对应整个图像的时域hmvp列表,所述为当前ctu行对应的 所述hmvp列表设置默认值包括:根据所述时域hmvp列表对当前ctu行对应的所述 hmvp列表进行初始化/构建。
[0635]
根据第十九方面至第二十九方面中任一项所述的方法,在第三十二方面中,所述前一个 ctu行是与所述当前ctu行紧邻且位于所述当前ctu行上方的ctu行。
[0636]
根据第三十二方面所述的方法,在第三十三方面中,所述前一个ctu行中的所述ctu 为所述前一个ctu行中的第二个ctu。
[0637]
根据第三十二方面所述的方法,在第三十四方面中,所述前一个ctu行中的所述ctu 为所述前一个ctu行中的第一个ctu。
[0638]
第三十五方面,一种编码器(20)包括处理电路,用于执行第十九方面至第三十四方面 中任一项所述的方法。
[0639]
第三十六方面,一种解码器(30)包括处理电路,用于执行第一方面至第十七方面中任 一项所述的方法。
[0640]
第三十七方面,一种计算机程序产品包括用于执行第一方面至第三十四方面中任一项所 述的方法的程序代码。
[0641]
第三十八方面,一种解码器包括:一个或多个处理器;非瞬时性计算机可读存储介质, 耦合至所述处理器,并存储由所述处理器执行的程序,其中,当所述处理器执行所述程序时, 使得所述解码器执行第一方面至第十七方面中任一项所述的方法。
[0642]
第三十九方面,一种编码器包括:一个或多个处理器;非瞬时性计算机可读存储介质, 耦合至所述处理器,并存储由所述处理器执行的程序,其中,当所述处理器执行所述程序时, 使得所述编码器执行第十九方面至第三十四方面中任一项所述的方法。

技术特征:


1.一种由编码设备实现的图像编码方法,其特征在于,包括:在满足ctbaddrx==ctbtotilecolbd[ctbaddrx])条件下,对图像的分块中的当前译码树单元(coding tree unit,ctu)行对应的基于历史的运动矢量预测(history-based motion vector prediction,hmvp)列表进行初始化;根据所述初始化的hmvp列表处理当前ctu行中的ctu。2.根据权利要求1所述的方法,其特征在于,所述对当前ctu行对应的hmvp列表进行初始化包括以下步骤:重置当前ctu行对应的所述hmvp列表;和/或为当前ctu行对应的所述hmvp列表设置默认值;和/或基于编码和/或扫描顺序上的前一个ctu行中的ctu的hmvp列表,对当前ctu行对应的所述hmvp列表进行初始化。3.根据权利要求2所述的方法,其特征在于,所述编码和/或扫描顺序上的前一个ctu行是在所述编码和/或扫描顺序上与当前ctu行紧邻的前一个ctu行。4.根据权利要求3所述的方法,其特征在于,所述在编码和/或扫描顺序上与当前ctu行紧邻的前一个ctu行是与所述当前ctu行空间相邻或直接相邻的ctu行。5.根据权利要求1至4中任一项所述的方法,其特征在于,所述对当前ctu行对应的hmvp列表进行初始化的操作在分块组(tile group,tg)的起始处执行,或者在所述分块的起始处执行,或者在所述分块中每个ctu行的起始处执行。6.根据权利要求1至5中任一项所述的方法,其特征在于,所述对当前ctu行对应的hmvp列表进行初始化的操作,是在处理所述当前ctu行中编码和/或扫描顺序上的第一个ctu之前执行的,其中,所述当前ctu行中的第一个ctu是或者包括:分块组(tile group,tg)中编码和/或扫描顺序上的第一个ctu;和/或分块中编码和/或扫描顺序上的第一个ctu;和/或ctu行中编码和/或扫描顺序上的第一个ctu。7.根据权利要求1至6中任一项所述的方法,其特征在于,所述对当前ctu行对应的hmvp列表进行初始化包括:重置当前ctu行对应的所述hmvp列表,其中,所述重置当前ctu行对应的所述hmvp列表包括:将所述hmvp列表的长度置零,以处理所述当前ctu行中编码或扫描顺序上的第一个ctu。8.根据权利要求1至7中任一项所述的方法,其特征在于,所述对当前ctu行对应的hmvp列表进行初始化包括:重置当前ctu行对应的所述hmvp列表,其中,重置分块中第一个ctu对应的hmvp列表允许并行处理或编码分块。9.根据权利要求8所述的方法,其特征在于,所述对当前ctu行对应的hmvp列表进行初始化包括:重置当前ctu行对应的所述hmvp列表,其中,重置每个分块中第一个ctu对应的hmvp列表允许并行处理或编码分块。10.根据权利要求1至9中任一项所述的方法,其特征在于,所述对当前ctu行对应的hmvp列表进行初始化的操作,是在处理各个ctu行中的第一个ctu之前针对分块中的每个ctu行执行的。11.根据权利要求10所述的方法,其特征在于,所述重置当前ctu行对应的所述hmvp列
表还包括:当使用运动矢量对第一个ctu的块进行编码,即进行帧间编码时,将所述hmvp列表的长度加1,并将所述运动矢量添加到所述hmvp列表中。12.根据权利要求11所述的方法,其特征在于,仅在所述hmvp列表中未包含运动信息的情况下,才增加所述hmvp列表的长度以及添加所述运动矢量。13.根据权利要求12所述的方法,其特征在于,所述运动信息包括运动矢量和参考图像索引中的至少一种。14.根据权利要求6至13中任一项所述的方法,其特征在于,仅对所述hmvp列表的长度进行增加操作,直到达到所述hmvp列表的最大长度。15.根据权利要求6至14中任一项所述的方法,其特征在于,所述方法还包括:仅根据所述hmvp列表的当前长度考虑减少的hmvp列表候选的数量,对所述当前ctu的当前块进行编码,其中,所述hmvp列表的当前长度小于所述hmvp列表的最大长度。16.根据权利要求15所述的方法,其特征在于,所述减少的hmvp列表候选的数量对应于或等于所述hmvp列表的当前长度。17.根据权利要求2至16中任一项所述的方法,其特征在于,无论分块的尺寸如何,都针对所述分块中的每个ctu行重置hmvp列表。18.根据权利要求2至17中任一项所述的方法,其特征在于,当分块的尺寸大于或等于阈值尺寸时,针对所述分块中的每个ctu行重置hmvp列表,和/或当分块的尺寸小于所述阈值尺寸时,不针对所述分块中的每个ctu行重置hmvp列表。19.根据权利要求2至18中任一项所述的方法,其特征在于,所述为当前ctu行对应的所述hmvp列表设置默认值包括:将所述hmvp列表中的运动矢量(motion vector,mv)填充为单向预测方式中的mv;其中,所述单向预测方式中的mv为零运动矢量或非零运动矢量;参考图像包括列表0(list 0,l0)中的第一参考图像;和/或将所述hmvp列表中的mv填充为双向预测方式中的mv,其中,所述双向预测方式中的mv为零运动矢量或非零运动矢量,参考图像包括列表l0中的第一参考图像以及列表1(list 1,l1)中的第一参考图像。20.根据权利要求2至19中任一项所述的方法,其特征在于,每个并置图像存储对应每个ctu行或对应整个图像的时域hmvp列表,所述为当前ctu行对应的所述hmvp列表设置默认值包括:根据所述时域hmvp列表对当前ctu行对应的所述hmvp列表进行初始化。21.根据权利要求2至20中任一项所述的方法,其特征在于,所述前一个ctu行是与所述当前ctu行紧邻且位于所述当前ctu行上方的ctu行;所述前一个ctu行中的所述ctu为所述前一个ctu行中的第二个ctu,或者所述前一个ctu行中的所述ctu为所述前一个ctu行中的第一个ctu。22.根据权利要求1至21中任一项所述的方法,其特征在于,ctu行中的ctu具有对应的地址,通过以下表达式判断地址j相对于当前分块的模运算是否产生0来识别ctu行中的第一个ctu的地址:if(j%colwidth[tileidx]==0),
其中,j为当前ctu的地址,colwidth[tileidx]表示所述分块相对于ctu数量的宽度,tileidx表示各个分块的索引,“%”是模运算符。23.根据权利要求1至21中任一项所述的方法,其特征在于,ctu行中的ctu具有对应的地址,通过判断所述当前ctu的地址与列表或数组中的ctu的地址是否相同来识别分块中的每个ctu行中的第一个ctu的地址,从而推导出分块中的每个ctu行中的第一个ctu,其中,所述列表或数组存储以ctb为单位的左分块列边界的地址。24.根据权利要求23所述的方法,其特征在于,通过以下表达式判断所述当前ctu的地址与所述列表中的ctu的地址是否相同,其中,所述列表存储以ctb为单位的所述左分块列边界的地址:if(ctbaddrx==ctbtotilecolbd[ctbaddrx]),其中,列表或数组ctbtotilecolbd[ctbaddrx]包括从水平ctb地址到以ctb为单位的左分块列边界的地址的转换,“ctbaddrx”的范围为“0至picwidthinctbsy”(包括端值),其中,ctbaddrx表示水平ctb的索引。25.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储有由一个或多个处理器执行的如权利要求1至24中的任一项所述方法得到的视频码流。26.一种编码器(20),其特征在于,包括处理电路,用于执行根据权利要求1至24中任一项所述的方法。27.一种计算机程序产品,其特征在于,包括程序代码,用于执行根据权利要求1至24中任一项所述的方法。28.一种存储程序的计算机可读非瞬时性介质,其特征在于,所述计算机可读非瞬时性介质包括指令;当所述指令在处理器上执行时,所述处理器执行根据权利要求1至24中任一项所述的方法。29.一种编码器,其特征在于,包括:一个或多个处理器;非瞬时性计算机可读存储介质,耦合至所述处理器,并存储由所述处理器执行的程序,其中,当所述处理器执行所述程序时,使得所述编码器执行根据权利要求1至24中任一项所述的方法。

技术总结


本发明实施例提供了图像编码方法和设备(编码器和/或解码器)。对图像的分块中的当前译码树单元(Coding Tree Unit,CTU)行对应的基于历史的运动矢量预测(History-basedMotion Vector Prediction,HMVP)列表进行初始化,并且根据所述初始化的HMVP列表处理当前CTU行中的CTU。当前CTU行中的CTU。当前CTU行中的CTU。


技术研发人员:

阿南德

受保护的技术使用者:

华为技术有限公司

技术研发日:

2019.12.20

技术公布日:

2022/12/1

本文发布于:2024-09-26 04:24:18,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/1/32098.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:所述   图像   列表   译码
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议