首页> 中国专利> 用于变换系数级编码的上下文建模技术

用于变换系数级编码的上下文建模技术

摘要

在一个实施例中,提供了用于编码视频数据的方法,所述方法包括接收包括变换系数的二维阵列的变换单元以及沿着单级扫描顺序处理该二维阵列的变换系数。该处理包括为沿着单级扫描顺序的每个非零变换系数选择一个或多个上下文模型以用于编码该非零变换系数的绝对级,其中该选择基于沿着单级扫描顺序先前编码的一个或多个变换系数。

著录项

  • 公开/公告号CN103650510A

    专利类型发明专利

  • 公开/公告日2014-03-19

    原文格式PDF

  • 申请/专利权人 摩托罗拉移动有限责任公司;

    申请/专利号CN201280035145.4

  • 发明设计人 娄健;金在勋;王利民;

    申请日2012-07-16

  • 分类号H04N19/61;H04N19/13;H04N19/176;H04N19/70;H04N19/18;H04N19/129;H04N19/184;

  • 代理机构中原信达知识产权代理有限责任公司;

  • 代理人李宝泉

  • 地址 美国伊利诺伊州

  • 入库时间 2024-02-19 23:36:50

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2018-05-22

    授权

    授权

  • 2016-04-20

    专利申请权的转移 IPC(主分类):H04N19/61 登记生效日:20160331 变更前: 变更后: 申请日:20120716

    专利申请权、专利权的转移

  • 2014-04-16

    实质审查的生效 IPC(主分类):H04N19/61 申请日:20120716

    实质审查的生效

  • 2014-03-19

    公开

    公开

说明书

相关申请的交叉引用

本申请根据美国法典第35条119(e)款要求标题为“CONTEXT  MODELING FOR LEVEL CODING IN CABAC”、于2011年7月15 日提交的美国临时申请No.61/508,595和标题为“WAVEFRONT SCAN  AND RELATED CONTEXT MODELING”、于2011年11月8日提交 的美国临时申请No.61/557,299的权益和优先权。这些申请的全部内容 通过引用被包含在此以用于所有目的。

背景技术

视频压缩(即,编码)系统一般地针对大多数压缩操作采用块处 理。块是一组邻近像素并且被认为是用于压缩目的的“编码单元”。 理论上,较大的编码单元大小被优选成利用中间邻近像素当中的相关 性。诸如运动图像专家组(MPEG)-1、MPEG-2以及MPEG-4的特定 视频编码标准使用4x4、8x8或16x16个像素的编码单元大小(被称为 宏块)。

高效率视频编码(HEVC)是同样采用块处理的替代性视频编码标 准。如图1中所示,HEVC将输入图片100分割成称为最大编码单元 (LCU)的方形块。每个LCU能够和128x128个像素一样大,并且能 够被分割成称为编码单元(CU)的较小方形块。例如,LCU能够被分 成四个CU,每个都是LCU的大小的四分之一。CU能够被进一步分成 四个较小的CU,每个都是原始CU的大小的四分之一。能够重复这个 分割过程直到满足特定准则为止。图2图示了被分割成七个CU(202-1、 202-2、202-3、202-4、202-5、202-6以及202-7)的LCU200。如所示, CU202-1、202-2以及202-3每个都是LCU200的大小的四分之一。另 外,LCU200的右上象限被分成四个CU202-4、202-5、202-6以及202-7, 其每个都是象限的大小的四分之一。

每个CU包括一个或多个预测单元(PU)。图3图示了包括PU 302-1、302-2、302-3以及302-4的示例CU分割300。PU被用于CU 分割300的空间或时间预测编码。例如,如果CU分割300在“帧内” 模式下被编码,则每个PU302-1、302-2、302-3以及302-4具有它自己 的预测方向以用于空间预测。如果CU分割300在“帧间”模式下被编 码,则每个PU302-1、302-2、302-3以及302-4具有它自己的(一个或 多个)运动矢量和关联的(一个或多个)参考图片以用于时间预测。

另外,PU的每个CU分割都与一组变换单元(TU)相关联。像其 它视频编码标准一样,HEVC对残差数据应用块变换以使块内的像素解 相关并且将块能压缩成低阶变换系数。然而,不像对宏块应用单个4x4 或8x8变换的其它标准,HEVC能够对单个CU应用不同大小的一组块 变换。要应用于CU的该组块变换由它关联的TU来表示。通过示例, 图4图示了具有关联的一组TU402-1、402-2、402-3、402-4、402-5、 402-6以及402-7的图3的CU分割300(包括PU302-1、302-2、302-3 以及302-4)。这些TU指示七个单独的块变换应该被应用于CU分割 300,其中每个块变换的范围由每个TU的位置和大小来定义。与特定 CU相关联的TU的配置能够基于各种准则而不同。

一旦已经关于特定TU应用了块变换操作,导致变换系数就被量 化以降低系数数据的大小。所量化的变换系数然后被熵编码,导致最 终一组压缩比特。HEVC当前提供被称为基于上下文的自适应二进制算 术编码(CABAC)的熵编码方案。CABAC由于它基于先前编码的符 号统计自适应地选择用于算术地编码输入符号的上下文模型(即,概 率模型)的能力导致能够提供有效压缩。然而,CABAC中的上下文模 型选择(被称为上下文建模)是复杂的,并且需要比其它压缩方案显 著更多的处理能力以用于编码/编码。

发明内容

在一个实施例中,提供了用于编码视频数据的方法,所述方法包 括接收包括变换系数的二维阵列的变换单元以及沿着单级扫描顺序处 理二维阵列的变换系数。所述处理包括为沿着单级扫描顺序的每个非 零变换系数选择一个或多个上下文模型以用于编码非零变换系数的绝 对级,其中所述选择基于沿着单级扫描顺序先前编码的一个或多个变 换系数。

在另一实施例中,提供了用于解码视频数据的方法,所述方法包 括:接收压缩数据的比特流,所述压缩数据对应于沿着单级扫描顺序 被先前编码的变换系数的二维阵列;以及解码压缩数据的比特流。所 述解码包括为沿着单级扫描顺序的每个非零变换系数选择一个或多个 上下文模型以用于解码非零变换系数的绝对级,其中所述选择基于沿 着单级扫描顺序先前解码的一个或多个变换系数。

在另一实施例中,提供了用于编码视频数据的方法,所述方法包 括接收包括多个变换系数的变换单元,以及使用单个扫描类型和单个 上下文模型选择方案来编码变换单元的有效位图和所述多个变换系数 的绝对级。

在另一实施例中,提供了用于解码视频数据的方法,所述方法包 括接收压缩数据的比特流,所述压缩数据对应于包括被先前编码的多 个变换系数的变换单元。所述方法还包括使用单个扫描类型和单个上 下文模型选择方案来解码变换单元的有效位图和所述多个变换系数的 绝对级。

以下具体实施方式和附图提供了特定实施例的本质和优点的更好 理解。

附图说明

图1图示被分割成最大编码单元(LCU)的输入图片。

图2图示被分割成编码单元(CU)的LCU。

图3图示被分割成预测单元(PU)的CU。

图4图示被分割成PU的CU和与该CU相关联的一组变换单元 (TU)。

图5图示用于编码视频内容的编码器。

图6图示用于解码视频内容的解码器。

图7图示CABAC编码/解码过程。

图8图示TU中的最后有效的系数位置。

图9图示用于使用正向扫描用于上下文模型选择的示例邻居。

图10图示包括每4x4子块的正向Z字形扫描和每个子块内的逆向 Z字形扫描的两级扫描序列。

图11图示使用两级扫描序列用于变换系数级的CABAC编码/解码 的过程。

图12图示根据一个实施例使用单级扫描用于变换系数级的 CABAC编码/解码的过程。

图13图示单级、逆向Z字形扫描。

图14图示单级、逆向波前扫描。

图15图示根据一个实施例使用统一扫描类型和上下文模型选择 方案用于有效位图值和变换系数级的CABAC编码/解码的过程。

图16图示使用逆向扫描用于上下文模型选择的示例邻居。

具体实施方式

本文中描述的是能够在诸如CABAC的上下文自适应熵编码方案 内被用于变换系数级编码的上下文建模技术。在以下描述中,出于说 明的目的,许多示例和特定细节被阐述以便提供对特定实施例的彻底 理解。如由权利要求书所限定的特定实施例可以单独或者与在下面所 描述的其它特征相结合地包括这些示例中的特征中的一些或全部,并 且可以进一步包括本文中所描述的特征和概念的修改和等同物。

编码器和解码器实施例

图5描绘了用于编码视频内容的示例编码器500。在一个实施例 中,编码器500能够实现HEVC标准。编码器500的通用操作在下面 被描述;然而,应该领会的是,本描述被提供仅用于说明目的并且不 旨在在此限制本公开和教导。本领域的普通技术人员将认识到针对编 码器500的结构和操作的各种修改、变化以及替代方案。

如所示,编码器500接收当前PU“x”作为输入。PU x对应于CU (或其一部分),其相应地是正被编码的输入图片(例如,视频帧) 的一部分。给定PU x,预测PU“x’”通过空间预测或时间预测(经由空 间预测块502或时间预测块504)来获得。然后PU x减去PU x’以生成 残差PU“e”。

一旦被生成,残差PU e就被传递给变换块506,所述变换块506 被配置成对PU e执行一个或多个变换操作。这种变换操作的示例包括 离散正弦变换(DST)、离散余弦变换(DCT)及其变体(例如,DCT-I、 DCT-II、DCT-III等)。变换块506然后在变换域(“E”)中输出残 差PU e,使得所变换的PU E包括变换系数的二维阵列。在这个块中, 能够关于已经与对应于PU e的CU相关联的每个TU执行变换操作(如 上面关于图4所描述的)。

所变换的PU E被传递给量化器508,所述量化器508被配置成将 PU E的相对高精度的变换系数转换或者量化成有限数目的可能值。在 量化之后,所变换的PU E经由熵编码块510被熵编码。该熵编码过程 将所量化的变换系数压缩成被随后传送到适当的接收器/解码器的最终 压缩比特。熵编码块510能够使用各种不同类型的熵编码方案,诸如 CABAC。实现CABAC的熵编码块510的特定实施例被在下面更详细 地描述。

除前面的步骤之外,编码器500包括其中去量化器512将PU E的 所量化的变换系数去量化成去量化的PU“E’”的解码过程。PU E’被传 递给逆变换块514,所述逆变换块514被配置成逆变换PU E’的所去量 化的变换系数并且从而生成重建的残差PU“e’”。重建的残差PU e’ 然后被加到原始预测PU x’以形成新的、重建的PU“x’’”。环路滤波 器516对重建的PU x’’执行各种操作以使块边界平滑并且最小化所重 建的像素与原始像素之间的编码失真。所重建的PU x’’然后被用作用 于编码视频内容的将来帧的预测PU。例如,如果所重建的PU x’’是参 考帧的一部分,则所重建的PU x’’能够被存储在参考缓冲器518中以 用于将来的时间预测。

图6描绘了与图5的编码器500互补的示例解码器600。像编码 器500一样,在一个实施例中,解码器600能够实现HEVC标准。解 码器600的通用操作在下面被描述;然而,应该领会的是,本描述被 提供仅用于说明目的并且不旨在在此限制本公开和教导。本领域的普 通技术人员将认识到针对解码器600的结构和操作的各种修改、变化 以及替代方案。

如所示,解码器600接收压缩数据的比特流,诸如由编码器500 所输出的比特流,作为输入。该输入比特流被传递给熵解码块602,所 述熵解码块602被配置成对比特流执行熵解码以生成残差PU的所量化 的变换系数。在一个实施例中,熵解码块602被配置成执行由编码器 500的熵编码块510所执行的操作的逆。熵解码块602能够使用各种不 同类型的熵编码方案,诸如CABAC。实现CABAC的熵解码块602的 特定实施例被在下面更详细地描述。

一旦被生成,所量化的变换系数就被去量化器604去量化以生成 残差PU“E’”。PU E’被传递给逆变换块606,所述逆变换块606被配置 成逆变换PU E’的所去量化的变换系数并且从而输出所重建的残差PU “e’”。重建的残差PU e’然后被加到先前解码的预测PU x’以形成新的、 所重建的PU“x’’”。环路滤波器608对所重建的PU x’’执行各种操作以 使块边界平滑并且最小化所重建的像素与原始像素之间的编码失真。 所重建的PU x’’然后被用来输出所重建的视频帧。在特定实施例中, 如果所重建的PU x’’是参考帧的一部分,则所重建的PU x’’能够被存储 在参考缓冲器610中以用于将来PU的重建(经由例如空间预测块612 或时间预测块614)。

CABAC编码/解码

如关于图5和6所指出的,熵编码块510和熵解码块602能够每 个实现CABAC,所述CABAC是将输入符号映射到非整数长度(例如, 分数的)码字的算术编码方案。算术编码的效率在很大程度上取决于 对于输入符号的准确概率的确定。因此,为了提高编码效率,CABAC 使用其中不同的上下文模型(即,概率模型)被选择并且应用于不同 的语法元素的上下文自适应技术。另外,能够在编码/解码期间更新这 些上下文模型。

一般地说,使用CABAC来编码语法元素的过程包括三个基本步 骤:(1)二值化,(2)上下文建模,以及(3)二进制算术编码。在 二值化步骤中,语法元素被转换成二进制序列或二进制串(如果它还 未被二值化)。在上下文建模步骤中,为二进制串的一个或多个二进 制值(即,比特)选择(从每CABAC标准可用模型的列表中)上下文 模型。上下文模型选择过程能够基于正被编码的特定语法元素以及最 近编码的元素的统计而不同。在算术编码步骤中,每个二进制值基于 所选上下文模型被编码(经由算术编码器)。使用CABAC来解码语法 元素的过程对应于这些步骤的逆。

图7描绘了被执行以用于编码/解码残差PU(例如,图5的量化 PU E)的量化的变换系数的示例性CABAC编码/解码过程700。过程 700能够由例如图5的熵编码块510或图6的熵解码块602来执行。在 特定实施例中,过程700被应用于与残差PU相关联的每个TU。

在块702处,熵编码块510/熵解码块602编码或者解码对应于当 前TU中最后有效的(即,非零)变换系数的(y,x)坐标的最后有效 的系数部分(针对给定扫描模式)。通过示例,图8图示了NxN个变 换系数的TU800,其中系数802对于例如Z字形扫描来说对应于TU 800中的最后有效的系数位置。关于编码过程,块702包括二值化 “last_significant_coeff_y”语法元素(与y坐标相对应)并且二值化 “last_significant_coeff_x”语法元素(与x坐标相对应)。块702还包 括为last_significant_coeff_y和last_significant_coeff_x语法元素选择上 下文模型,其中该上下文模型基于预定义上下文索引(lastCtx)和上下 文索引增量(lastIndInc)而被选择。在一个实施例中,上下文索引增 量被确定如下:

1.如果当前TU大小是4x4个像素,则lastIndInc=lastCtx

2.如果当前TU大小是8x8个像素,则lastIndInc=lastCtx+3

3.如果当前TU大小是16x16个像素,则lastIndInc=lastCtx+8

4.如果当前TU大小是32x32个像素,则lastIndInc=lastCtx+15

一旦上下文模型被选择,就使用所选模型在算术上编码/解码 last_significant_coeff_y和last_significant_coeff_x语法元素。

在块704处,熵编码块510/熵解码块602编码或者解码与当前TU 相关联的二进制有效位图,其中有效位图的每个元素(由语法元素 significant_coeff_flag来表示)是指示在TU中的对应位置处的变换系 数是否为非零的二进制值。块704包括扫描当前TU并且以扫描顺序为 每个变换系数选择用于该变换系数的上下文模型。所选上下文模型然 后被用来在算术上编码/解码与变换系数相关联的significant_coeff_flag 语法元素。上下文模型的选择是基于基本上下文索引(sigCtx)和上下 文索引增量(sigIndInc)。使用考虑变换系数的位置以及用于在当前变 换系数附近的一个或多个相邻系数的有效位图值的基于邻居的方案针 对每个变换系数动态地确定变量sigCtx和sigIndInc。

在一个实施例中,像在下面所指出的那样针对给定变换系数(y,x) 来确定sigCtx和sigIndInc。在这个实施例中,假定TU使用正向Z字 形扫描来扫描。其它类型的扫描可以导致用于确定sigCtx和sigIndInc 的不同邻居的使用。

1.如果当前TU大小是4x4个像素,则sigCtx=y*4+x并且 sigIndInc=sigCtx+48

2.如果当前TU大小是8x8个像素,则sigCtx=(y>>l)*4+(x>>l) 并且sigIndInc=sigCtx+32

3.如果当前TU大小是16x16或32x32个像素,则sigCtx基于当 前变换系数的位置(y,x)和系数的所编码的邻居的有效位图值被确定 如下:

a.如果y<=2并且x<=2,则sigCtx=y*2+x

b.否则如果y=0(即,当前变换系数是在TU的上边界处),则 sigCtx=4+significant_coeff_flag[y][x-1]+ significant_coeff_flag[y][x-2]

c.否则如果x=0(即,当前变换系数是在TU的左边界处),则 sigCtx=7+significant_coeff_flag[y-l][x]+ significant_coeff_flag[y-2][x]

d.否则如果x>1并且y>1,则sigCtx=significant_coeff_flag[y- l][x]+significant_coeff_flag[y][x-1]+significant_coeff_flag[y -l][x-1]+significant_coeff_flag[y][x-2]+ significant_coeff_flag[y-2][x]

e.否则如果x>1,则sigCtx=significant_coeff_flag[y-l][x]+ significant_coeff_flag[y][x-1]+significant_coeff_flag[y-l][x- 1]+significant_coeff_flag[y][x-2]

f.否则如果y>1,则sigCtx=significant_coeff_flag[y-l][x]+ significant_coeff_flag[y][x-1]+significant_coeff_flag[y-l][x- 1]+significant_coeff_flag[y-2][x]

g.否则sigCtx=significant_coeff_flag[y-l][x]+ significant_coeff_flag[y][x-1]+significant_coeff_flag[y-l][x- 1]

h.最终值,如果sigCtx是10+min(4,sigCtx)

4.如果当前TU大小是16x16,则sigIndInc=sigCtx+16

5.如果当前TU大小是32x32,则sigIndInc=sigCtx

为了帮助视觉化以上的邻居确定逻辑,图9在示例TU900中图示 了不同变换系数的可能的邻居定义。对于位于TU900中间的变换系数 (例如,位于(y,x)处的系数902),sigCtx基于位于(y,x–1)、 (y,x–2)、(y–1,x)、(y–2,x)以及(y–1,x–1)处的五个邻 居的有效位图值而被确定。对于位于TU900的左边界上的变换系数(例 如,位于(y,0)处的系数904),sigCtx基于位于(y–1,0)和(y– 2,0)处的两个邻居的有效位图值而被确定。对于位于TU900的上边 界上的变换系数(例如,位于(0,x)处的系数906),sigCtx基于位 于(0,x–1)和(0,x–2)处的两个邻居的有效位图值而被确定。并 且对于位于TU900的上部左上边界中的特定变换系数(例如,系数 908、910、912、914),sigCtx不是基于任何邻居数据。

在图7的块706处,熵编码块510/熵解码块602编码或者解码当 前TU的有效(即,非零)变换系数。该过程包括针对每个有效变换系 数,编码或者解码(1)变换系数的绝对级(还被称为“变换系数级”) 以及(2)变换系数的符号(正或负)。作为编码/解码变换系数级的一 部分,熵编码块510/熵解码块602编码或者解码三个不同语法元素: coeff_abs_level_greater1_flag、coeff_abs_level_greater2_flag以及 coeff_abs_level_remaining。Coeff_abs_level_greater1_flag是指示变换系 数的绝对级是否大于1的二进制值。Coeff_abs_level_greater2_flag是指 示变换系数的绝对级是否大于2的二进制值。并且 coeff_abs_level_remaining是等于变换系数的绝对级减预定值(在一个 实施例中,这个预定值是3)的值。

在一个实施例中,编码/解码coeff_abs_level_greater1_flag和 coeff_abs_level_greater2_flag语法元素的过程涉及基于子块方案为每个 语法元素选择上下文模型(注意,coeff_abs_level_remaining语法元素 不需要上下文模型选择)。在这个方案中,当前TU被划分成许多4x4 个子块,并且针对给定非零变换系数的coeff_abs_level_greater1_flag和 coeff_abs_level_greater2_flag的上下文模型选择基于变换系数的子块内 的统计以及TU中先前的子块的统计而被执行。为了促进这个,在块 706中,(在特定子块内)使用两次扫描或循环-(1)子块级处的外 扫描和(2)变换系数级处的内扫描来扫描当前TU。这在视觉上在图 10中被示出,图10描绘了TU1000的两级扫描序列。在该示例中,扫 描序列根据关于TU1000的4x4个子块的正向Z字形模式进行(即, 外扫描)。在每个4x4子块内,扫描序列根据关于子块的变换系数的 逆向Z字形模式进行(即,内扫描)。这允许TU1000的每个4x4子 块在移动到下一个子块上之前被整体地处理。

图11描绘了图示coeff_abs_level_greater1_flag和 coeff_abs_level_greater2_flag语法元素如何使用10中所示出的两级扫 描序列被编码/解码的过程1100。在块1102处,针对当前TU的每个 4x4子块进入外FOR循环。这个外FOR循环根据第一扫描模式进行, 所述第一扫描模式诸如图10中所示出的子块级正向Z字形模式。在块 1104处,针对当前4x4子块中的每个变换系数进入内FOR循环。这个 内FOR循环根据第二扫描模式进行,所述第二扫描模式诸如图10中所 示出的系数级逆向Z字形模式。在块1104的内FOR循环内,如果变 换系数是非零(即,如果对应的有效位图中用于变换系数的 significant_coeff_flag等于1),则熵编码块510/熵解码块602编码或 者解码当前变换系数的coeff_abs_level_greater1_flag语法元素(块 1106)。

如上面所指出的,在块1106处编码/解码 coeff_abs_level_greater1_flag语法元素包括选择适当的上下文模式,其 中所选上下文模型是基于子块级数据(例如,当前子块内的统计和TU 中先前的子块的统计)的。在一个实施例中,在块1106处为 coeff_abs_level_greater1_flag选择上下文模型包括首先为当前子块确定 上下文集(ctxSet)如下:

1.如果当前TU大小是4x4个像素,则ctxSet=0

2.如果当前TU大小大于4x4并且当前4x4子块在子块级扫描顺 序(即,块1102的FOR循环)上是第一个,则ctxSet=5

3.否则ctxSet由在前一个4x4子块中具有大于1的绝对值的变换 系数数目(lastGreater2Ctx)来确定;即,ctxSet=((lastGreater2Ctx)>> 2)+1

在每个上下文集内,能够存在五个不同的上下文模型(被编号0 至4)。一旦用于当前子块的上下文集像上面那样被确定,就为 coeff_abs_level_greater1_flag语法元素选择该上下文集内的特定上下文 模型如下:

1.初始上下文被设置为1

2.在当前4x4子块中具有大于1的绝对级的变换系数已被编码/ 解码之后,上下文模型被设置为0

3.当当前4x4子块中的仅一个变换系数已被编码/解码并且其绝 对级等于1时,上下文模型被设置为2

4.当当前4x4子块中的仅两个变换系数已被编码/解码并且它们 的绝对级等于1时,上下文模型被设置为3

5.当当前4x4子块中的三个或更多个变换系数已被编码/解码并 且它们的绝对级等于1时,上下文模型被设置为4

在块1108处,在块1104处发起的内FOR循环结束(一旦当前子 块中的所有变换系数都被遍历)。

在块1110处,针对当前4x4子块中的每个变换系数进入另一内 FOR循环。该循环基本上与循环1104类似但被用来编码/解码 coeff_abs_level_greater2_flag语法元素。特别地,在块1110的内FOR 循环内,如果用于变换系数的coeff_abs_level_greater1_flag等于1则熵 编码块510/熵解码块602编码或者解码当前变换系数的 coeff_abs_level_greater2_flag(块1112)。

像coeff_abs_level_greater1_flag语法元素一样,在块1112处编码 /解码coeff_abs_level_greater1_flag语法元素包括选择适当的上下文模 型,其中所选上下文模型是基于子块级数据。在一个实施例中,在块 1112处为coeff_abs_level_greater2_flag选择上下文模型包括首先根据 与关于块11106所描述的ctxSet选择规则集相同的规则集来为当前子 块确定上下文集。一旦用于当前子块的上下文集被确定,就为当前变 换系数的coeff_abs_level_greater2_flag语法元素选择该上下文集内的 特定上下文模型如下:

1.初始上下文被设置为0

2.当在当前4x4子块中具有大于1的绝对级的仅一个变换系数已 被编码/解码时,上下文模型被设置为1

3.当在当前4x4子块中具有大于1的绝对级的仅两个变换系数已 被编码/解码时,上下文模型被设置为3

4.当在当前4x4子块中具有大于1的绝对级的仅三个变换系数已 被编码/解码时,上下文模型被设置为3

5.当在当前4x4子块中具有大于1的绝对级的四个或更多个变换 系数已被编码/解码时,上下文模型被设置为4

在块1114处,在块1110处发起的内FOR循环结束(一旦当前子 块中的所有变换系数都被遍历)。

尽管未在图11中示出,但是在块1114之后,过程1100能够包括 用于分别编码/解码系数符号和coeff_abs_level_remaining语法元素的 两个附加的内FOR循环(即,在当前子块内的循环)。注意,这些语 法元素的编码不需要任何上下文模型选择。

在块1116处,在块1102处发起的外FOR循环结束(一旦当前 TU中的所有子块都被遍历)。

如从图11及其所附描述能够看到的,很大部分地由于当为 coeff_abs_level_greater1_flag和coeff_abs_level_greater2_flag语法元素 选择上下文模型时4x4个子块之间的依赖,导致使用CABAC来编码和 解码变换系数级的过程可能是复杂的。这些子块依赖导致两级扫描过 程和相对复杂的上下文模型选择规则。以下部分描述了当使用CABAC 来编码/解码变换系数级时简化扫描和上下文模型选择的各种增强。

使用单级扫描的变换系数级的CABAC编码/解码

在一组实施例中,在图7的块706处变换系数级的编码/解码能够 被修改,使得针对coeff_abs_level_greater1_flag和 coeff_abs_level_greater2_flag语法元素的上下文模型选择不再依赖子块 级数据。替代地,在这些实施例中,能够基于当前TU内的单个变换系 数来选择上下文模型。因此,和图11的过程1100对比,无需执行两 级扫描序列(即,每子块的外子块级扫描和内系数级扫描)来编码/解 码变换系数级。相反地,能够使用整个TU的单级扫描(即,沿着单级 扫描顺序)执行编码/解码。这能够提高编码/解码性能,同时简化上下 文模型选择所需的代码。

图12描绘了根据一个实施例用于使用单级扫描在CABAC中执行 变换系数级编码/解码的过程1200。特别地,图12集中于 coeff_abs_level_greater1_flag和coeff_abs_level_greater2_flag语法元素 的编码/解码(coeff_abs_level_remaining语法元素的编码/解码因为不需 要上下文模型选择而未被描述)。能够通过熵编码块510或熵解码块 602在图7的块706内执行过程1200。在一个实施例中,能够执行过 程1200代替图11的过程1100。

在块1202处,熵编码块510/熵解码块602能够针对当前TU中的 每个变换系数进入FOR循环。该FOR循环能够表示沿着单级扫描顺序 TU的遍历(即,不需要任何子块划分的扫描)。在一个实施例中,单 级扫描顺序能够对应于如图13中所示出的逆向Z字形扫描。在另一实 施例中,单级扫描顺序能够对应于如图14中所示出的逆波前扫描。在 波前或逆波前扫描中,扫描线中的全部都具有相同的对角线扫描方向。 在又一些实施例中,单级扫描顺序能够对应于本领域中已知的任何其 它类型的扫描模式。

在块1204处,如果系数是非零则熵编码块510/熵解码块602能够 编码/解码当前变换系数的coeff_abs_level_greater1_flag语法元素,其 中编码/解码包括以当前单级扫描顺序(即,在块1202的FOR循环中) 基于先前编码的/解码的变换系数来为coeff_abs_level_greater1_flag选 择上下文模型。在一个实施例中,选择该上下文模型能够包括:

1.针对所有TU大小:

a.将初始上下文模型设置为1

b.如果具有大于1的绝对级的变换系数已经被以当前单级扫描 顺序先前编码/解码,则将上下文模型设置为0

c.如果仅(n-1)个变换系数已经被以当前单级扫描顺序先前编 码/解码并且它们的绝对级等于1,则将上下文模型设置为范围 从2至T-1的n

d.如果(T-1)个变换系数已经被以当前单级扫描顺序先前编码/ 解码并且它们的绝对级等于1,则将上下文模型设置为T

注意在前面的逻辑中,上下文模型选择与当前TU的大小无关, 因为相同的规则应用于所有TU大小。另外,关于(1)(c)和(1)(d),所选 上下文模型能够基于已经被以当前单级扫描顺序先前编码/解码的、具 有等于1的绝对级的变换系数的数目来改变,直到阈值数目T减1。当 达到了T减1时,上下文模型能够被设置为阈值数目T。在特定实施 例中,T的值能够被设置为10。

在可替换的实施例中,前面的针对coeff_abs_level_greater1_flag 的上下文模型选择逻辑能够被修改成考虑当前TU的大小(范围从例如 4x4个像素到32x32个像素)。在该实施例中,选择该上下文模型能够 包括:

1.针对所有TU大小:

a.将初始上下文模型设置为1

b.如果具有大于1的绝对级的变换系数已经被以当前单级扫描 顺序先前编码/解码了,则将上下文模型设置为0

2.对于4x4个TU,如果仅(n4x4-1)个变换系数已经在当前4x4 TU中被编码/解码了并且它们的(一个或多个)绝对级等于1,则将上 下文模型设置为范围从2至T4x4-1的n4x4;如果(T4x4-1)或更多变 换系数已经在当前4x4TU中被编码/解码了并且它们的级等于1,则将 上下文模型设置为T4x4

3.对于8x8个TU,如果仅(n8x8-1)个变换系数已经在当前8x8 TU中被编码/解码了并且它们的(一个或多个)绝对级等于1,则将上 下文模型设置为范围从2至T8x8-1的n8x8;如果(T8x8-1)或更多变 换系数已经在当前8x8TU中被编码/解码了并且它们的级等于1,则将 上下文模型设置为T8x8

4.对于16x16个TU,如果仅(n16x16-1)个变换系数已经在当前 16x16TU中被编码/解码了并且它们的(一个或多个)绝对级等于1, 则将上下文模型设置为范围从2至T16x16-1的n16x16;如果(T16x16-1) 或更多变换系数已经在当前16x16TU中被编码/解码了并且它们的级 等于1,则将上下文模型设置为T16x16

5.对于32x32个TU,如果仅(n32x32-1)个变换系数已经在当前 32x32TU中被编码/解码了并且它们的(一个或多个)绝对级等于1, 则将上下文模型设置为范围从2至T32x32-1的n32x32;如果(T32x32-1) 或更多变换系数已经在当前32x32TU中被编码/解码了并且它们的级 等于1,则将上下文模型设置为T32x32

在特定实施例中,以上阈值数目T4x4、T8x8、T16x16以及T32x32的值 分别能够被设置为4、6、8以及10。

在块1206处,熵编码块510/熵解码块602能够编码/解码当前变 换系数的coeff_abs_level_greater2_flag语法元素,其中编码/解码包括 以当前单级扫描顺序基于先前编码的/解码的变换系数来为 coeff_abs_level_greater2_flag选择上下文模型。在一个实施例中,选择 该上下文模型能够包括:

1.针对所有TU大小:

a.将初始上下文模型设置为0

b.如果具有大于1的(一个或多个)绝对级的仅m个变换系数 已经被以当前单级扫描顺序先前编码/解码,则将上下文模型 设置为范围从1至K-1的m

c.如果具有大于1的(一个或多个)绝对级的K个或更多个变 换系数已经被以当前单级扫描顺序先前编码/解码,则将上下 文模型设置为K

注意在前面的逻辑中,上下文模型选择与当前TU的大小无关, 因为相同的规则应用于所有TU大小。另外,关于(1)(b)和(1)(c),所选 上下文模型能够基于已经被以当前单级扫描顺序先前编码/解码的、具 有大于1的绝对级的变换系数的数目来改变,直到阈值数目K减1。 当达到了K时,上下文模型能够被设置为阈值数目K。在特定实施例 中,K的值能够被设置为10。

在可替换的实施例中,前面的针对coeff_abs_level_greater2_flag 的上下文模型选择逻辑能够被修改成考虑当前TU的大小(范围从例如 4x4个像素到32x32个像素)。在该实施例中,选择该上下文模型能够 包括:

1.对于所有TU大小,将初始上下文模型设置为0

2.对于4x4个TU,如果具有大于1的(一个或多个)绝对级的 仅(m4x4-1)个变换系数已经在当前4x4TU中被编码/解码,则将上 下文模型设置为范围从1至K4x4-1的m4x4;如果具有大于1的(一个 或多个)绝对级的K4x4或更多个变换系数已经在当前4x4TU中被编码 /解码,则将上下文模型设置为K4x4

3.对于8x8个TU,如果具有大于1的(一个或多个)绝对级的 仅(m8x8-1)个变换系数已经在当前4x4TU中被编码/解码,则将上 下文模型设置为范围从1至K8x8-1的m8x8;如果具有大于1的(一个 或多个)绝对级的K8x8或更多个变换系数已经在当前8x8TU中被编码 /解码,则将上下文模型设置为K8x8

4.对于16x16个TU,如果具有大于1的(一个或多个)绝对级 的仅(m16x16-1)个变换系数已经在当前16x16TU中被编码/解码,则 将上下文模型设置为范围从1至K16x16-1的m16x16;如果具有大于1 的(一个或多个)绝对级的K16x16或更多个变换系数已经在当前16x16 TU中被编码/解码,则将上下文模型设置为K16x16

5.对于32x32个TU,如果具有大于1的(一个或多个)绝对级 的仅(m32x32-1)个变换系数已经在当前32x32TU中被编码/解码,则 将上下文模型设置为范围从1至K32x32-1的m32x32;如果具有大于1 的(一个或多个)绝对级的K32x32或更多个变换系数已经在当前4x4TU 中被编码/解码,则将上下文模型设置为K32x32

在特定实施例中,以上阈值数目K4x4、K8x8、K16x16以及K32x32的 值分别能够被设置为4、6、8以及10。

在块1208处,在块1202处发起的FOR循环能够结束(一旦当前 TU中沿着单级扫描顺序所有变换系数被处理)。

尽管图12描绘了coeff_abs_level_greater1_flag和 coeff_abs_level_greater2_flag语法元素像发生在单个循环(即,FOR循 环1202)中那样的编码/解码,但是在特定实施例中能够在单独的循环 中编码/解码这些语法元素。在这些实施例中,针对 coeff_abs_level_greater1_flag和coeff_abs_level_greater2_flag的每个 FOR循环能够对应于当前TU的单级扫描。

使用统一扫描类型和上下文模型选择的变换系数级和有效位图的CABAC编码/解码

如上面所指出的那样,使用CABAC来编码/解码TU的一个方面 是编码/解码指示TU中的每个变换系数是否为非零的二进制有效位图。 在当前HEVC标准中,通过其上下文模型被选择用于编码/解码有效位 图的每个元素(即,significant_coeff_flag)的方法大大地不同于通过其 上下文模型被选择用于编码/解码变换系数级的方法。例如,如关于图 7的块704所描述的,针对TU编码/解码有效位图涉及使用例如正向Z 字形扫描来遍历TU,以及基于围绕变换系数的特定邻居的有效位图值 来为每个变换系数的significant_coeff_flag语法元素选择上下文模型。 相比之下,如关于图7的块706所描述的,针对TU编码/解码变换系 数级涉及使用两级、嵌套的扫描顺序(例如,每4x4子块的外正向Z 字形扫描和给定子块内的内逆向Z字形扫描)来遍历TU,以及基于子 块级系数数据来为每个变换系数的abs_coeff_level_greater1_flag和 abs_coeff_level_greater2_flag语法元素选择单独的上下文模型。

在特定实施例中,能够修改在块704和706处执行的处理,使得 针对TU的有效位图和变换系数级使用相同的扫描类型和相同的上下 文模型选择方案被编码/解码。这个方法在图15中作为过程1500被示 出。

在块1502处,熵编码块510/熵解码块602能够使用特定扫描类型 和特定上下文模型选择方案来编码或者解码当前TU的有效位图。在一 组实施例中,在块1502处使用的扫描类型可以是单级正向Z字形扫描、 逆向Z字形扫描、正向波前扫描、逆向波前扫描或本领域中已知的任 何其它扫描类型。在块1502处使用的上下文模型选择方案可以是基于 邻居的方案,诸如关于图7的块704上面所描述的方案。基于邻居的 方案能够基于围绕变换系数的一个或多个相邻变换系数来为当前TU 的每个变换系数选择用于变换系数的significant_coeff_flag语法元素的 上下文模型。在一个实施例中,在该方案中用于控制邻居选择的逻辑 能够基于被使用扫描类型(例如,正向Z字形、逆向Z字形等)而变 化。

在块1504处,熵编码块510/熵解码块602能够使用在块1502处 使用的相同扫描类型和上下文模型选择方案来编码或者解码当前TU 中每个变换系数的绝对级(例如,coeff_abs_level_greater1_flag和 coeff_abs_level_greater2_flag语法元素)。例如,如果逆向Z字形扫描 被用于在块1502处的有效位图编码/解码,则相同的逆向Z字形扫描能 够被用于在块1504处的变换系数级编码/解码。另外,如果特定的基于 邻居的上下文模型选择方案被用于在块1502处的有效位图编码/解码, 则相同的(或类似的)基于邻居的方案能够被用于在块1504处的变换 系数级编码/解码。该统一方法能够大大地降低实现CABAC编码和解 码所需的软件和/或硬件的复杂性,因为软件和/或硬件逻辑的大部分能 够被再用于有效位图和变换系数级编码阶段。

下列的是当统一正向扫描类型(例如,正向Z字形、正向波前等) 和统一基于邻居的方案被使用时能够被应用于为TU中变换系数(y,x) 的significant_coeff_flag、coeff_abs_level_greater1_flag以及 coeff_abs_level_greater2_flag语法元素选择上下文模型的示例逻辑。在 各种实施例中,相同的逻辑能够被应用于三个语法元素中的每一个。 变量baseCtx指的是语法元素的基本上下文索引并且变量ctxIndInc指 的是语法元素的上下文索引增量。

1.如果当前TU大小是4x4个像素,则baseCtx=y*4+x并且 ctxIndInc=baseCtx+48

2.如果当前TU大小是8x8个像素,则baseCtx=(y>>l)*4+(x>>l) 并且ctxIndInc=baseCtx+32

3.如果当前TU大小是16x16或32x32个像素,则baseCtx基于 当前变换系数的位置(y,x)和系数的编码邻居的有效位图值被确定如 下:

a.如果y<=2并且x<=2,则baseCtx=y*2+x

b.否则如果y=0(即,当前变换系数是在TU的上边界处),则 baseCtx=4+significant_coeff_flag[y][x–1]+ significant_coeff_flag[y][x–2]

c.否则如果x=0(即,当前变换系数是在TU的左边界处),则 baseCtx=7+significant_coeff_flag[y–l][x]+ significant_coeff_flag[y–2][x]

d.否则如果x>1并且y>1,则baseCtx=significant_coeff_flag[y –l][x]+significant_coeff_flag[y][x–1]+ significant_coeff_flag[y–l][x–1]+significant_coeff_flag[y][x –2]+significant_coeff_flag[y–2][x]

e.否则如果x>1,则baseCtx=significant_coeff_flag[y–l][x]+ significant_coeff_flag[y][x–1]+significant_coeff_flag[y–l][x –1]+significant_coeff_flag[y][x–2]

f.否则如果y>1,则baseCtx=significant_coeff_flag[y–l][x]+ significant_coeff_flag[y][x–1]+significant_coeff_flag[y–l][x –1]+significant_coeff_flag[y–2][x]

g.否则baseCtx=significant_coeff_flag[y–l][x]+ significant_coeff_flag[y][x–1]+significant_coeff_flag[y–l][x –1]

h.最终值,如果baseCtx是10+min(4,baseCtx)

4.如果当前TU大小是16x16,则baseIndInc=baseCtx+16

5.如果当前TU大小是32x32,则baseIndInc=baseCtx

上面被用来在逻辑中确定baseCtx的特定邻居在图9的TU900中 被在视觉上示出。对于位于TU900中间的变换系数(例如,位于(y,x) 处的系数902),baseCtx基于位于(y,x–1)、(y,x–2)、(y–1, x)、(y–2,x)以及(y–1,x–1)处的五个邻居而被确定。对于位 于TU900的左边界上的变换系数(例如,位于(y,0)处的系数904), baseCtx基于位于(y–1,0)和(y–2,0)处的两个邻居而被确定。对 于位于TU900的上边界上的变换系数(例如,位于(0,x)处的系数 906),baseCtx基于位于(0,x–1)和(0,x–2)处的两个邻居而被 确定。并且对于位于TU900的上部左上边界中的特定变换系数(例如, 系数908、910、912、914),baseCtx不是基于任何邻居数据。

下列的是当统一逆扫描类型(例如,逆向Z字形、逆向波前等) 和统一基于邻居的方案被使用时能够被应用于为TU中变换系数(y,x) 的significant_coeff_flag、coeff_abs_level_greater1_flag以及 coeff_abs_level_greater2_flag语法元素选择上下文模型的示例逻辑。在 各种实施例中,相同的逻辑能够被应用于三个语法元素中的每一个。 变量baseCtx指的是语法元素的基本上下文索引并且变量ctxIndInc指 的是语法元素的上下文索引增量。

1.如果当前TU大小是4x4个像素,则baseCtx=y*4+x并且 ctxIndInc=baseCtx+48

2.如果当前TU大小是8x8个像素,则baseCtx=(y>>l)*4+(x>>1) 并且ctxIndInc=baseCtx+32

3.如果当前TU大小是16x16或32x32个像素,则baseCtx基于 当前变换系数的位置(y,x)和系数的编码邻居的有效位图值被确定如 下:

a.如果y<=2并且x<=2,则baseCtx=y*2+x

b.否则如果y=0(即,当前变换系数是在TU的上边界处),则 baseCtx=4+significant_coeff_flag[y][x+1]+ significant_coeff_flag[y][x+2]

c.否则如果x=0(即,当前变换系数是在TU的左边界处),则 baseCtx=7+significant_coeff_flag[y+l][x]+ significant_coeff_flag[y+2][x]

d.否则如果x>1并且y>1,则baseCtx=significant_coeff_flag[y +l][x]+significant_coeff_flag[y][x+1]+ significant_coeff_flag[y+l][x+1]+significant_coeff_flag[y][x +2]+significant_coeff_flag[y+2][x]

e.否则如果x>1,则baseCtx=significant_coeff_flag[y+l][x]+ significant_coeff_flag[y][x+1]+significant_coeff_flag[y+l][x +1]+significant_coeff_flag[y][x+2]

f.否则如果y>1,则baseCtx=significant_coeff_flag[y+l][x]+ significant_coeff_flag[y][x+1]+significant_coeff_flag[y+l][x +1]+significant_coeff_flag[y+2][x]

g.否则baseCtx=significant_coeff_flag[y+l][x]+ significant_coeff_flag[y][x+1]+significant_coeff_flag[y+l][x +1]

h.最终值,如果baseCtx是10+min(4,baseCtx)

4.如果当前TU大小是16x16,则baseIndInc=baseCtx+16

5.如果当前TU大小是32x32,则baseIndInc=baseCtx

上面被用来在逻辑中确定baseCtx的特定邻居在图16的TU1600 中被在视觉上示出。对于位于TU1600中间的变换系数(例如,位于 (y,x)处的系数1602),baseCtx基于位于(y,x+1)、(y,x+2)、 (y+1,x)、(y+2,x)以及(y+1,x+1)处的五个邻居而被确定。 对于位于TU1600的左边界上的变换系数(例如,位于(y,0)处的系 数1604),baseCtx基于位于(y+1,0)和(y+2,0)处的两个邻居 而被确定。对于位于TU1600的上边界上的变换系数(例如,位于(0, x)处的系数1606),baseCtx基于位于(0,x+1)和(0,x+2))处的 两个邻居而被确定。并且对于位于TU1600的上部左上边界中的特定 变换系数(例如,系数1608、1610、1612、1614),baseCtx不是基于 任何邻居数据。

特定实施例可以被实现在用于由指令执行系统、设备、装置或机 器使用或者连同其一起使用的非暂时性计算机可读存储介质中。例如, 非暂时性计算机可读存储介质能够包含用于控制计算机系统/装置执行 由特定实施例所描述的方法的程序代码或指令。程序代码当被计算机 系统/装置的一个或多个处理器执行时,能够可操作来执行在特定实施 例中被描述的程序代码。

如于此在本描述中和遍及以下权利要求书所使用的那样,除非上 下文明确地另外规定,否则“一”、“一个”以及“该”包括复数参 考。并且,如于此在本描述中和遍及以下权利要求书所使用的那样, 除非上下文明确地另外规定,否则“在...中”的意义包括“在...中”和 “在...上”。

上述描述连同特定实施例的方面如何可以被实现的示例一起图示 了各种实施例。上述示例和实施例不应该被认为是仅有的实施例,并 且被呈现来图示如由以下权利要求书所限定的特定实施例的灵活性和 优点。基于上述公开和以下权利要求书,在不背离如由本权利要求书 所限定的其范围的情况下可以采用其它布置、实施例、实施方式以及 等同物。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号