用于代码化视频数据块的方法和装置与流程

文档序号:19667873发布日期:2020-01-10 21:57阅读:243来源:国知局

背景技术
::数字视频流可以使用帧或静止图像的序列来表示视频。数字视频可以用于各种应用,包括例如视频会议、高清视频娱乐、视频广告或用户生成的视频的共享。数字视频流可以包含大量数据并且消耗计算设备的大量计算或通信资源以用于视频数据的处理、传输或存储。已经提出了用于降低视频流中的数据量的各种方法,包括压缩和其他编码技术。技术实现要素:本公开的实施方式的一个方面是一种用于使用帧内预测模式来帧内代码化当前块的方法。该方法包括确定所述当前块的左邻居块的第一帧内预测模式;以及确定所述当前块的上邻居块的第二帧内预测模式。在所述第一帧内预测模式和所述第二帧内预测模式为相同模式的条件下,该方法使用该相同模式来确定用于代码化所述当前块的帧内预测模式的概率分布。在所述第一帧内预测模式和所述第二帧内预测模式不是相同模式并且左帧内预测模式和上第二帧内预测模式中的仅一个是平滑帧内预测模式的条件下,该方法使用所述第一帧内预测模式和所述第二帧内预测模式中的另一个来确定用于代码化所述帧内预测模式的概率分布。否则,该方法使用所述第一帧内预测模式和所述第二帧内预测模式中的任一个来确定用于代码化所述帧内预测模式的概率分布。该方法还包括使用所述概率分布来代码化所述帧内预测模式。另一方面是一种用于使用帧内预测模式代码化当前块的包括存储器和处理器的装置。所述存储器包括可由所述处理器执行的指令,以确定所述当前块的左邻居块的第一帧内预测模式;确定所述当前块的上邻居块的第二帧内预测模式;在所述第一帧内预测模式和所述第二帧内预测模式为相同模式的条件下,使用该相同模式来确定用于代码化所述当前块的帧内预测模式的概率分布;在所述第一帧内预测模式和所述第二帧内预测模式不是相同模式并且左帧内预测模式和上帧内预测模式中的仅一个是平滑帧内预测模式的条件下,使用所述第一帧内预测模式和所述第二帧内预测模式中的另一个来确定用于代码化所述帧内预测模式的概率分布;或者否则,使用所述第一帧内预测模式和所述第二帧内预测模式中的任一个来确定用于代码化所述帧内预测模式的概率分布。指令还可以包括使用所述概率分布来代码化所述帧内预测模式的指令。本公开的实施方式的一个方面是一种使用级别图来代码化变换块的方法。该方法包括以前向扫描顺序代码化对应于块结束的扫描位置;以反向扫描顺序代码化指示包含非零变换系数的所述当前块的位置非零图;以反向扫描顺序代码化较低范围级别图,每个较低范围级别图具有直到最大图级别的相应图级别,所述较低范围级别图指示所述非零变换系数的哪些绝对值等于相应图级别,以及所述非零变换系数的哪些绝对值大于相应图级别;以及代码化系数残差图,所述系数残差图的每个残差系数对应于具有大于所述最大图级别的绝对值的所述当前块的相应非零变换系数。另一方面是一种用于使用级别图来代码化变换块的包括存储器和处理器的装置。所述存储器包括可由所述处理器执行的指令以代码化对应于块结束的扫描位置;代码化表示所述当前块的相应非零变换系数的绝对值的比特以及与从与最小图级别相关联的最高有效位开始的相应图级别相关联的一个或多个附加比特,所述比特具有指示所述绝对值是否大于级别图的最大图级别的最低有效位,每个附加比特指示所述绝对值是否至少等于所述相应图级别;以及代码化系数残差图,所述系数残差图的每个残差系数对应于具有超过所述最大图级别的绝对值的所述当前块的相应非零变换系数。另一方面是一种使用级别图来解码变换块的方法。该方法包括以反向扫描的顺序解码对应于块结束的扫描位置;解码表示所述当前块的相应非零变换系数的绝对值的比特以及与从与最小图级别相关联的最高有效位开始的相应图级别相关联的一个或多个附加比特,所述比特具有指示所述绝对值是否大于级别图的最大图级别的最低有效位,每个附加比特指示所述绝对值是否至少等于所述相应图级别;以及解码系数残差图,所述系数残差图的每个残差系数对应于具有超过所述最大图级别的绝对值的所述当前块的相应非零变换系数。在实施例的下述详细描述、所附权利要求和附图中公开了本公开的这些和其他方面。附图说明本文的描述参考了附图,其中,在几个视图中相同的附图标记表示相同的部件。图1是视频编码和解码系统的示意图。图2是可以实现发送站或接收站的计算设备的示例的框图。图3是待编码并随后解码的视频流的示意图。图4是根据本公开的实施方式的编码器的框图。图5是根据本公开的实施方式的解码器的框图。图6是根据本公开的实施方式,用于使用级别图编码在编码视频比特流中的变换块的过程的流程图。图7是示出根据本公开的实施方式,使用级别图的变换系数代码化的阶段的示意图。图8是根据本公开的实施方式的非零图中的先前代码化的邻居的示意图。图9是根据本公开的实施方式,用于使用级别图来代码化变换块的过程的流程图。图10a和图10b是根据本公开的实施方式,用于确定代码化上下文的模板的示例的示意图。图11是根据本公开的实施方式,用来熵代码化变换块的系数令牌树的示意图。图12是根据本公开的实施方式,用于使用包括首令牌和尾令牌的系数字母代码化变换块的过程的流程图。图13是根据本公开的实施方式的概率映射的示例的示意图。图14a是根据本公开的实施方式的定向帧内预测模式的示意图。图14b是根据本公开的实施方式的帧内预测模式的示例的示意图。图14c是根据本公开的实施方式的平滑预测模式的示例的示意图。图15是根据本公开的实施方式,用于帧内代码化当前块的过程的流程图。图16是根据本公开的实施方式,用于确定上下文的区域的示例的示意图。图17是根据本公开的实施方式,用于使用级别图来解码变换块的过程的流程图。图18是根据本公开的实施方式,用于使用帧内预测模式代码化当前块的过程的流程图。图19是根据本公开的另一实施方式,用于使用帧内预测模式代码化当前块的过程的流程图。图20是根据本公开的实施方式的上下文模型索引的示意图。具体实施方式如上所述,与代码化视频流有关的压缩方案可以包括将图像分成块;以及使用一种或多种用于限制包括在数字视频输出比特流(即,编码比特流)中的信息的技术来生成该输出比特流。可以对所接收的比特流进行解码,以从有限信息重新创建块和源图像。编码视频流或其一部分(例如帧或块)可以包括使用视频流中的时间或空间相似性来提高代码化效率。例如,可以基于识别先前代码化的像素值与当前块中的那些之间的差(残差)或先前代码化的像素值的组合与当前块中的那些之间的差(残差)来编码视频流的当前块。使用空间相似性的编码可以被称为帧内预测。帧内预测尝试使用该块外围的像素,也就是说,使用与该块在同一帧中但在该块外的像素来预测视频帧的一个块的像素值。由帧内预测产生的预测块在本文中被称为帧内预测器。可以沿着预测的方向执行帧内预测,其中,每个方向可以对应于帧内预测模式。帧内预测模式可以由编码器用信号发送给解码器。使用时间相似性的编码可以被称为帧间预测。帧间预测试图使用与一个或多个时间上邻近的帧(即,参考帧)可能移位的一个或多个块来预测块的像素值。时间上邻近的帧是在视频流中在时间上出现得早于正在编码的块的帧的帧。由帧间预测产生的预测块在本文中称为帧间预测器。使用运动矢量执行帧间预测。用于生成预测块的运动矢量是指除当前帧以外的帧,即参考帧。参考帧在视频流序列中可以位于当前帧之前或之后。一些编解码器最多使用可以被存储在帧缓冲区中的八个参考帧。运动矢量可以参考(即,使用)帧缓冲器的参考帧中的一个。这样,一个或多个参考帧可用于代码化当前帧。如上所述,可以基于识别先前代码化的像素值与当前块中的像素值之间的差(残余),来对视频流的当前块进行编码。以此方式,仅残差和用于产生残差的参数需要被添加到编码比特流。可以使用有损量化步骤来编码残差。残差块可以在像素域中。残差块可以被变换到频域中,从而产生变换系数的变换块。可以量化变换系数,从而生成量化变换系数的量化变换块。量化系数可以被熵编码并且被添加到编码比特流。解码器可以接收编码比特流,对量化变换系数进行熵解码,以重建原始视频帧。熵代码化是用于“无损”代码化的技术,其依赖于对出现在编码视频比特流中的值的分布进行建模的概率模型。通过使用基于测量或估计的值分布的概率模型,熵代码化可以将表示视频数据所需的比特数减少到接近理论最小值。实际上,表示视频数据所需的比特数的实际减少可以是概率模型的精度、执行代码化的比特数以及用于执行代码化的定点算法的计算精度的函数。在编码的视频比特流中,许多比特用于以下两种情况之一:内容预测(例如,帧间模式/运动矢量代码化、帧内预测模式代码化等)或残差代码化(例如,变换系数)。关于内容预测,比特流中的比特对于一个块,可以包括用于编码该块的帧内预测模式。可以使用熵代码化来代码化(由编码器编码并且由解码器解码)帧内预测模式。这样,上下文被确定用于该帧内预测模式,并且与用于代码化该帧内预测模式的该上下文相对应的概率模型用于代码化。编码器可以使用技术来减少在系数代码化上花费的比特量。例如,系数令牌树(也可以称为二进制令牌树)指定值的范围,并为该令牌树中的每个分支指定前向自适应概率。从待代码化的值中减去令牌基值,以形成残差,然后以固定的概率代码化该块。具有较小变化(包括后向适应性)的类似方案也是可能的。自适应技术可以在对视频流进行编码时更改概率模型,以适应数据特征的变化。在任何情况下,解码器都被告知(或具有可用的)概率模型,该概率模型被用来编码熵代码化的视频比特流,以便解码视频比特流。如上所述,通常通过使用概率模型来确定符号的序列的概率p然后使用二进制算术代码化来在编码器上将该序列映射到二进制码字并且在解码器处从二进制码字解码该序列来实现对该序列进行熵代码化。码字的长度(即位数)由-log(p)给出。熵代码化的效率可以与概率模型直接相关。在本文档中,除非另有说明,否则对数表示对数函数以二(2)为基数。本文所使用的模型可以是无损(熵)代码化,或可以是无损(熵)代码化中的参数。模型可以是影响熵代码化的概率估计的任何参数或方法。上下文建模的目的是为获得用于随后的熵代码化引擎(诸如算术代码化、霍夫曼代码化和其他可变长度到可变长度代码化引擎)的概率分布。为了获得良好的压缩性能,可能需要大量的上下文。例如,一些视频代码化系统可以包括仅用于变换系数代码化的数百甚至数千个上下文。每个上下文可以对应于概率分布。概率分布可以由解码器学习和/或包括在要解码的帧的头部中。学习可以是指解码器的熵代码化引擎可以基于解码的帧来适应上下文模型的概率分布(即,概率模型)。例如,解码器可以具有可用的初始概率分布,当解码器解码其他帧时,解码器(例如,解码器的熵代码化引擎)可以连续更新该初始概率分布。概率模型的更新可以确保初始概率分布被更新以反映解码帧中的实际分布。在给定对应上下文的情况下,在头部中包括概率分布可以指示解码器使用所包括的概率分布来对下一帧进行解码。成本(以位为单位)与在报头中包括每个概率分布相关联。例如,在包括3000个上下文并使用8位来编码概率分布(被代码化为1到255之间的整数值)的代码化系统中,将24,000个比特添加到已编码的比特流中。这些比特是开销比特。可以使用一些技术来减少开销比特的数量。例如,可以包括用于一些而不是全部上下文的概率分布。例如,还可以使用预测方案来减少开销比特。即使使用这些开销缩减技术,开销也不会为零。如上所述,视频块的残差被变换为变换系数的变换块。变换块在频域中,并且可以为视频块生成一个或多个变换块。变换系数被量化并被熵代码化成编码视频比特流。解码器使用编码变换系数和参考帧来重构块。对变换系数进行熵代码化涉及选择上下文模型(也称为概率上下文模型或概率模型),其提供用于代码化二值化变换系数的二进制符号的条件概率的估计。本公开的实施方式可以导致减少用于代码化内容预测和/或残差代码化的不同方面的上下文的数量。例如,可以减少用于代码化帧内预测模式的上下文的数量。本公开的实施方式可以减少与上下文相关联的概率值的数量。同样地,本公开的实施方式可以具有降低计算和存储复杂度,而不会不利地影响压缩性能。本文首先参考结合本教导的系统来描述精细的熵代码化。图1是视频编码和解码系统100的示意图。发送站102可以是例如具有诸如图2中所述的硬件的内部配置的计算机。然而,发送站102的其他合适的实施方式是可能的。例如,发送站102的处理可以分布在多个设备之间。网络104可以连接发送站102和接收站106,以用于编码和解码视频流。具体地,可以在发送站102中编码视频流,并且可以在接收站106中解码编码的视频流。网络104可以是例如因特网。网络104还可以是局域网(lan)、广域网(wan)、虚拟专用网(vpn)、蜂窝电话网或将视频流从发送站102传送到在该示例中的接收站106的任何其他装置。在一个示例中,接收站106可以是具有诸如图2中所述的硬件的内部配置的计算机。然而,接收站106的其他合适的实施方式是可能的。例如,接收站106的处理可以分布在多个设备之间。视频编码和解码系统100的其他实施方式是可能的。例如,实施方式可以省略网络104。在另一实施方式中,视频流可以被编码然后存储以便稍后传输到接收站106或具有存储器的任何其他设备。在一种实施方式中,接收站106(例如,经由网络104、计算机总线和/或一些通信路径)接收编码的视频流并存储该视频流以供稍后解码。在一种示例性实施方式中,实时传输协议(rtp)被用来通过网络104传输编码的视频。在另一实施方式中,可以使用除rtp之外的传输协议,例如,超文本传输协议(http)的视频流协议。当在视频会议系统中使用时,例如,发送站102和/或接收站106可以包括如下所述的编码和解码视频流的能力。例如,接收站106可以是视频会议参与者,其从视频会议服务器(例如,发送站102)接收编码的视频比特流以解码和查看,并且进一步编码其自己的视频比特流并将其发送到视频会议服务器,以用于由其他参与者解码和查看。图2是可以实现发送站或接收站的计算设备200的示例的框图。例如,计算设备200可以实现图1的发送站102和接收站106中的一个或两个。计算设备200可以以包括多个计算设备的计算系统的形式,或者以单个计算设备的形式,例如移动电话、平板电脑、手提电脑、笔记本计算机和台式计算机等。计算设备200中的cpu202可以是中央处理单元。替选地,cpu202可以是能够操纵或处理信息的现在存在或以后开发的任何其他类型的设备或多个设备。尽管可以用所示的单个处理器(例如cpu202)来实施所公开的实施方式,但是可以使用一个以上处理器来实现速度和效率的优点。计算设备200中的存储器204在一种实施方式中可以是只读存储器(rom)设备或随机存取存储器(ram)设备。任何其他合适类型的存储设备可以被用作存储器204。存储器204可以包括由cpu202使用总线212访问的代码和数据206。存储器204可以进一步包括操作系统208和应用程序210,应用程序210包括允许cpu202执行在此所述的方法的至少一个程序。例如,应用程序210可以包括应用1到n,其进一步包括执行在此所述的方法的视频代码化应用。计算设备200还可以包括辅助存储214,其可以例如是与移动的计算设备一起使用的存储卡。因为视频通信会话可能包含大量信息,所以它们可以被全部或部分地存储在辅助存储214中并且根据需要被加载到存储器204中以用于处理。计算设备200还可以包括一个或多个输出设备,诸如显示器218。在一个示例中,显示器218可以是触敏显示器,其将显示器与可操作以感测触摸输入的触敏元件组合。显示器218可以经由总线212耦合到cpu202。除了显示器218之外或者作为显示器218的替代,可以提供允许用户编程或以其他方式使用计算设备200的其他输出设备。当输出设备是显示器或包括显示器时,可以以各种方式实现显示器,包括通过液晶显示器(lcd)、阴极射线管(crt)显示器或发光二极管(led)显示器,诸如有机led(oled)显示器。计算设备200还可以包括图像感测设备220,或者与图像感测设备220进行通信,图像感测设备220例如是相机或现在存在或以后开发的任何其他图像感测设备220,该任何其他图像感测设备可以感测图像,诸如操作计算设备200的用户的图像。可以定位图像感测设备220,使得其指向操作计算设备200的用户。在示例中,图像感测设备220的位置和光轴可以被配置,使得视野包括与显示器218直接相邻并且从其可以看到显示器218的区域。计算设备200还可以包括声音感测设备222或者与声音感测设备222通信,声音感测设备222例如是麦克风或者现在存在或以后开发的可以感测计算设备200附近的声音的任何其他声音感测设备。声音感测设备222可以被定位,使得其指向操作计算设备200的用户,并且可以被配置为接收在用户操作计算设备200时由用户做出的声音,例如,语音或其他话语。虽然图2将计算设备200的cpu202和存储器204图示为集成到单个单元中,但是可以使用其他配置。cpu202的操作可以分布在多个机器(每个机器具有一个或多个处理器)上,这些机器可以直接耦合或跨局域网或其他网络耦合。存储器204可以分布在多个机器上,诸如基于网络的存储器或执行计算设备200的操作的多个机器中的存储器。虽然在此图示为单条总线,但是计算设备200的总线212可以由多条总线组成。此外,辅助存储214可以直接耦合到计算设备200的其他组件,或者可以经由网络被访问,并且可以包括诸如存储卡的单个集成单元或诸如多个存储卡的多个单元。因此,可以以各种各样的配置实现计算设备200。图3是要编码并随后解码的视频流300的示例的图。视频流300包括视频序列302。在下一级,视频序列302包括多个相邻帧304。虽然三个帧被图示为相邻帧304,但视频序列302可以包括任意多个相邻帧304。然后,相邻帧304可以被进一步细分为单独的帧,例如帧306。在下一级,帧306可以被分成一系列片段308或平面。例如,片段308可以是允许例如并行处理的帧的子集。片段308也可以是将视频数据分离成单独颜色的帧的子集。例如,彩色视频数据的帧306可以包括亮度平面和两个色度平面。可以以不同的分辨率采样片段308。无论帧306是否被分成片段308,帧306都可以被进一步细分为块310,块310可以包含对应于帧306中的例如16×16像素的数据。块310还可以被布置为包括来自像素数据的一个或多个片段308的数据。块310还可以是任何其他合适的大小,例如4×4像素、8×8像素、16×8像素、8×16像素、16×16像素或更大。图4是根据本公开的实施方式的编码器400的框图。如上所述,可以诸如通过提供存储在诸如存储器204的存储器中的计算机软件程序,在发送站102中实现编码器400。计算机软件程序可以包括机器指令,其当由诸如cpu202的处理器执行时,使发送站102以本文所述的方式编码视频数据。编码器400还可以被实现为包括在例如发送站102中的专用硬件。编码器400具有用于在(由实线连接线示出的)前向路径中执行各种功能以将视频流300用作输入来生成编码或压缩比特流420的下述级:帧内/帧间预测级402、变换级404、量化级406和熵编码级408。编码器400还可以包括(由点连接线示出的)重构路径以重构用于编码未来块的帧。在图4中,编码器400具有用于在重构路径中执行各种功能的下述级:去量化级410、逆变换级412、重构级414和环路滤波级416。编码器400的其他结构变化可以被用于编码视频流300。当呈现视频流300以编码时,可以以块为单位处理帧306。在帧内/帧间预测级402,可以使用帧内预测(也称为帧内预测)或帧间预测(也称为帧间预测)或两者的组合来代码化块。在任何情况下,都可以形成预测块。在帧内预测的情况下,可以由当前帧中、先前已经被代码化和重构的样本形成所有或部分预测块。在帧间预测的情况下,可以由使用运动矢量确定的一个或多个先前构建的参考帧中的样本形成全部或部分预测块。接下来,仍然参考图4,可以在帧内/帧间预测级402处,从当前块中减去预测块以生成残差块(也称为残差)。变换级404使用基于块的变换,将残差变换为例如频域中的变换系数。这种基于块的变换包括例如离散余弦变换(dct)和非对称离散正弦变换(adst)。其他基于块的变换也是可能的。此外,可以将不同变换的组合应用于单个残差。在应用变换的一个示例中,dct将残差块变换到频域,其中,变换系数值基于空间频率。最低频率(dc)系数在矩阵左上角,并且最高频率系数在矩阵右下角。值得注意的是,预测块的大小以及由此产生的残差块可以与变换块的大小不同。例如,预测块可以被分成被应用了单独变换的较小块。量化级406使用量化器值或量化级,将变换系数转换为离散量子值,其被称为量化变换系数。例如,变换系数可以除以量化器值并被舍位。然后,由熵编码级408熵编码量化变换系数。可以使用包括令牌和二叉树的任何数量的技术来执行熵代码化。然后,将熵编码的系数与被用于解码块的其他信息(其可以包括例如所使用的预测的类型、变换类型、运动矢量和量化器值)一起输出到压缩比特流420。可以将用于解码块的信息熵代码化成在压缩比特流420内的块、帧、切片和/或部分报头。压缩比特流420也可以被称为编码视频流或编码视频比特流,在本文中,可以互换地使用这些术语。图4中的(由虚线连接线示出的)重构路径可以被用于确保编码器400和(下文所述)解码器500使用相同的参考帧和块来解码压缩比特流420。重构路径执行类似于在(下文更详细讨论的)解码过程期间发生的功能的功能,包括在去量化级410对量化变换系数进行去量化,并且在逆变换级412对去量化变换系数进行逆变换以生成衍生残差块(也称为衍生残差)。在重构级414,可以将在帧内/帧间预测级402预测的预测块添加到衍生残差以创建重构块。环路滤波级416可以被应用于重构块以减少诸如块伪影的失真。编码器400的其他变型可以被用于编码压缩比特流420。例如,基于非变换的编码器400可以对于某些块或帧在没有变换级404的情况下直接量化残差信号。在另一实施方式中,编码器400可以具有组合成单个级的量化级406和去量化级410。图5是根据本公开的实施方式的解码器500的框图。可以例如通过提供存储在存储器204中的计算机软件程序,在接收站106中实现解码器500。计算机软件程序可以包括机器指令,其当由诸如cpu202的处理器执行时,使得接收站106以下文所述的方式解码视频数据。还可以以包括在例如发送站102或接收站106中的硬件来实现解码器500。类似于上文讨论的编码器400的重构路径,解码器500在一个示例中包括执行各种功能以从压缩比特流420生成输出视频流516的下述级:熵解码级502、去量化级504、逆变换级506、帧内/帧间预测级508、重构级510、环路滤波级512和后滤波级514。解码器500的其他结构变型可用于解码压缩比特流420。当呈现压缩比特流420以解码时,压缩比特流420内的数据元素可由熵解码级502解码以生成一组量化变换系数。去量化级504对量化变换系数进行去量化(例如,通过将量化变换系数乘以量化器值),并且逆变换级506使用所选择的变换类型逆变换去量化变换系数以生成可以与由在编码器400中的逆变换级412创建的衍生残差相同的衍生残差。使用从压缩比特流420解码的报头信息,解码器500可以使用帧内/帧间预测级508来创建与在编码器400中,例如在帧内/帧间预测级402处创建的相同的预测块。在重构级510,可以将预测块添加到衍生残差以创建重构块。环路滤波级512可以被应用于重构块以减少成块伪影。其他滤波可以应用于重构块。在示例中,后滤波级514可以被应用于重构块以减小块失真,并且结果被输出为输出视频流516。输出视频流516也可以被称为解码视频流,本文可以互换地使用这些术语。解码器500的其他变型可以被用于解码压缩比特流420。例如,解码器500可以在没有后滤波级514的情况下生成输出视频流516。解码器500的其他变型可以被用来解码压缩比特流420。例如,解码器500可以在没有后滤波级514的情况下产生输出视频流516。在解码器500的一些实施方式中,后滤波级514被用在环路滤波级512之后。环路滤波级512可以包括可选的去块滤波级。附加地或可替代地,编码器400在环路滤波级416中包括可选的去块滤波级。一些编解码器可以使用级别图来对变换块进行代码化(即,由编码器编码或由解码器解码)。即,一些编解码器可以使用级别图来对变换块的变换系数进行代码化。在级别图代码化中,将变换块分解为多个级别图,以使级别图将每个变换系数值的代码化分解(即减少)为对应于量值级别(即,图级别)的一系列二进制决策。分解可以通过多次运行过程完成。这样,根据下述等式,将变换块的变换系数分解为一系列级别二进制和残差:其中,residue[r][c]=absolute(coefficient[r][c])-t-1在以上等式中,coefficient[r][c]是在位置(行=r,列=c)处的变换块的变换系数,t是最大图级别,levelk是对应于图级别k的级别图,residue是系数残差图,以及sign是变换系数的符号图。在下文中,参考图7,进一步描述这些术语。可以使用相同的等式,诸如通过解码器,从编码的levelk图、残差图residue和符号图sign中重新组成变换块的变换系数。第零次运行可用于确定非零图(也被称为级别0图),其指示变换块的哪些变换系数为零而哪些为非零。按从级别1到最大图级别t的升序生成对应于运行1到最大(即阈值)级别t的级别图(即,级别1图,级别2图,...,级别t图)。用于级别k的级别图(被称为级别k图)指示变换块的哪些变换系数的绝对值大于或等于k。级别图是二进制图。最后运行会生成系数残差图。如果变换块包含高于最大图级别t的变换系数值,则系数残差图指示这些系数大于最大图级别t的程度(即残差)。当生成(即,代码化)级别k图时,仅需要处理对应于级别(k-1)图的位置(r,c)的位置(r,c)(即levelk-1[r][c]=1)–确定级别(k-1)的其他位置小于k,因此,对级别k图无需处理它们。这降低了处理复杂度并且减少了二进制代码化运算量。由于级别图包含二进制值,所以要编码的值的上和左邻居是二进制值。可以确定基于任意数量的先前代码化邻居的二进制值的上下文模型。上下文模型可以充分利用来自所有这些邻居的信息。先前代码化的邻居可以是相同级别图或先前级别图(例如紧邻在前的级别图)中的邻居。级别-k(例如,级别-2)图的紧接在前的图是级别(k-1)(例如,级别-1)图。根据本公开的上下文可以不太复杂,从而产生用于对级别图进行代码化的有效模型。当对级别k图进行编码时,可以将完全代码化的级别(k-1)图和部分代码化的级别k图用作上下文建模的上下文信息。与其他视频系统的变换系数代码化相比,在移至下一个变换系数之前一次代码化一个系数值,本发明的实施方式可以减少参考样本集的基数。这是因为,如本文进一步所述,来自级别(k-1)图和部分代码化的级别k图的信息是二进制信息。二进制信息使得能够将复杂的空间相邻模板用于上下文建模二进制信息。这样的空间相邻模板可以更好地捕获变换块的统计特性,尤其是具有较大变换块大小的统计特性。图6是根据本公开的实施方式,用于使用级别图对编码视频比特流中的变换块进行编码的过程600的流程图。可以在诸如编码器400的编码器中实现过程600。编码视频比特流可以是图4的压缩比特流420。例如,过程600可以被实现为可以由诸如发送站102的计算设备执行的软件程序。软件程序可以包括机器可读指令,机器可读指令可以存储在诸如存储器204或辅助存储214的存储器中,并且可以由诸如cpu202的处理器执行,以使计算设备执行过程600。在至少一些实施方式中,可以由编码器400的熵编码级408全部或部分地执行过程600。可以使用专用硬件或固件来实现过程600。一些计算设备可以具有多个存储器、多个处理器或两者。可以使用不同的处理器、存储器或两者来分发过程600的步骤或操作。单数的术语“处理器”或“存储器”的使用包括具有一个处理器或一个存储器的计算设备以及具有可以在执行一些或所有所述步骤中使用的多个处理器或多个存储器的设备。现在参考图7解释过程600。图7是示出根据本公开的实施方式,使用级别图的变换系数代码化的级的示意图。更具体地说,图7将级示为系数代码化树700。图7包括之字形前向扫描顺序702、变换块704、非零图706、级别1图707、级别2图709、块结束(eob)图726、符号图732和系数残差图734。扫描顺序也被称为扫描方向。过程600可以接收变换块,诸如图7的变换块704。可以从编码器的量化步骤(诸如图4的编码器400的量化级406)接收变换块。变换块704包括零和非零变换系数。一些非零系数可以是负值。在602处,编码非零图。非零图指示包含非零变换系数的变换块的位置。非零图也可以称为级别0图。图7的非零图706示出了非零图。可以以诸如图7的之字形前向扫描顺序702的扫描顺序遍历变换块704并且在非零图706中使用二进制值指示对应的变换系数是零还是非零来生成非零图。在非零图706中,用二进制值1(一)指示变换块704的非零变换系数,并且用二进制0(零)指示零变换系数。然而,可以反转该指示(即,零指示非零变换系数,1(一)指示零变换系数)。在实施方式中,在非零图中未指示基于变换块的扫描顺序超出最后一个非零变换系数(即,在最后一个非零变换系数之后)的零变换系数。例如,使用之字形前向扫描顺序702来扫描变换块704,对应于扫描顺序位置11的最后一个非零变换系数708是在非零图706中的在最后一个非零系数710处的最后指示的变换系数。对于与之字形前向扫描顺序702的扫描位置12-15相对应的变换系数,在非零图706中没有指示值。在604处,过程600编码相应的较低范围级别图。每个较低范围图都具有达到最高图级别的图级别。较低范围级别图指示非零变换系数中的哪些值等于较低范围图的图级别以及非零变换系数中的哪些值大于该图级别。对于每个图级别k,直到最大图级别t,编码较低范围级别图levelk。每个较低范围级别图指示变换块中的哪些值等于较低范围级别图的图级别以及变换块中的哪些值大于该图级别。因此,使用多次运行(即,每次运行对应于级别k=1,2,...,t)的过程600将变换系数的代码化分解为一系列二元决策,每个二元决策对应于一个量值级别。可以通过以下定义在级别k的变换块中的行和列(r,c)处的系数的二元决策:levelk[r][c]=1如果absolute(coefficient[r][c])>k=0如果absolute(coefficient[r][c])≤k例如,对于k=1(即,对于级别1图707),过程600针对变换块704的每个变换系数确定变换系数的绝对值是大于k(即,1)还是小于等于k。对于变换系数720(即,在r=0,c=0),因为-7的绝对值(即,|-7|=7)大于1,所以过程600将级别1图707的对应值722设置为1。对于最后一个非零变换系数708(即,在r=2,c=2),因为-1的绝对值(即,|-1|=1)等于k(即1),所以过程600将级别1图707的对应值716设置为0。变换块中的最后一个非零变换系数(例如,最后一个非零变换系数708)可以被称为最高ac系数。在实施方式中,为了生成较低级别图,过程600可以从先前级别图的最后一个1值开始向后扫描前一级别图。对于级别k图,前一级别图是对应于前一图级别(k-1)的级别(k-1)图。也就是说,对于k=2,前一级别图是级别1图。对于k=1,前一级别图是级别0图(即,非零图)。对于级别1图707,对非零图706的扫描从最后一个非零系数710开始。对于级别2图709,对级别1图707的扫描从最后一个非零系数724开始。在生成级别k图时,过程600仅需要处理对应于级别(k-1)中的1值的变换系数。过程600不需要处理对应于非1值的变换系数,因为那些值已被确定为等于k-1(即,级别(k-1)图的零值)或者小于k-1(即,级别(k-1)图的空值)。在实施方式中,可以固定最大图级别t。例如,可以将最大图级别t作为配置提供给过程600,可以在实现过程600的程序中对最大图级别t进行硬代码化,或者可以基于编码视频比特流的先前代码化的变换块或其他块统计地或自适应地设置最大图级别t。或者,由过程600确定最大图级别t。即,过程600可以测试最大图级别t的不同值(即,t=1,2,3,4,...),并确定哪个值提供最佳压缩性能。可以在视频比特流中代码化导致最佳压缩的诸如图5的解码器500的解码器可以解码和使用的最大图级别t的值。与最大图级别t的其他值相比,已确定最大图级别t为2或3以提供可接受的压缩。在606处,过程600对系数残差图进行编码。系数残差图的每个残差系数对应于具有超过最大图级别的绝对值的变换块的相应(即,共位)的非零变换系数。可以使用公式(1)来计算变换块的位置(r,c)处的变换系数的残差系数:residue[r][c]=absolute(coefficient[r][c])-t-1(1)图7示出了系数残差图734。在图7的示例中,最大图级别t等于二(2)。因此,系数残差图734包含其绝对值大于2的变换块704的变换系数的残差。残差系数是变换系数的绝对值超过最大图级别t的程度。变换块704的两个值(即,变换系数720(即,|-7|=7>2)和变换系数739(即|4|=4>2))的绝对值大于最大图级别t的值(即,2)。分别地,系数残差图734包括残差736和残差738。使用公式(1),残差736被设置为5(即,absolute(-7)–3=4),并且残差738被设置为1(即,absolute(4)–3=1)。可以使用二进制代码化在编码视频比特流中对系数残差图734的残差系数进行编码。可以使用拟合系数残差图的残差系数的统计的概率分布。概率分布可以是几何分布、拉普拉斯分布、帕累托分布或任何其他分布。在编码视频比特流中编码残差系数例如在编码变换系数的视频代码化系统上提供了若干益处。由于每个残差系数的量值小于其对应的变换系数,因此需要较少的比特来编码残差系数。另外,由于要编码的残差系数(例如,图7的系数残差图734中的2)少于非零变换系数(例如,图7的变换块704中的7),因此可以导致额外的压缩。在过程600的实施方式中,还可以编码符号图。符号图指示变换块中的哪些变换系数具有正值以及哪些变换系数具有负值。不需要在符号图中指示为零的变换系数。图7的符号图732示出了变换块704的符号图的示例。在符号图中,用-1指示负变换系数,而用1指示正变换系数。在一些实施方式中,可以用0指示正系数的符号,而用1指示负系数的符号。在过程600的实现中,在602处对非零图进行编码还可以包括:生成变换块的块结束图,并且在编码视频比特流中将非零图和块结束图交织。块结束图指示变换块的非零变换系数是否是相对于给定扫描顺序的最后一个非零系数。如果非零系数不是变换块中的最后一个非零系数,则它可以在块结束图中用二进制值0(零)来指示。另一方面,如果非零系数是变换块中的最后一个非零系数,则它可以在块结束图中用二进制值1(一)来指示。举例来说,由于变换块704的变换系数720接着另一非零变换系数(例如,对应于扫描位置2的变换系数-1),变换系数720不是最后一个非零变换系数,所以它用为零的块结束值728来指示。另一方面,由于对应于扫描位置11的变换系数(即,最后一个非零变换系数708)是变换块704的最后一个非零系数,因此它用为1(一)的块结束值730来指示。过程600可以通过以相同扫描顺序遍历非零图和块结束图,在编码的比特流中交织来自非零图706和块结束图726的值。过程600可以使用之字形前向扫描顺序702或任何任意扫描顺序。对于每个位置(r,c),首先代码化非零图706的该行和列处的值(即,nz_map[r][c]))。如果值nz_map[r][c])是1,则接着代码化来自块结束图726的对应值(即,eob_map[r][c])以指示变换块704的位置(r,c)是否包含最后一个非零变换系数。当eob_map[r][c]等于1时或者当到达变换块中的最后位置(例如,之字形前向扫描顺序702中的扫描位置15)时,过程600结束非零图(例如,非零图706)的代码化。也就是说,当编码来自非零图706的为1的值时,该值之后是来自对应(即,共位)块结束图726的另一语法元素(即,要在编码视频比特流中编码的值),以指示1值是否是非零图706的最后1值。在实施方式中,在602处对非零图进行编码还可以包括确定非零图的值(即,待代码化值)的代码化上下文。在当前位置(r,c)处的待代码化值的代码化上下文可以基于非零图中的待代码化值的先前代码化的非零相邻值。代码化上下文还可以基于非零图内的待代码化值的位置。如上所述,上下文信息可以基于当前位置的非零先前代码化的邻居的数量来确定并且可以使用下面的总和来计算。non_zero_map_sum(r,c)=∑(r′,c′)∈nb(r,c)nz_map(r′,c′)(2)在等式(2)中,non_zero_map_sum(r,c)是位置(r,c)处的非零块的待代码化值的非零先前代码化的邻居的数量,nb(r,c)是在非零图的位置(r,c)处的待代码化值的先前代码化的邻居的集合,并且nz_map(r',c')是非零图中的位置(r',c')处的值。参考图8进一步解释等式(1)。图8是根据本公开的实现的非零图800中的先前代码化的邻居的示意图。图8包括待编码值、当前值802、不可用上下文邻居806(即,上下文信息不可用的相邻值)以及代码化上下文邻居,例如代码化上下文邻居808。示出了十个代码化上下文邻居804。邻居集合中包含哪些值取决于扫描顺序。例如,使用图7的之字形前向扫描顺序702,图8中示出的邻居集合包括代码化上下文邻居808,其包括在当前值802的上方和左侧的邻居。对于当前值802,non_zero_map_sum(2,2)=5。该值(即,5)可以用作用于确定用于代码化非零图800的当前值802的概率模型的上下文信息。如上所述,代码化上下文还可以是基于在非零图内(或者等效地,在变换块内)的待代码化值的位置。变换块的位置可以分组为上下文组。例如,可以设置四个上下文组:对应于dc系数的第一组(即,r=0和c=0)、除了ac系数之外对应于顶行的第二组(即,r=0和c〉0)、除了ac系数之外对应于最左列的第三组(即,r〉0和c=0)以及对应于所有其他系数的第四组(即,r〉0和c〉0)。因此,当前值802对应于第四上下文组。在实施方式中,在602处编码非零图还可以包括针对块结束图的每个值确定代码化上下文。过程600可以基于待代码化值相对于变换块的频率信息的位置来确定块结束图的待编码值的上下文模型。也就是说,变换块中的变换系数的位置可以用作用于确定用于编码块结束图的对应(即,共位)的待编码值的上下文模型的上下文。可以将变换块划分成区域,使得每个区域对应于上下文。该划分可以是基于以下原理:块结束位于变换块的dc位置处的可能性非常低但是该可能性从dc系数起进一步增加。在一些实施方式中,较低范围级别图可以是二元图,其具有与变换块的维度相对应的维度和如上所述的图级别k。当在前级别图(即,如下所述的级别图k-1)中的对应值为一(1)并且对应的变换系数大于较低范围级别图的图级别k时,可以将较低范围级别图的位置设置为一(1)。当在前级别图中的对应值具有为1的值并且对应的变换系数等于较低范围级别图的图级别k时,可以将较低范围级别图的位置设置成为0的值。当在前级别图中的对应值具有为0的值时,较低范围级别图的位置可以没有值。在过程600的实施方式中,在604处编码较低范围级别图还可以包括基于较低范围级别图的扫描顺序来确定较低范围级别图的值的级别图代码化上下文。如上所述,编码较低范围级别图k的值相当于编码二进制值,即变换块的对应(即,共位)变换系数是等于k还是高于k。二进制值的编码导致简单的上下文。因此,值的多个相邻值可以用作用于确定所述值的上下文模型的上下文。也如上所述,对较低范围级别图的扫描可以以向后(也称为反向)扫描顺序进行。因此,当对值进行编码时,将已经编码待编码值的下方和右侧的相邻值(例如,如果扫描顺序是之字形前向扫描顺序或图7的702)。因此,较低范围级别图中的第一相邻值(例如,下面和右侧的相邻值)可以用作上下文。另外,紧接在前级别(k-1)图中的第二相邻值(例如,顶部和左侧相邻值)也可以用作上下文。对于k>2,较低范围级别k图的在前级别图是较低范围级别(k-1)图;并且级别1图的在前级别图是非零图。如上所述,代码化变换系数是多遍过程。在第一遍中,按照前向扫描顺序对描述变换块中的非零系数的位置的非零图706进行代码化。在后续遍中,对按照反向扫描顺序(即,从最高ac系数的位置到dc系数的位置)的非零系数的值进行代码化。可以使用以下步骤来实现对非零图706的代码化:1.初始化i=0,其中i表示扫描位置,而i=0对应于dc位置(例如,变换系数720)。2.代码化二进制非零标志nz[i],其指示扫描位置i处的量化变换系数是否为零。例如,当量化变换系数为零(即,扫描位置i处的非零图706中的值为零)时,可以对零值(nz[i]=0)进行代码化;否则(扫描位置i处的非零图706中的值为1),对1值(nz[i]=1)进行代码化。在另一示例中,当量化变换系数不为零时,可以对零值(nz[i]=0)进行代码化;否则,对1值(nz[i]=1)进行代码化。3.如果nz[i]指示扫描位置i处的变换系数不为零(例如nz[i]=1),则对指示在高于i的扫描位置处的所有系数是否全部为零的二进制标志进行代码化。即,当对非零图706的1值进行代码化时,然后对块结束图726中的相同扫描位置处的值进行代码化。4.将i设置为下一扫描位置(i=i+1)。5.重复步骤2-4,直到满足eob为止(即,直到对块结束值730进行代码化为止)。6.针对所有j>eob,设置nz[j]=0。即,将块结束值730之后的所有变换系数设置为0。在量化过程期间,诸如参考图4的量化级406所述,速率失真优化量化(rdoq)过程根据每个量化变换系数的速率失真成本,针对变换块的变换系数确定(例如,计算、选择等)各自的量化变换系数。例如,响应于接收到变换系数值x,rdoq可以初始地提供量化变换系数q(x)。可以首先通过最小化失真(例如,视频质量的损失)来获得量化变换系数q(x)。然而,当rdoq除了考虑失真之外还考虑对量化变换系数q(x)进行代码化的速率(例如,比特数)时,rdoq可以获得提供更好的总速率失真成本的另一量化变换系数q'(x)。该过程可以继续直到针对变换系数值x获得最优量化变换系数为止。这样,变换系数的量化系数值可以在变换系数和/或包括变换系数的变换块的代码化过程期间改变。如上所述,对非零图706进行代码化使用前向扫描顺序,对后续级别图进行代码化使用反向扫描。这样,由于第一遍和第二(或后续)遍代码化使用不同的扫描顺序:一个向前和一个向后,因此很难估计改变变换系数值的速率成本。更具体地说,在扫描顺序是向前(从dc系数到最高ac系数)的第一遍中,对扫描位置i处的量化系数值的改变会影响对扫描位置i之后的扫描位置j处(即,j>i)的系数进行代码化的速率成本;以及在第二遍中,其中,扫描顺序是向后(从最高ac系数到dc系数),对扫描位置i处的量化系数的改变会影响对扫描位置i之前的扫描位置j'(即j'<i)处的系数进行代码化的速率成本。这样,为了估计对扫描位置i处的系数进行代码化的成本,需要来自扫描位置j>i处的变换系数和扫描位置j'<i处的变换系数的信息,从而产生双向相关性。这种双向相关性可能会使rdoq过程大大复杂化。为了避免双向相关性,根据本公开的实施方式可以不是在非零图706的非零值之后交织eob指示(即,块结束图726的块结束值),而是首先对eob符号进行代码化,然后以反向扫描顺序处理非零图706。这样,可以使用级别图,将反向扫描顺序用于变换块的代码化的所有遍。通过在所有遍中使用反向扫描顺序,仅需要来自在当前变换系数i的扫描位置之后的扫描位置j(即j>i)处的变换系数的信息以估计代码化扫描位置i处的系数的速率成本。这样,降低了复杂度,从而导致了rdoq的更有效实现。因此,可以使用下述步骤来实现使用级别图代码化变换块:1.代码化eob。2.针对所有j>eob,设置nz[j]=0,并设置nz[eob]=1。如果eob<1,则终止该过程。3.初始化i=eob-1。4.代码化指示扫描位置i处的量化变换系数为零(nz[i]=0)还是不为零(nz[i]=1)的nz[i]。5.设置i=i-1。6.重复步骤3-5,直到i=-1。在上述步骤中,参考图6至图7描述了eob。即,eob指示变换块的最后一个非零系数的位置。但是,eob的其他语义也是可能的。例如,在实施方式中,eob可以指示紧接在变换块的最后一个非零系数之后的位置。这样,并且为了说明而参考图7,eob将指示扫描位置12(而不是参考图6至图7所述的扫描位置11)。当eob指示紧接在最后一个非零系数之后的位置时,可以通过下述步骤给出上述步骤:1.代码化eob。2.针对所有j≥eob,设置nz[j]=0,并设置nz[eob-1]=1。如果eob≤1,则终止该过程。3.初始化i=eob-2。4.代码化指示扫描位置i处的量化变换系数为零(nz[i]=0)还是不为零(nz[i]=1)的nz[i]。5.设置i=i-1。6.重复步骤3-5,直到i=-1。图9是根据本公开的实施方式,用于使用级别图来代码化变换块的过程900的流程图。可以由诸如图4的编码器400的编码器来实现过程900。当由编码器实现时,代码化是指在诸如图4的压缩比特流420的编码比特流中编码。例如,过程900可以全部或部分地由编码器400的熵编码级408执行。过程900可以由诸如图5的解码器500的解码器执行。当由解码器实现时,代码化是指从诸如图5的压缩比特流420的编码比特流解码。例如,过程900可以全部或部分地由解码器500的熵解码级502执行,并且编码视频比特流可以是图5的压缩比特流420。例如,可以通过将指令存储在诸如接收站106的存储器204的存储器中以由诸如cpu202的处理器执行而执行过程900的实施方式。可以使用专用硬件或固件来实现过程900。一些计算设备可以具有多个存储器、多个处理器或两者。可以使用不同的处理器、存储器或两者来分布过程900的步骤或操作。为了简化说明,过程900被描绘和描述为一系列步骤或操作。然而,可以以各种顺序和/或同时发生根据本公开的教导。另外,根据本公开的步骤可以与本文未呈现和描述的其他步骤一起发生。此外,并非所有示出的步骤或操作都可用于实现根据所公开的主题的方法。在902处,过程900对变换块的块结束指示符进行代码化。在实施方式中,可以对eob的扫描位置进行代码化。例如,并且参考图7,可以对与最后一个非零变换系数708相对应的扫描位置11进行代码化。在另一示例中,对扫描位置12进行代码化,该扫描位置12对应于以前向扫描顺序在最后一个非零变换系数708之后的系数。在实施方式中,可以使用上下文模型对块结束指示符进行代码化。在904,过程900从变换块的最后一个非零系数开始,以反向扫描顺序对非零图进行代码化。非零图指示变换块的哪些变换系数具有零值,而变换块的哪些变换系数具有非零值。过程900对与图7的非零图706相似的非零图进行代码化。过程900对二进制值进行代码化,该二进制值指示按扫描顺序的量化变换系数为零还是不为零。例如,对于扫描位置i,如果扫描位置i处的量化变换系数为零,则过程900可以对零进行代码化;否则,对1进行代码化。在906处,过程900对具有直到最大图级别t的相应图级别的相应较低范围级别图进行代码化。具有图级别的较低范围级别图指示变换块的变换系数绝对值等于相应图级别和变换块的哪些变换系数绝对值大于相应图级别。当由解码器实现时,过程900对来自编码视频比特流的值进行解码,以重构如参考过程600的604所述编码的较低范围级别k图。例如,为了重构级别1图,过程900从最高非零变换系数开始向后遍历,以确定哪个变换系数等于1并且哪些大于1。即,使用图7的非零图706的重构的非零图并且从最后的非零系数710开始并向后遍历到值740,过程900重构图7的级别1图707。对于重构的非零图的每个1值,过程900对来自编码视频比特流的值进行解码并重构级别1图707。由过程900解码的值是零和一(1)值。为了重构级别2图,过程900使用与用于生成级别1图的程序相同的程序,除了不是遍历重构的非零图,过程900使用重构的级别1图。过程900重复所有步骤,直到重构最大图级别数量的级别图为止。在实施方式中,最大图级别t可以经由配置被提供给过程900。在另一实施方式中,最大图级别t在编码视频比特流中由编码器发信号通知。因此,过程900从编码视频比特流解码最大图级别t。在908处,过程900对系数残差图进行代码化。系数残差图的每个残差系数对应于具有超过最大图级别的绝对值的变换块的相应变换系数。当由解码器实现时,过程900重构例如图7的系数残差图734。对于级别t图的每个一(1)值,过程900对来自编码比特流的对应残差值进行解码,以重构图7的系数残差图734。在一些实施方式中,过程900可以包括在910对符号图进行代码化。符号图可以是诸如参考图7的符号图732所述的符号图。符号图指示变换块的哪些变换系数具有正值,而哪些变换系数具有负值。对于大小为n×n的变换块,在最坏的情况下,可能需要对n×n-1个仓(bin)(二进制符号)进行上下文代码化以确定eob位置。例如,当n=32时,在最坏的情况下,可以对总共1023个仓进行上下文代码化(即,使用上下文模型代码化)以确定eob位置。一些实施方式可以使用扫描位置组来减少代码化eob位置所需的上下文代码化仓的数量。这样,对与块结束位置相对应的扫描位置进行代码化可以包括对包括扫描位置的扫描位置组的索引进行代码化,并且对扫描位置组内的偏移量进行代码化,该偏移量与扫描位置组中的扫描位置的位置相对应。在级别图的实施方式中,值eob=0可以被预留以指示该块的所有变换系数均为零。即,当eob=0时,该块是全零块。在这样的实施方式的示例中,可以将扫描位置划分(例如分组)为11个扫描位置组:1,2,[3,4],[5-8],[9-16],[17-32],[33-64],[65-128],[129-256],[257-512],[513-1024]。也就是说,索引为0的组仅包含扫描位置1;索引为1的组仅包含扫描位置2;索引为4的组包括扫描位置9-16等等。例如,假设要对与eob对应的扫描位置50进行代码化,则对包含扫描位置50的扫描位置组[33-64]的索引6进行代码化,并且对扫描位置组[33-64]内的偏移量17(即50-33=17)进行代码化。在实施方式中,对包括与块结束相对应的代码化的扫描位置的组的索引进行上下文代码化(即,使用上下文模型,使用算术代码化进行代码化),并且在旁路模式下,对扫描位置组内的偏移量可以代码化。旁路模式(其也可以称为字面模式)是指不是使用上下文模型对要代码化的值进行代码化。例如,当范围内的偏移值同等可能时,可以使用旁路模式。要对偏移量17进行代码化,需要五(5)位。这样,在该示例中,用于eob的上下文代码化仓的数量最多为10,对应于组索引{0,1,...,10}。在实施方式中,对包括与块结束相对应的代码化扫描位置的组的索引进行上下文代码化(即,使用上下文模型进行代码化)以及该扫描位置组内的偏移量的至少一些最高有效位也进行上下文代码化。即,可以认为偏移值包括前缀位(即,最高有效位)和后缀位(即,最低有效位)。前缀位可以进行上下文代码化,而后缀位可以使用旁路模式进行代码化。偏移值的任意数量的位都可以视为最高有效位。例如,偏移值17对应于二进制字符串10001。如果前2位被认为是最高有效位,则对位10进行上下文代码化,然后对位001进行旁路代码化(即,使用旁路模式进行代码化)。如果前3位被认为最高有效位,则对位100进行上下文代码化,对位01进行旁路代码化。可以以多种方式将扫描位置分组为扫描位置组。在实施方式中,并且如以上组所示,每个组可以包括扫描位置数的2次幂。2次幂可以是索引扫描位置组减去1(即索引-1)。例如,索引5处的扫描位置组(即组[17-32])包括25-1(=24=16)个扫描位置。这样,为了对具有索引inx的扫描位置组内的偏移进行代码化,仅需要(inx-1)个位。例如,需要一(1)个位来对索引为2的组(组[3,4])中的偏移量进行代码化,需要两(2)个位来对索引为3的组(组[9-16])中的偏移量进行代码化等等。在实施方式中,每个扫描位置组中的扫描位置的数量可以被限制为最大预定数量(即,上限)。例如,组大小可以限制为不大于16。这样,上述组可以被修改如下:1,2,[3,4],[5-8],[9-16],[17-32],[33-48],[49-64],…,[1009-1024]。这样,代码化偏移量需要不超过4位。为了使用修改后的组对50的eob位置进行代码化,可以使用带有上下文模型的算术代码化对与扫描位置组[49-64]相对应的索引7进行代码化。偏移量1(=50-49)可以在旁路模式下通过使用4位(即0001)进行代码化。在一些实施方式中,不预留值eob=0以指示该块的所有变换系数均为零。在这样的实施方式中,扫描位置组可以从0开始并在1023处结束,诸如0,1,[2,3],[4-7],[8-15],[16-31],[32-63],[64-127],[128-255],[256-511],[512-1023]。如上所述,非零图706的值包括二进制值。二进制值指示在变换块的给定位置处的变换系数是零还是非零。这样,可以将非零图的值视为非零标志。二进制值使得将复杂的空间相邻模板用于上下文建模。这样的空间相邻模板可以更好地捕获变换块的统计特性,尤其是具有较大变换块大小的那些变换块的统计特性。因此,当确定用于选择上下文模型的上下文时,可以通过充分利用相邻的非零标志的信息来改进非零标志的代码化(由此改进变换系数的代码化)。模板捕获在当前非零标志之前被代码化的非零标志(即,非零图的值)的代码化历史。模板可以为当前扫描位置定义(例如,指定、选择、设置或以任何方式定义)将用于确定用于对当前值进行代码化的上下文的非零图值的扫描位置。等效地,可以根据非零图内的用于确定上下文的非零值的笛卡尔坐标来定义模板。图10a至图10b是根据本公开的实施方式的用于确定代码化上下文的模板的示例1000的示意图。在图10a至图10b中,使用图案1004阴影的值(即,表示非零图的值的圆圈)是待代码化的值;以及用图案1002阴影的值是上下文信息可用于的值,因为这些值在待代码化的值1032之前被代码化(例如,它们是上下文邻居)。在图10a至10b的示例中,待代码化的值1032描绘了待代码化的非零图的当前值。图10a至图10b的示例是非限制性示例。具有其他形状和/或尺寸的模板也是可能的。在示例中,与模板位置相对应的非零值的数量可以用作用于对当前值进行代码化的上下文。例如,可以添加与模板位置相对应的值,并且可以将总和用作上下文。在一些情况下,上下文邻居可能不可用,诸如,如果上下文位置在该块的边界之外。在示例中,不可用值可以假定为零(0)。在另一示例中,不可用值可以假定为一(1)。编解码器可以使用多种变换类型。例如,变换类型可以是图4的变换级404用于生成变换块的变换类型。例如,变换类型(即,逆变换类型)可以是将由图5的去量化级504使用的变换类型。可用的变换类型可以包括一维离散余弦变换(1ddct)或其近似值、一维离散正弦变换dst(1ddst)或其近似值、二维dct(2ddct)或其近似值、二维dst(2ddst)或其近似值以及恒等变换。其他变换类型也可以使用。在示例中,可以在一维(例如,行或列)中应用一维变换(1ddct或1ddst),而在另一维中应用恒等变换。在使用1d变换(例如1ddct、1ddst)(例如,将1ddct应用于变换块的列(或相应的行))的情况下,可以通过使用逐行(即光栅)扫描顺序或逐列扫描顺序来对量化系数进行代码化。在使用2d变换(例如,2ddct)的情况下,可以使用不同的扫描顺序来对量化系数进行代码化。如上所述,可以基于所使用的变换的类型,使用不同的模板来推导用于对非零图的非零标志进行代码化的上下文。这样,在实施方式中,可以基于用于生成变换块的变换类型来选择模板。如上所示,变换类型的示例包括:应用于行(或列)的1ddct和应用于列(或行)的恒等变换;应用于行(或列)的1ddst和应用于列(或行)的恒等变换;应用于行(或列)的1ddct和应用于列(或行)的1ddst;2ddct;以及2ddst。变换的其他组合可以包括变换类型。如上参考图9所示,可以从变换块的最后一个非零系数开始(即,从最高ac变换系数开始),以反向扫描顺序对非零图进行代码化。这样,非零图的当前值(即,当前非零标志)的代码化历史包括在二维非零图(诸如非零图706)中的当前值的右侧和下方的值。当应用1d垂直变换类型时,与水平邻居值相比,待编码值1032与垂直邻居值更相关。这样,在将1d变换(例如1ddct)应用于列的情况下,可以使用模板1010。假设待代码化的值1032处于非零图的位置(x,y),则模板1010包括在七个位置(x+1,y),(x+2,y),(x+3,y),(x+4,y),(x,y+1),(x+1,y+1)和(x+1,y+2)处的值。当应用1d水平变换类型时,与垂直邻居值相比,待编码值1032与水平邻居值更相关。这样,在将1d变换(例如,1ddct)应用于行的情况下,可以使用模板1020。假设待代码化的值1032处于非零图的位置(x,y)处,则模板1020包括在七个位置(x+1,y),(x,y+1),(x+1,y+1),(x,y+2),(x+1,y+2),(x,y+3)和(x,y+4)处的值。当应用2d变换类型(例如,2ddct、2ddst)时,可以使用模板1030。假设待代码化的值1032在非零图的位置(x,y)处,则模板1030包括在七个位置(x+1,y),(x+2,y),(x,y+1),(x+1,y+1),(x+2,y+1),(x,y+2)和(x+1,y+2)的值。在模板的一些示例中,模板中不包括紧接在待代码化的值1032之前扫描的非零值。即,如果待代码化的值1032处于扫描位置i处,则在扫描位置(i-1)处的非零值不包括在模板中。即使以反向扫描顺序代码化非零图,扫描顺序的扫描顺序也可以取决于变换类型。反向扫描顺序的扫描顺序是从最高ac值到dc值访问非零图的非零值的顺序。在示例中,当使用1d水平变换类型时,可以使用垂直扫描顺序。这样,扫描顺序以逐列顺序(例如,从底部到顶部)进行。在示例中,当使用1d垂直变换类型时,可以使用水平扫描顺序。这样,扫描顺序以逐行顺序(例如,从右到左)进行。模板1040是当将1d变换类型应用于列时可以使用的模板的另一示例。在模板1040中,模板中不包括紧接在待代码化的值1032之前扫描的非零值。假设待代码化的值1032在非零图的位置(x,y),则模板1040包括在七个位置(x+1,y),(x+2,y),(x+3,y),(x+4,y),(x+1,y+1),(x+1,y+1)和(x+1,y+2)处的值。模板1050是当将1d变换类型应用于行时可以使用的模板的另一示例。在模板1050中,模板中不包括紧接在待代码化的值1032之前扫描的非零值。假设待代码化的值1032在非零图的位置(x,y)处,则模板1040包括在七个位置(x,y+1),(x+1,y+1),(x,y+2),(x+1,y+2),(x,y+3),(x+1,y+3)和(x,y+4)处的值。模板1060是当使用2d变换(例如2ddct、2ddst)时可以使用的模板的示例。假设待代码化的值1032在非零图的位置(x,y)处,则模板1040包括在七个位置(x+1,y),(x+2,y),(x+3,y),(x,y+1),(x+1,y+1),(x,y+2)和(x,y+3)处的值。模板1010-1060中的每一个都包括七(7)个位置。但是,模板可以包括更多或更少的位置和/或可以具有其他形状。例如,模板1070是当使用2d变换类型时可以使用的模板的另一示例。模板1070包括八(8)个位置。假设待代码化的值1032在非零图的位置(x,y)处,则模板1040包括在八个位置(x+1,y),(x+2,y),(x+3,y),(x,y+1),(x+1,y+1),(x,y+2),(x+1,y+2)和(x,y+3)处的值。在其他示例中,模板可以包括五(5)个位置。例如,图10b的模板1088(其包括位置(x+1,y),(x,y+1),(x+2,y),(x,y+2),(x+1,y+1))可以被用于2d变换类型。例如,模板1080、1082、1083可以用于垂直1d变换类型。模板1080包括位置(x+1,y),(x+2,y),(x+3,y),(x+4,y)和(x,y+1)。模板1082包括位置(x+1,y),(x+2,y),(x+3,y),(x+4,y)和(x+1,y+1)。模板1083包括位置(x,y+1),(x,y+2),(x,y+3),(x+1,y),(x+1,y+1)。例如,模板1084、1086和1087可以用于水平1d变换类型。模板1084包含位置(x+1,y),(x+2,y),(x+3,y),(x,y+1),(x+1,y+1)。模板1086包括位置(x,y+1),(x,y+2),(x,y+3),(x,y+4)和(x+1,y+1)。模板1087包括位置(x,y+1),(x,y+2),(x,y+3),(x,y+4)和(x+1,y)。在一些实施方式中,位置(x+1,y)和(x,y+1)可以分别被位置(x+1,y+2)和(x+2,y+1)代替。在一些实施方案中,代码化级别k图也可以取决于变换类型而使用不同的模板(例如,如上所述的模板),其中k>0。例如,如上所述,一个模板可以用于2d变换类型,一个模板可以用于垂直1d变换类型,而另一个模板可以用于水平1d变换类型。在一些实施方式中,用于对非零标志进行代码化的上下文可以取决于非零标志的位置(即,扫描位置或块位置)。这样,在一些实施方式中,如上所述的变换类型相关的模板可以与非零标志的位置结合以确定上下文。为了避免使用过多的上下文,这可能会导致所谓的上下文稀释问题,可以将位置分类为区域。例如,分类可以取决于变换类型。图16是根据本公开的实施方式,用于确定上下文的区域的示例1600的示意图。图16包括垂直变换块1602(即,类tx_class_vert的变换块)、水平变换块1604(即,类tx_class_horiz的变换块)和2d变换块1606(即,类tx_class_2d的变换块)。变换类对应于变换类型和方向。类tx_class_vert被称为垂直变换类。类tx_class_horiz被称为水平变换类。类tx_class_2d被称为二维变换类。垂直变换块1602是使用如上所述的1d垂直变换类型生成的变换块。这样,tx_class_vert类包括应用于列(即,沿垂直方向)的1d变换类型(例如,dct、dst、adst或其近似)。水平变换块1604是使用如上所述的1d水平变换类型生成的变换块。这样,tx_class_horiz类包括应用于行(即,沿水平方向)的1d变换类型(例如,dct、dst、adst或其近似)。2d变换块1606是使用如上所述的2d变换类型生成的变换块。这样,tx_class_2d类包括应用于行和列的所有其余变换类型。类tx_class_vert的变换块可以被划分为rv(>0)个区域,使得每个区域包括一个或多个行。类tx_class_horiz的变换块可以被划分为rh(>0)个区域,从而每个区域包括一个或多个列。可以将类tx_class_2d的变换块划分为r2d(>0)个区域,其中每个区域都包含一条或多条对角线。可以以多种方式将变换块划分为区域。在示例中,rv=3,rh=3和r2d=4,并且区域分类如下:对于类tx_class_horiz的变换块,第一区域(即区域1616)由最左列(col=0)组成,第二区域(即区域1618)由第二最左列(col=1)组成,以及第三区域(即区域1620)由其余的列组成。对于类tx_class_vert的变换块,第一区域(即区域1610)由最上行(行=0)组成,第二区域(即区域1612)由第二最上行(行=1),以及第三区域(即区域1614)由其余行组成。对于类tx_class_2d的变换块,第一区域(即区域1622)由第一反对角线(row+col=0)组成,第二区域(即区域1624)由第二反对角线(row+col=1)组成,第三区域(即区域1626)由第三和第四反对角线(row+col=2或3)组成,以及第四区域(未示出)由剩下的反对角线组成。区域和变换类(例如tx_class_vert、tx_class_horiz、tx_class_2d)组合可以对应于一组上下文。在可以使用(对应于上下文的)偏移量在可用的上下文列表(例如表)中检索上下文的实施方式中,可以通过集合的偏移量来区分(例如标识)每个集合。在一些实施方式中,一些变换类可以映射到相同的偏移量。将变换类映射到相同的偏移量是指映射到相同偏移量的变换类共享上下文。为了推导用于代码化变换块的位置(x,y)处的变换系数的上下文,其中,每个变换类映射到不同的偏移量(即,变换类不共享偏移量),则可以推导上下文(即,ctx)如下:在上述示例中,tx_class_2d的偏移量为零(0),tx_class_vert的偏移量为16,tx_class_horiz的偏移量为31。在该示例中,对于类tx_class_2d的变换块,第一区域(即仅dc系数)具有一个上下文,每个其余区域具有五(5)个上下文。对于类tx_class_vert或tx_class_horiz的变换块,每个区域都有五(5)个上下文。此外,在上述示例中,通过使用大小为7的模板来计算计数(例如,总和),该模板取决于如上参考图10a所述的变换类型类。这样,(counts+1)>>1是介于0和4之间的数字(“>>1”右移1位(counts+1))。在图6至图10中,描述了使用级别图对变换块(例如,变换块的变换系数)进行代码化。然而,其他编解码器可以使用系数令牌树和/或使用可以被组织为系数令牌树的系数令牌的字母表来对变换系数进行代码化。在示例中,为了推导用于对变换块的位置(x,y)处的变换系数进行代码化的上下文,其中,tx_class_vert和tx_class_horiz映射到相同的偏移,可以推导上下文(即ctx)如下:将一些变换类映射到相同的偏移量可以减少上下文的数量。在至少一些情况下(例如,取决于所代码化的视频序列的特征),将变换类(例如,变换类tx_class_vert和tx_class_horiz)映射到相同的偏移量也可以产生改善的代码化性能。通常,当统计数据不同时,混合(例如混和)统计数据可能会对压缩性能产生负面影响。但是,由于类tx_class_vert和tx_class_horiz给出的上下文在统计上可能类似,因此通过减少所谓的上下文稀释问题的影响,组合这些变换类的上下文可以对压缩性能产生积极影响。如上参考图7所述,在图7中,依序地代码化级别图。即,对非零图706进行代码化,然后对级别1图进行代码化,然后对级别2图进行代码化,然后对系数残差图734进行代码化。然而,在一些实施方式中,可以使用不同的代码化结构。如上参考图10a至图10b所述,取决于变换类型,代码化级别k图还可以使用不同的模板(例如,如上所述的模板),其中k>0。即,如上所述,模板可以被用来确定用于代码化在(x,y)处的系数是大于1(例如,使用等级1图,诸如图7的级别1图707的相应值)还是大于2(例如,使用级别2图,诸如图7的级别2图709的相应值)的上下文。这样,可以对每个系数进行代码化,直到该系数是否大于最大图级别。在图7的示例中,最大图级别是2。这样,在进行下一系数的代码化之前,可以对每个系数进行代码化直到该系数是否大于2(使用级别图的对应值)。在实施方式中,大于2的系数值(即,大于最大图级别的系数值)可以由值3(即,最大图级别+1)表示。这样,代码化系数“直到该系数是否大于最大图级别(例如,2)”可以是指代码化值0,1,2,...,(最大图级别+1)(例如3),其分别并且在最大图级别为2的情况下,对应于具有等于0、等于1、等于2和大于2的值的系数。图17是根据本公开的实施方式,用于使用级别图来解码变换块的过程1700的流程图。与对级别图依序地进行代码化的过程900(即,在对下一图进行代码化之前对每个图进行代码化)不同,过程1700使用模板,并且在最大图级别为2(即t=2)的情况下对每个非零系数进行代码化,不管系数为0,1,2还是大于2(由值3表示)。即,过程1700在进行到扫描顺序中的下一个系数之前对系数进行代码化。过程1700可以包括与过程900的那些块类似的块。类似块的描述(例如902、908和910)被省略。过程1700的一些实施方式可以在块908之前包括块910。过程1700可以由诸如图4的编码器400的编码器来实现。当由编码器实现时,代码化是指在诸如图4的压缩比特流420的编码比特流中编码。例如,过程1700可以全部或部分地由编码器400的熵编码级408执行。过程1700可以由诸如图5的解码器500的解码器执行。当由解码器实现时,代码化是指从诸如图5的压缩比特流420的编码比特流解码。例如,过程1700可以全部或部分地由解码器500的熵解码级502执行,并且编码的视频比特流可以是图5的压缩比特流420。例如,可以通过将指令存储在诸如接收站106的存储器204的存储器中以由诸如cpu202的处理器执行的指令来执行过程1700的实现。可以使用专用硬件或固件来实现过程1700。一些计算设备可以具有多个存储器、多个处理器或两者。可以使用不同的处理器、存储器或两者来分布过程1700的步骤或操作。为了简化说明,将过程1700图示和描述为一系列步骤或操作。然而,根据本公开的教导可以以各种顺序和/或同时发生。另外,根据本公开的步骤或操作可以与本文未呈现和描述的其他步骤或操作一起发生。此外,并非所有示出的步骤或操作都可以用于实施根据所公开的主题的方法。在1702,过程1700确定是否还有更多非零系数要代码化。如果是,则过程1700进行到1704以对(x,y)处的当前量化变换系数进行代码化;否则,过程1700进行到908。在1704,过程1700选择用于代码化当前量化变换系数的模板。如本公开中所使用的,“选择”是指以任何方式来识别、构造、确定、指定、生成或其他选择。模板可以是参考图10a至图10b所述的模板。在示例中,相同的模板用于代码化变换块的所有系数。这样,可以为过程1700选择一次模板,并且可以在块1702之前执行该模板。在1706,过程1700使用模板来确定上下文。过程1700可以以多种方式使用模板来确定上下文。每个模板位置对应于一个值(例如,0,1,...,t+1)。值的组合可以被用于确定上下文。例如,可以使用值的总和。例如,加权总和可以用于确定上下文。可以基于到“原点”的距离(即,确定上下文的当前变换系数的位置(x,y))来设置分配给该位置的权重。距离的示例包括扫描位置距离(例如,当前系数的扫描位置与模板的位置之间的差)或笛卡尔距离。但是,可以使用其他方式设置权重。在又一个例中,可以使用非线性函数。例如,模板中的最大值或最小值可用于确定上下文。在又一示例中,可以使用总和和最大值的组合来确定上下文。其他方法和/或值,或方法和/或值的组合可以用于从模板确定上下文。现在给出使用模板位置处的值的总和(即,相加)来确定上下文。应当理解到,以下内容可以与用于使用模板来确定上下文的任何方法一起使用。过程1700可以将与模板的位置相对应的值相加(求和)。当使用模板来推导用于代码化系数的上下文时,模板的每个位置都可以具有值0、1、2或3中的一个(即,当t=2时)。这样,如果模板包括n个位置,则最大总和为3*n。例如,如果在1704选择包括5个位置的模板,则最大总和可以为15(=3*5);如果选择包含7个位置的模板,则最大总和可以为21(=3*7)。在实施方式中,在参考图7所述的级别图被用来确定模板的位置的值的情况下,可以添加或计数用于在非零图和级别k图中的相同位置处的这些值。例如,假设最后一个非零变换系数708的位置是模板的位置,则可以将该位置处的模板的值确定为非零图706和级别1图707的712(即1)和716(即0)处的值的总和。这样,该值是1。另外,假设变换系数739的位置是模板的位置,则该位置处的模板的值被确定为非零图706、级别1图707和级别2图709中的对应位置处的值的总和。这样,值为3。这样,可以使用与模板的位置相对应的值的总和来确定上下文索引,其中,通过对至少一些级别图的各个值求和,确定模板的每个值。在另一实施方式中,不生成包括零图并且如参考图7所述的级别图。相反,可以使用单个图level来指示变换系数是否为0,1,...,t+1中的一个。这样,给定扫描位置i,level[i]={0,1,...,t+1}。单个图可以包括变换块的所有变换系数的值。可替代地,单个图可以包括直到块结束系数的系数值。即,单个图level可以包括直到并包括变换块的最后一个非零系数的每个变换系数的值。这样,可以通过将单个图level的各个值相加来生成用于确定上下文的总和。例如,假设模板包括与扫描位置l1,l2,l3,l4和l5对应的5个位置,则可以将总和确定为sum=level[l1]+level[l2]+level[l3]+level[l4]+level[l5]。使用该总和,过程1700可以确定上下文索引(即,ctx)。可以使用与如上所述的运算((counts+1)>>1)相似的运算来确定上下文索引。但是,不是使用“count”,而是使用“sum”。这样,过程1700使用((sum+1)>>1)来确定上下文索引。上下文索引ctx可能超出范围。例如,假设总和为15,则变换类为tx_class_2d,并且(x,y)为(1,2),则上下文索引为((sum+1))>>1+6=(15+1)>>1)+6=14。但是,使用上面的示例,tx_class_2d的可用上下文的数量为11。因此,上下文索引超出范围。等效地,可以将导致超出范围的上下文索引的总和本身视为超出范围。如果上下文索引超出范围,则过程1700可以将上下文索引设置为预定数。这样,过程1700可以使用诸如min(((sum+1)>>1),predeterminednumber)的公式来确定上下文索引。这样,值((sum+1)>>1)在预定数的上限。在示例中,预定数可以是4。在示例中,预定数可以取决于变换类的类型。可以以任何其他方式选择预定数。上下文索引ctx可用于选择用于对当前变换系数进行代码化的上下文。在1708,过程1700使用上下文对系数进行代码化。可以使用以下过程来概括将单个图level用于代码化变换块的变换系数的过程1700的实施方式:步骤1-10对代表块的各个非零变换系数的绝对值的比特进行代码化。对每个变换系数重复步骤1-10,直到变换块的最后一个非零系数为止。换句话说,在代码化表示代码化序列中的下一个非零变换系数的绝对值的比特之前,对表示当前块的非零变换系数的绝对值的比特进行代码化。在该示例中,代码化序列是反向扫描顺序,但是代码化序列可以是(例如,前向)扫描顺序。对于在扫描位置i处的变换系数,步骤2-9代码化直到变换块的变换系数是否大于级别图的最大图级别。即,步骤对代表各个非零变换系数的绝对值的比特进行代码化,其中,这些比特包括指示该绝对值是否大于级别图的最大图级别的最低有效位,以及从与最小图级别相关联的最高有效位开始,与相应的图级别相关联的一个或多个附加位,每个附加位指示绝对值是否至少等于相应的图级别。例如,假设最大图级别t=2并且i<eob-1,如果级别[i]=3,则步骤2-9对比特111进行代码化;如果level[i]=0,则步骤2-9对比特0进行代码化;如果level[i]=2,则步骤2-9对比特110进行代码化。步骤11-14对非零变换系数的符号位(例如,图7的符号图732的值)进行代码化直到最后一个非零系数。对于大于最大级别图t的每个非零系数(即,level[i]>t),步骤15-17代码化变换系数的残差。可以参考系数残差图734描述残差的值。可以颠倒代码化符号位和残差。将图17中所述的代码化结构用于代码化变换系数(即,量化变换系数),与参考图9所述的代码化结构相比,可以获得更好的吞吐量。更好的吞吐量可以意味着使用过程1700的代码化结构可以比过程900更快地对变换块进行解码。图11是根据本公开的实施方式,可用于对变换块进行熵代码化的系数令牌树1100的示意图。系数令牌树1100被称为二叉树,因为在树的每个节点处,必须采用(即遍历)两个分支之一。系数令牌树1100(也可以称为二进制令牌树)指定要代码化的变换系数的值的范围(例如,大小),并且对该令牌树中的每个分支具有前向自适应概率。从待代码化的值中减去令牌基值,以形成残差,然后以固定的概率对块进行代码化。具有较小变化(包括向后适应性)的类似方案也是可能的。使用系数令牌树1100,为量化的变换块(例如,图7的变换块704)的量化系数生成二进制数字串。每个二进制数字都被代码化。在此,“对比特进行代码化”可以表示输出或生成表示被编码的变换系数的码字中的比特。类似地,“解码比特”可以表示(诸如从编码比特流中)读取与被解码的量化变换系数相对应的码字的比特,使得该比特对应于在系数令牌树中被遍历的分支。使用上下文对比特进行熵编码。在示例中,将n×n块(例如,变换块704)中的量化系数按照规定的扫描顺序(例如,图7的扫描顺序702)被组织成1d(一维)阵列(本文为阵列u)。n可以是4、8、16、32或任何其他值。1d阵列的第i个位置的量化系数可以被称为u[i],其中i=0,…,n*n-1。在实施方式中,块结束(eob)可以指示最后一个非零系数的位置。然而,在其他实施方式中,以及在图11的后续描述中除非另有说明,否则eob表示u[i],…,u[n*n-1]中的零的最后一次运行的起始位置。在u[n*n-1]不为零的情况下,可以将eob设置为n*n。即,如果1d阵列u的最后一个系数不为零,则可以将eob设置为值n*n。u[i]的每一个的值是量化变换系数。1d阵列u的量化变换系数在本文中也可以简称为“系数”或“变换系数”。位置i=0处的系数对应于dc系数。在该示例中,eob等于12,因为在1d阵列u的位置12处的零系数之后没有非零系数。为了对系数u[i],…,u[n*n-1]进行编码和解码,对于i=0到n*n-1,在每个位置i<=eob生成令牌t[i]。对于i<eob,令牌t[i]可以指示u[i]处的对应量化变换系数的大小和/或大小范围。eob处的量化变换系数的令牌可以是eob_token,这是指示1d阵列u在eob位置之后(含eob位置)不包含非零系数的令牌。即,t[eob]=eob_token指示当前块的eob位置。表i提供了根据本公开的实施方式,除了eob_token之外的令牌值及其对应的名称的示例的列表。令牌令牌名0zero_token1one_token2two_token3three_token4four_token5dct_val_cat1(5,6)6dct_val_cat2(7-10)7dct_val_cat3(11-18)8dct_val_cat4(19-34)9dct_val_cat5(35-66)10dct_val_cat6(67-2048)表1在示例中,量化系数值被取为带符号的12位整数。为了表示量化系数值,可以将12位带符号值的范围划分为11个令牌(表i中的令牌0-10)加上块结束令牌(eob_token)。为了生成表示量化系数值的令牌,可以遍历系数令牌树1100。然后可以如参考图4的熵编码级408所述,通过编码器,将遍历树的结果(即,位串)编码为比特流(诸如,图4的位流420)。系数令牌树1100包括令牌eob_token(令牌1102)、zero_token(令牌1104)、one_token(令牌1106)、two_token(令牌1108)、three_token(令牌1110)、four_token(令牌1112)、cat1(为表i中的dct_val_cat1的令牌1114)、cat2(为表i中的dct_val_cat2的令牌1116)、cat3(为表i中的dct_val_cat3的令牌1118)、cat4(为表i中dct_val_cat4的令牌1120)、cat5(为表i中的dct_val_cat5的令牌1122)和cat6(为表i中的dct_val_cat6的令牌1124)。可以看出,系数令牌树将单个量化系数值映射到单个令牌,例如令牌1104、1106、1108、1110和1112中的一个。其他令牌,例如令牌1114、1116、1118、11201122和1124代表量化系数值的范围。例如,可以用令牌dct_val_cat5–图11中的令牌1122表示值为37的量化变换系数。令牌的基值被定义为其范围内的最小数。例如,令牌1120的基值为19。熵代码化为每个量化系数识别令牌,并且如果令牌表示范围,则可以通过从量化系数减去基值来形成残差。例如,可以通过在编码视频比特流中包括令牌1120和残差值1(即20减去19)来表示具有值20的量化变换系数,以允许解码器重构原始量化变换系数。块结束令牌(即,令牌1102)发信号告知在变换后的块数据中没有另外的非零量化系数。在变换系数代码化的另一示例中,可用于对变换系数进行代码化的令牌可以被分成令牌组。可以如参考系数令牌树700所述,组织可用令牌。在示例中,令牌被分为两个令牌集:一组头令牌和一组尾令牌。头令牌集中的令牌在本文中被称为头令牌。尾令牌集中的令牌在本文中称为尾令牌。分成令牌组可能是合乎逻辑的。也就是说,例如,即使可能没有存储表示令牌在组中的数据,也可以将令牌视为组的一部分。当对dc变换系数进行代码化时,头令牌集包括令牌block_z_token、zero_token、one_neob、one_eob、two_plus_neob和two_plus_eob。即,当对dc系数进行代码化时,头令牌集可以包括六(6)个令牌。dc系数对应于前向扫描顺序的第一扫描位置。block_z_token指示变换块中没有非零系数。block_z_token的值可以为255。当对除dc变换系数以外的变换系数进行代码化时,头令牌集包括令牌:zero_token、one_neob、one_eob、two_neob和two_eob。即,当对除dc系数以外的系数进行代码化时,头令牌的集合包括五(5)个令牌。除dc系数以外的系数是不对应于前向扫描顺序中的第一扫描位置的系数。令牌zero_token(在示例中,其值可以为0)可以指示用zero_token代码化的变换系数的值为0。令牌one_eob(在示例中,其值可以为1)表示当前变换系数具有为1的值,并且紧随其后的是eob。即,当前变换系数是变换块的最后一个非零系数。令牌one_neob(在示例中,其值可以为2)可以指示当前变换系数具有为1的值,且不是变换块的最后一个非零变换系数。令牌two_plus_eob(在示例中,其值可以为3)可以指示当前变换系数具有大于二(2)的值,并且紧随其后的是eob。即,当前变换系数是变换块的最后一个非零系数。令牌two_plus_neob(在示例中,其值可以为4)可以指示当前变换系数具有大于二(2)的值,且不是变换块的最后一个非零变换系数。如果对two_plus_eob令牌或two_plus_neob令牌进行代码化,则还将对尾令牌集中的令牌进行代码化。尾令牌集包括令牌:two_token、three_token、four_token、dct_val_cat1、dct_val_cat2、dct_val_cat3、dct_val_cat4、dct_val_cat5和dct_val_cat6。尾令牌集包括九(9)个令牌。仅当对头令牌集中的two_eob或two_neob进行代码化时,才使用尾令牌集中的令牌。如在别处所提及的,代码化是指由编码器编码或由解码器解码。编解码器可以使用相同的信息来推导用于对令牌进行代码化的上下文,无论令牌是头令牌还是尾令牌。在示例中,用于确定上下文的信息包括:变换大小、平面类型、参考类型、波段位置和系数上下文。变换大小是覆盖用于生成正在代码化的变换块的变换的最小平方变换大小。在示例中,变换大小可以是分别对应于正方形变换大小4x4、8x8、16x16和32x32的值{tx_4x4,tx_8x8,tx_16x16,tx_32x32}之一。例如,如果使用大小为8x16的变换来生成变换块,则用于确定代码化上下文的变换大小为值tx_16x16。作为另一示例,如果使用大小为8x4的变换来生成变换块,则用于确定代码化上下文的变换大小为值tx_8x8。平面类型指示当前变换块是亮度块还是色度块。这样,平面类型可以具有值{plane_type_y,plane_type_uv},其中,plane_type_y对应于亮度块的变换块,以及plane_type_uv对应于色度块(u或v色度块)的变换块。参考类型可以具有值{0,1}之一。参考类型指示生成变换块的源块是否是帧内预测。如果该块是帧内预测,则参考类型可以为零(0);否则参考类型是一(1)。波段位置可以具有值{0,1,2,3,4,5}中的一个。当前系数的扫描位置映射到频带{0,1,2,3,4,5}中的一个。波段位置构成从扫描位置到波段位置的映射。例如,扫描位置0-4可以被映射到波段位置0,扫描位置5-9可以被映射到波段位置1,扫描位置10-16可以被映射到波段位置2等等。这样,如果对扫描位置12处的系数进行编码,则波段位置为2。其他映射也是可能的。系数上下文可以具有值{0,1,2,3,4,5}中的一个。在示例中,当前系数的左和上邻居变换系数的组合的总和可以被映射到值{0,1,2,3,4,5}中的一个。这样,可能的上下文的总数是576(=4变换大小*2参考类型*2参考类型*6波段位置*6系数上下文)。每个上下文提供用于对系数令牌进行代码化的概率分布。例如,用于代码化九(9)个尾令牌中的一个的概率分布包括九(9)个概率。但是,由于概率分布中的概率之和等于1,因此上下文仅需要提供八(8)个概率,可以推导出第九个概率。这样,给定n(例如9)个符号(例如令牌)的字母,则需要概率中的n-1(例如9-1=8)个自由总数。也就是说,例如,需要存储和检索n-1个概率值。对于上述头令牌集和尾令牌集,自由总数由以下给出:未代码化dc系数时的头令牌的自由数+当代码化dc系数时的头令牌的自由数+尾令牌的自由数。自由总数为7008(2304+96+4608):1.当未对dc系数进行代码化时的头令牌的自由数为=576*4=2304。四(4)是头令牌集中的令牌数减去1(即5-1)。2.当代码化dc系数时的头令牌的自由数=4x2x2x1x6=96。96对应于4个变换大小乘以2个平面类型乘以2个参考类型乘以1个波段位置乘以6个系数上下文。当代码化dc系数时,可能的波段位置的数量是一(1),因为dc系数的位置在变换块中是已知的/固定的。3.尾令牌的自由数为=576*8=4608。八(8)是尾令牌集中的令牌数减去1(即9-1)。如果通过使用n比特来存储每个概率,其中n是整数,则总共需要7008*n比特来存储系数代码化所需的概率。在n为8的情况下,需要54k比特的存储器;在n为16的情况下,需要108k比特。根据本公开的实施方式可以通过使用与用于尾令牌的上下文不同的用于代码化头令牌的上下文,减少存储用于代码化变换系数的概率分布所需的存储量。例如,尽管代码化头令牌可以使用上述上下文信息,但是更少的波段位置可以用于确定尾令牌的上下文。例如,代替使用如上所述的六(6)个波段位置,三个(3)波段位置{0,1,2}可用于尾令牌。如上所述,虽然可以在不对尾令牌进行代码化的情况下对头令牌进行代码化,但是仅在对two_neob或two_eob头令牌进行代码化的情况下,对尾令牌进行代码化。这样,如果相应的头令牌的波段位置大于2,则尾令牌的波段位置可被认为是频带值2。尾令牌的概率分布可能对大于或等于两个给定的系数上下文不敏感。在另一示例中,尽管代码化头令牌可以使用上述上下文信息和值,但是较少的变换类型可以用于确定尾令牌的上下文,因为尾令牌的概率分布似乎对给出系数上下文和波段位置的大变换类型不敏感例如,代替如上所述使用四(4)个变换类型,可以将三(3)个变换类型(例如{tx_4x4,tx_8x8,tx16x16_above})用于尾令牌。如果相应的头令牌的变换类型是tx_16x16和tx_32x32中的一个,则值tx_16x16_above可用于尾令牌。对尾令牌使用三个频带变换类型,用于对尾令牌进行代码化的上下文的数量为288(=4*2*2*3*6=4个变换大小*2个平面类型*2个参考类型*3个波段位置*6个系数上下文),使得用于代码化尾令牌的上下文减少50%。因此,代码化尾令牌的自由总数为288*8=2304。另外,对尾令牌使用三种变换类型,用于对尾令牌进行代码化的上下文的数量进一步减少到216(=3*2*2*3*6=3个变换大小*2个平面类型*2个参考类型*3个波段位置*6个系数上下文),从而使代码化尾令牌的上下文额外减少了12.5%。因此,代码化尾令牌的自由总数为216*8=1728。通过将用于对尾令牌进行代码化的自由数减少到1728,可以将自由总数(即,所存储的概率数)减少到4128(=2304+96+1728),构成所存储的概率减少了41%(=(7008-4128)/7008)。图12是根据本公开的实施方式,用于使用包括头令牌和尾令牌的系数字母对变换块进行代码化的过程1200的流程图。可以由诸如图4的编码器400的编码器来实现过程1200。当由编码器实现时,代码化意味着在诸如图4的压缩比特流420的编码比特流中代码化。例如,过程1200可以全部或部分地由编码器400的熵编码级408执行。过程1200可以由诸如图5的解码器500的解码器执行。当由解码器实现时,代码化意味着从诸如图5的压缩比特流420的编码比特流解码。例如,过程1200可以全部或部分地由解码器500的熵解码级502执行,并且编码的视频比特流可以是图5的压缩比特流420。例如,可以通过将指令存储在诸如接收站106的存储器204的存储器中以由诸如cpu202的处理器执行的指令来执行过程1200的实施方式。可以使用专用硬件或固件来实现过程1200。一些计算设备可以具有多个存储器、多个处理器或两者。可以使用不同的处理器、存储器或两者来分布过程1200的步骤或操作。为了简化说明,将过程1200描绘和描述为一系列步骤或操作。然而,根据本公开的教导可以以各种顺序和/或同时发生。另外,根据本公开的步骤可以与本文未呈现和描述的其他步骤一起发生。此外,并非使用所有示出的步骤或操作来实现根据所公开的主题的方法。在1202,过程1200确定用于对变换块的变换系数进行代码化的头令牌。如本公开中所使用的,“确定”意味着以任何方式来选择、构造、识别、指定、生成或其他确定。例如,过程1200可以通过遍历系数令牌树(诸如图7的系数令牌树700)来确定令牌。在示例中,过程1200可以确定头令牌是two_plus_neob或令牌two_plus_eob。在1204,过程1200确定用于对变换系数进行代码化的尾令牌。例如,如上所述,1100可以确定尾令牌是如上所述的尾令牌集中的令牌之一。例如,过程1200可以通过使用与1202相同的系数令牌树的遍历来确定令牌。在1206,过程1200确定用于对头令牌进行代码化的头部上下文。如上所述,可以使用变换大小、平面类型、参考类型、波段位置和系数上下文中的一个或多个来选择头部上下文。其他信息可用于确定头部上下文。在示例中,并且如上所述,过程1200可以确定头部上下文是上述576个上下文之一。在1208,过程1200确定用于对尾令牌进行代码化的尾部上下文。如上所述,可以使用变换大小、平面类型、参考类型、波段位置和系数上下文中的一个或多个来选择尾部上下文。其他信息可用于确定头部上下文。尾部上下文是从包括比从其选择头部上下文的上下文集更少上下文的上下文集中选择的。在1210,过程1200使用头令牌和尾令牌对变换系数进行代码化。在实施方式中,使用扫描顺序对当前块(例如,变换块)进行代码化,并且将扫描顺序的扫描位置映射到具有第一基数的第一波段位置和具有小于第一基数的第二基数的第二波段位置。在示例中,第一波段位置可以是{0,1,2,3,4,5},这是基数为6的集合。在示例中,第二波段位置可以是{0,1,2},这是基数为3的集合。可以使用第一波段位置来选择头部上下文。可以使用第二波段位置来选择尾部上下文。在实施方式中,使用变换大小的头部集合来选择头部上下文,该头部集合具有第一基数,以及使用变换大小的尾部集合来选择尾部上下文,该尾部集合具有小于第一基数的第二基数。在示例中,变换大小的头部集合可以是{tx_4x4,tx_8x8,tx_16x16,tx_32x32},其具有为4的基数。在示例中,变换大小的尾部集合可以是{tx_4x4,tx_8x8,tx_16x16_above},其具有为3的基数。如上所述,编解码器可将后向适应性或后向更新用于熵代码化。这样,在开始代码化(即,编码和解码)视频帧(也称为图像)或该帧的一部分(例如,瓦片)时,可以初始化将用在熵代码化当前帧和/或瓦片中的一些或全部概率。概率分布包括二进制概率分布。例如,可以初始化用于帧内预测模式的代码化的概率分布。例如,可以初始化用于对非零图(诸如图7的非零图706)进行代码化的概率分布。例如,可以初始化用于对扫描位置组的索引进行代码化的概率分布。例如,当不使用旁路模式进行代码化时,可以初始化用于对扫描位置组内的偏移的有效位进行代码化的概率分布。例如,可以初始化如上参考图9所述,用于代码化非零图的块结束的概率分布。可以通过使用n位值来描述和存储用于代码化二进制符号(即0和1符号)的二进制概率分布。在非限制性示例中,并且在n=8的情况下,概率值1可以指示符号0具有1/256的概率,而128可以指示符号0和符号1具有相同的概率128/256=0.5。根据本公开的实施方式可以降低存储和描述初始概率值的复杂度(即,位数)。在一些情况下,例如向后适应性的情况下,由于当代码化帧和/或瓦片时就更新概率,因此通常不需要精确的概率值。即,当对帧和/或瓦片进行代码化时,适配方案基于帧和/或瓦片的统计信息来适配初始概率。这样,使用较少的位来存储初始概率值并不一定导致任何更差或更好的代码化性能。根据本公开的实施方式可以将n位(例如,n=8)概率值映射到更小的m位表示,其中m<n是整数。概率映射可以使得与映射相关联的最坏情况的损失是非常小的值。概率映射可以是非均匀映射,在给定概率分布的初始概率的情况下,将概率空间[0,1](如果概率表示为实数)或[1,255](如果概率表示为整数)映射成可以存储在比初始概率值更少的位中的代表性值。图13是根据本公开的实施方式的概率映射的示例的示意图。概率映射1310将[1,255]映射到31个不同的值,可以使用5位进行存储。对应于所包括的leftlimit为5和所排除的rightlimit为8(即分区[5,8))的行1312表示集合{5/256,6/256,7/256}中的概率被映射到单个概率6/256(如列representativeprobability*256中所示)。行1314指示如果初始概率落在分区[40、52)中,则使用代表性概率值45。当概率p被映射到另一个概率q时,可能导致代码化性能下降。标记为loss的列描述了由于使用该映射而导致的最坏情况的百分比损失。例如,与行1312和1314相关联的最坏情况的损失是0.00367。与行1312相关联的损失可以描述如下:使用代表性概率6,而不是精确概率{5,6,7}中的任何一个,可以使用最多0.00367个附加位。损失由等式(3)给出:loss=d(p||q)/h(p)(3)在等式(3)中,d(p||q)是分布q和p之间,在同一字母(例如,二进制符号0和1)上的定义的kullback-leibler(kl)散度,以及h(p)表示分布(p,1-p)的熵。kl散度表示两个分布(p,1-p)和(q,1-q)之间的相对熵。kl散度由公式(4)给出:熵η(p)可以由等式(5)给出:h(p)=-plogp-(1-p)log(1-p)(5)给定初始概率分布,可以以许多方式确定概率映射。在示例中,可以使用穷举搜索算法来确定概率映射,该穷举搜索算法找到满足每个分区或整个映射的损失阈值的分区组成(即,映射的分区的左右极限)。也就是说,给定初始概率分布和损失阈值作为输入,搜索算法将找到[1,255]的合适分区,以使分区的代表性概率最小化给定分区的成本。最小化给定分区的成本意味着与该分区相关联的损失不能大于输入损失阈值。例如,用于生成概率映射1310的输入损失阈值是0.6%,并且搜索算法确定损失为0.367%的分区[40、52)(即,行1314),其损失小于损失阈值。搜索算法可以通过在继续寻找另一分区之前找到满足损失阈值的第一分区来进行。搜索算法可以从上(例如,从包含leftlimit为1的分区开始)、从下(即,从以rightlimit为256结束的分区开始)或从一些其他分区开始搜索。使用上述搜索算法,并且使用不同的损失阈值,可以获得概率映射1320,使得[1,255]被映射到43个不同的值。在该示例中,损失始终低于0.2%。可以使用6位来存储概率映射1320。概率映射中的分区数越高,损失越小。概率映射1330是使用另一损失阈值的映射[1,255]的另一示例。概率映射包括15个不同的值(即15个分区)。这样,需要4位来存储概率映射1330的值。在一些实施方式中,编码器对诸如帧的头部中的编码比特流中的初始概率分布进行编码,并且解码器从编码比特流中解码出初始概率分布。使用如上所述的概率映射,可以减少发送初始分布所需的位数。在一些情况下,例如当帧被显著地压缩时,减小幅度很明显。概率映射可用于在概率的向后更新中用信号通知概率值,或用于描述初始概率值以在开始代码化(编码或解码)图片(即,帧)或帧的瓦片时使用。如上所述,可以使用帧内预测来预测当前块。帧内预测模式使用被预测的当前块外围的像素。当前块外围的像素是当前块外部的像素。可以使用许多不同的帧内预测模式。一些帧内预测模式对使用至少一个外围像素生成的预测块内的所有像素使用单个值。其他帧内预测模式(可以被称为定向帧内预测模式)可以各自具有对应的预测角。其他类型的帧内预测模式也可以使用。编码器可以选择帧内预测模式作为速率失真环路的一部分。简而言之,可以测试各种帧内预测模式以确定哪种类型的预测对于给定速率或编码视频比特流中要传输的比特数(包括指示使用的预测类型的比特流中包括的开销位)将具有最低失真。在示例中,可以使用以下13种帧内预测模式:dc_pred、v_pred、h_pred、d45_pred、d135_pred、d117_pred、d153_pred、d207_pred、d63_pred、smooth_pred、smooth_v_pred和smooth_h_pred。13种帧内预测模式之一可用于预测亮度块。图14a是根据本公开的实施方式的定向帧内预测模式的示意图1400。图14a示出了将定向帧内预测模式分组为三个区域,即分别标记为区域1,区域2和区域3的区域1402、1404和1406。区域1402、1404、1406之一的帧内预测模式可以用于生成尺寸符合当前块的预测块。区域1402的特征在于帧内预测模式具有在0度和90度之间但不等于0度和90度的预测角。这样,在区域1中具有角度的预测模式可以被称为东北帧内预测模式。区域1404的特征在于预测角度在90度和180度之间但不等于90度和180度的帧内预测模式。这样,在区域2中具有角度的预测模式可以被称为西北帧内预测模式。区域1406的特征在于帧内预测模式具有在90度和180度之间但不等于90度和180度的预测角度。这样,可以将在区域3中具有角度的预测模式被称为西南帧内预测模式。总体上,区域1404-106的预测模式可以被称为定向帧内预测模式。这样,预测模式d45_pred、d135_pred、d117_pred、d153_pred、d207_pred和d63_pred是定向帧内预测模式。图14a还示出了当前块上方的行中的第一像素1408和当前块左侧的列中的第二像素1405。第一像素1408和第二像素1405可用于生成预测块。在一些实施方式中,区域1中的定向帧内预测模式(即,具有在0度与90度之间的预测角的帧内预测模式)使用第一像素1408,但可以不使用第二像素1405来产生预测块;例如,区域2中的定向预测(即,具有在90°至180°之间的预测角的帧内预测模式)使用第一像素1408和第二像素1405来生成预测块;并且区域3中的定向预测(即,具有180°和270°之间的预测角的帧内预测模式)使用第二像素1405,但是可以不使用第一像素1408来生成预测块。图14b是根据本公开的实施方式的帧内预测模式的示例的示意图。在图14b的示例中,像素a-m可以是图14a的第一像素1408或可以是其子集。像素i-m可以是图14a的第二像素1405或其子集。帧内预测模式1410示出了v_pred帧内预测模式,其通常被称为垂直帧内预测模式。在该模式下,将第一列中的预测块像素设置为外围像素a的值;将第二列的预测块像素设置为像素b的值;将第三列中的预测块像素设置为像素c的值;并且将第四列中的预测块像素设置为像素d的值。帧内预测模式1420示出了h_pred帧内预测模式,其通常被称为水平帧内预测模式。在该模式中,将第一行中的预测块像素设置为外围像素i的值;将第二行中的预测块像素设置为像素j的值;将第三行中的预测块像素设置为像素k的值;并且将第四行中的预测块像素设置为像素l的值。帧内预测模式1430图示了d117_pred帧内预测模式,之所以称为d117_pred帧内预测模式,是因为箭头的方向从水平成大约117°的角度,沿箭头方向将传播外围像素以生成形成对角线的预测块。即,在d117_pred中,预测角度是117°。帧内预测模式1430是区域2(即西北)帧内预测模式。帧内预测模式1440示出了d63_pred帧内预测模式,其对应于63°的预测角。帧内预测模式1440是区域3(即,西南)帧内预测模式。帧内预测模式1450示出了d153_pred帧内预测模式,其对应于153°的预测角度。帧内预测模式1450是区域2(即西北)帧内预测模式。帧内预测模式1460示出了d135_pred帧内预测模式,其对应于135°的预测角度。帧内预测模式1460是区域1(即,东北)帧内预测模式。预测模式d45_pred和d207_pred(未示出)分别对应于预测角45°(区域1或东北帧内预测模式)和207°(区域3或西南帧内预测模式)。dc_pred对应于所有预测块像素被设置为作为外围像素a-m的组合的单个值的预测模式。在paeth_pred帧内预测模式下,像素的预测值确定如下:1)将基值计算为一些外围像素的组合,以及2)将一些外围像素中最接近基值的一个作为预测像素。作为示例,使用像素1412(在位置x=1,y=2)示出paeth_pred帧内预测模式。在一些外围像素的组合的示例中,基值可以计算为base=b+k–m。即,该基值等于:与待预测的像素在同一行中的左外围像素的值+与该像素在同一列中的上外围像素的值–该像素在左上角的值。图14c是根据本公开的实施方式的平滑预测模式的示例的示意图。在图14c中,预测模式1470示出了smooth_v帧内预测模式,预测模式1480示出了smooth_h帧内预测模式,以及预测模式1490示出了smooth_pred帧内预测模式。在smooth_v帧内预测模式(即,预测模式1470)中,利用左相邻列中的最后一个像素(即,具有bl的值的像素1474)的值来估计预测块(即,预测块1407)的最下行(即,行1472)的预测像素。这样,行1472中的每个像素可以具有相同的值bl。可以将预测块1407中的每个像素pi,j(即,其余像素之一)计算为像素ti(例如,与像素pi,j同一列的图14a的第一像素1408中的像素)和值bl的缩放加权和。权重可以取决于像素pi,j距预测块1407的最上和最下行的距离。这样,权重可以等效于垂直方向上的二次插值。在smooth_h帧内预测模式(即,预测模式1480)中,利用最上相邻行中的最后一个像素(即具有tr值的像素1484))的值来估计预测块(即,预测块1407)的最右列(即,列1482)的预测像素。这样,列1482中的每个像素可以具有相同值tr。可以将预测块1407中的每个像素pi,j(即,剩余像素之一)计算为像素lj(例如,与像素pi,j处于同行的图14a的第二像素1405中的像素)和值tr的缩放加权和。权重可以取决于像素pi,j距预测块1407的左右列的距离。这样,权重可以等同于在水平方向上的二次插值。在smooth_pred帧内预测模式(即预测模式1490)中,利用左相邻列中的最后一个像素(具有bl值的像素1496)的值来估计预测块的最底行(即行1492)的预测像素,以及利用上相邻行中的最后一个像素(即,具有值为tr的像素1498)的值来估计预测块的最右列(即,列1494)的预测像素。处于行1492和列1494的交点处的像素1499可以被设置为bl和tr值的平均值。将预测块的其余像素计算为缩放加权和。例如,可以将预测块的位置(i,j)处的预测像素(即,pi,j)的值计算为像素lj,tr,ti和bl的值的缩放加权和。像素lj是左列中并且与预测像素在同一行上的像素。像素r是smooth_h提供的像素。像素ti是上行中并且与预测像素在同一列的像素。像素b是smooth_v提供的像素。权重可以等同于水平和垂直方向上的二次插值。由编码器选择的帧内预测模式可以在比特流中被发送到解码器。可以使用上下文模型对帧内预测模式进行熵代码化(由编码器编码化和/或由解码器解码)。一些编解码器将左和上相邻块的帧内预测模式用作用于对当前块的帧内预测模式进行代码化的上下文。使用图14为例,左相邻块可以是包含像素i-l的块,而上相邻块可以是包含像素a-d的块。编解码器可以包括用于左邻居块和上邻居块所使用的帧内预测模式的每种组合的概率分布。这样,使用以上13种预测模式,可以存储169个概率分布(对应于13×13=169个上下文)。为检索概率分布,编解码器可以执行包含以下步骤的过程:cdf_probkf_y_mode_cdf[13][13][13];left=leftneighborintramode(ordc_predifunavailable)above=aboveneighborintramode(ordc_predifunavailable)prob_table=kf_y_mode_cdf[left][above];为了便于参考,上述过程被称为ctx组合技术。在ctx组合技术中,left存储左邻居块的帧内预测模式。如果左邻居块的帧内预测模式不可用,则可以假定dc-pred帧内预测模式。above存储了上邻居块的帧内预测模式。如果上邻居块的帧内预测模式不可用,则可以假定dc-pred帧内预测模式。帧内预测模式可能不可用,因为例如当前块位于帧的边缘(例如,最上和/或最左边的块),或者帧间预测邻居块(左或上)。由于其他原因,帧内预测模式可能不可用。可以从三维阵列(即,kf_y_mode_cdf)检索概率分布(即,prob_table),该三维阵列包括左和上帧内预测模式的所有组合的概率分布。在示例中,第一维度对应于左邻居帧内预测模式(例如13个值),第二维度对应于上邻居帧内预测模式(例如13个值),以及第三维度对应于概率分布的值。如上所述,每个概率分布包括13个概率值(即,用于每个预测模式的概率值)。因此,存在12个自由度(即,每个上下文仅存储13个概率值中的12个)。在一些实施方式中,也可以存储作为常数(例如,0)的第13个条目。可以通过减少用于代码化帧内预测模式的上下文的数量来减少存储的概率分布和/或每个概率分布的概率值的数量。在示例中,当一些帧内预测模式表现出某些特性时,可以减少上下文的数量。例如,基于左帧内预测模式和/或上帧内预测模式,一些帧内预测模式的概率可能不会显著地改变。不管左和上帧内预测模式如何,这样的帧内预测模式都可以是同等概率的。在示例中,smooth_pred、smooth_v_pred和smooth_h_pred预测模式可能表现出这样的特性。根据本公开的实施方式可以使用包括以下步骤的过程来减少可用于对当前块的帧内预测模式进行代码化的上下文的数量:为了便于参考,上述程序被称为first-ctx减少技术。使用first-ctx减少技术,上下文的数量可以减少到26。这样,用于代码化(编码/解码)亮度块的帧内预测模式的上下文的数量可以减少了大约85%。在上述步骤4-4a中,如果左邻居块和上邻居块使用相同的帧内预测模式,则使用左帧内预测模式来检索概率分布。这解释13个概率分布。步骤5-6可以概述为:如果左邻居或上邻居中的一个使用平滑预测模式(即smooth_pred、smooth_v_pred或smooth_h_pred之一),则使用其他帧内预测模式来检索概率分布。这些步骤解释另外的13个概率分布。在实施方式中,这些步骤可以用于确定用于对关键帧(也称为黄金帧)的块的帧内预测模式进行代码化的上下文。在关键帧中,使用帧内预测来预测所有块。图15是根据本公开的实施方式,用于对当前块进行帧内代码化的过程1500的流程图。可以由诸如图4的编码器400的编码器来实现过程1500。当由编码器实现时,代码化意味着在诸如图4的压缩比特流420的编码比特流中进行编码。例如,过程1500可以全部或部分地由编码器400的熵编码级408执行。过程1500可以由诸如图5的解码器500的解码器执行。当由解码器实现时,代码化意味着从诸如图5的压缩比特流420的编码比特流解码。例如,过程1500可以全部或部分地由解码器500的熵解码级502执行,并且编码视频比特流可以是图5的压缩比特流420。例如,可以通过将指令存储在诸如接收站106的存储器204的存储器中以由诸如cpu202的处理器执行的指令来执行过程1500的实施方式。可以使用专用硬件或固件来实现过程1500。一些计算设备可以具有多个存储器、多个处理器或两者。可以使用不同的处理器、存储器或两者来分布过程1500的步骤或操作。为了简化说明,将过程1500描绘和描述为一系列步骤或操作。然而,根据本公开的教导可以以各种顺序和/或同时发生。另外,根据本公开的步骤可以与本文未呈现和描述的其他步骤一起发生。此外,并非使用所有示出的步骤或操作来实现根据所公开的主题的方法。在1502,过程1500使用帧内预测模式来代码化当前块。在1504,过程1500确定左邻居块的左帧内模式(即,帧内预测模式)。在实施方式中,如果左帧内模式不可用,则可以将左帧内模式假定为默认的左帧内预测模式。默认的左帧内预测模式可以是可用的帧内预测模式之一。例如,默认的左帧内预测模式可以是dc_pred模式。在1506,过程1500确定上邻居块的上帧内模式(即,帧内预测模式)。在实施方式中,如果上帧内模式不可用,则可以将上帧内模式假定为默认上帧内预测模式。默认上帧内预测模式可以是可用的帧内预测模式之一。例如,默认上帧内预测模式可以是dc_pred模式。在1510,如果左帧内模式和上帧内模式相同,则过程1500进行到1512;否则,过程1500进行到1516。在1512,过程1500使用左帧内模式或上帧内模式(两者相同)之一来确定用于对帧内预测模式进行代码化的概率分布。这样,在左帧内模式和上帧内模式等于相同模式的条件下,使用该相同模式来确定用于对帧内预测模式进行代码化的概率分布。如本公开中所使用的,“确定”是指以任何方式选择、构造、识别、指定、生成或其他确定。例如,可以从存储器中检索概率分布。一些可用的帧内预测模式可以被分类为平滑帧内预测模式。在实施方式中,平滑帧内预测模式可以是smooth_pred、smooth_h_pred和smooth_v_pred中的一种。在左帧内模式或上帧内模式中的至少一个是平滑帧内预测模式的条件下,过程1500使用左帧内模式和上帧内模式中的另一个来确定用于对帧内预测模式进行代码化的概率分布。相应地,在1516,过程1500确定左帧内模式和上帧内模式中的一个而不是两者是否是平滑帧内预测模式。如果是,则过程1500进行到1518,并且使用不是平滑帧内预测模式的左帧内模式和上帧内模式之一来确定用于对帧内预测模式进行代码化的概率分布;否则,过程1500进行到1520以使用左帧内模式和上帧内模式中的任一个来确定概率分布。在实施方式中,在1520使用左帧内预测模式。从1518或1520,过程1500进行到1514。在1514,过程1500使用概率分布对帧内预测模式进行代码化。可以通过将可用的帧内预测模式划分为类来减少用于代码化当前的帧内预测模式的上下文的数量。每个类可以包括一个或多个帧内预测模式。为帧内预测模式代码化的符号的数量可以取决于帧内预测模式的类。在示例中,可以将上述13种帧内预测模式划分为表ii中所示的类。表ii第一符号可以指示帧内预测模式的帧内预测类。由于表ii中有六(6)个帧内预测类,将ctx组合技术用于确定用于对第一符号进行代码化的概率分布,总共可能有36个上下文。这36个上下文分别对应于左邻居块的六(6)个可能类和上邻居类的六(6)的可能类。每个上下文包括五(5)个概率值。使用first-ctx减少技术,只需要12(=6*2)个上下文来代码化第一符号。如果帧内预测模式在smooth类中,则将ctx组合技术用于确定用于代码化第二符号的概率分布,总共有九(9)个上下文。九(9)个上下文对应于左邻居块的三(3)个可能的平滑帧内预测模式和上邻居类的三(3)个可能的平滑帧内预测模式。使用first-ctx减少技术,只需要一(1)个上下文。每个上下文包括2个概率值。smooth类可以包括如上所述的平滑帧内预测模式的帧内预测模式。换句话说,可以将每个平滑帧内预测模式映射到smooth类。如果帧内预测模式在类directional中,则将ctx组合技术用于确定用于对第二符号进行代码化的概率分布,总共可能有36个上下文。36个上下文对应于左邻居块的directional类中的六(6)种可能的帧内预测模式和上邻居类的directional类中的六(6)种可能的帧内预测模式。使用first-ctx减少技术,仅需要12个上下文。每个上下文提供五(5)个概率值。如上所述,directional类可以包括作为定向帧内预测模式的帧内预测模式。换句话说,可以将每个定向帧内预测模式映射到directional类。图18是根据本公开的实施方式,用于使用帧内预测模式来代码化当前块的过程1800的流程图。在使用帧内预测来代码化当前块时,编码器可以编码帧内预测模式,该帧内预测模式被用来将当前块编码成编码比特流(诸如图4的压缩比特流420)。在使用帧内预测对当前块进行解码时,解码器可以对帧内预测模式进行解码,以将其用于从编码比特流(例如,图5的压缩比特流420)中解码当前块。过程1800可以代码化在/来自压缩比特流的指示帧内预测模式的一个(在某些情况下,不止一个)符号。过程1800使用上下文模型对第一符号进行代码化。(为选择上下文模型)所使用的上下文可以是或可以包括如上所述的当前块的相邻代码化块的帧内预测模式。过程1800将相邻块的帧内预测模式映射到类,其中,类的数量小于可用帧内预测模式的数量。过程1800使用相邻块的帧内预测模式的类而不是帧内预测模式本身来选择上下文模型。过程1800的实施方式可以减少用于代码化帧内预测模式的上下文的数量。过程1800可以由诸如图5的解码器500的解码器执行。例如,过程1800可以全部或部分地由解码器500的熵解码级502执行,并且编码视频比特流可以是图5的压缩比特流420。过程1800可以由诸如图4的编码器400的编码器来实现。例如,过程1800可以全部或部分地由解码器500的熵编码级408执行。过程1800的实施方式可以通过将指令存储在诸如接收站的存储器204的存储器中以由诸如cpu202的处理器执行来实现。可以使用专用硬件或固件来实现过程1800。一些计算设备可以具有多个存储器、多个处理器或两者。可以使用不同的处理器、存储器或两者来分配过程1800的步骤或操作。为了简化说明,将过程1800描绘和描述为一系列步骤或操作。在1802,过程1800确定用于解码当前块的第一相邻块的第一帧内预测模式的第一帧内预测类。在1804,过程1800确定用于解码当前块的第二相邻块的第二帧内预测模式的第二帧内预测类。第一相邻块和第二相邻块可以分别是当前块的上相邻块和左相邻块,反之亦然。参考图14b,作为示例,在以光栅扫描顺序处理包含当前块的帧的情况下,该上块可以是包含一些像素a-h的块,而该左块可以是包含一些像素i-l的块。从可用帧内预测模式的列表中选择第一帧内预测模式和第二帧内预测模式。在实施方式中,第一帧内预测模式和第二帧内预测模式各自从包括上述dc_pred、v_pred、h_pred、d45_pred、d135_pred、d117_pred、d153_pred、d207_pred、d63_pred、smooth_pred、smooth_v_v、以及smooth_h_pred和paeth_pred帧内预测模式的集合选择。更多、更少或其他帧内预测模式可能可用。过程1800可以使用将帧内预测模式映射到类的映射来确定第一帧内预测类和第二帧内预测类。在实施方式中,可以使用诸如参考表ii描述的映射的映射。这样,第一帧内预测类和第二帧内预测类各自从包括上述dc类、水平类(即,h类)、垂直类别(即,v类)、平滑类(即smooth类)、paeth类(即paeth类)和定向类(即directional类)的集合中选择。但是,其他映射可能可用。表ii将13种可用的帧内预测模式映射到六个类别。定向类可以包括d45_pred、d135_pred、d117_pred、d153_pred、d207_pred、d63_pred帧内预测模式。平滑类可以包括smooth_pred、smooth_v_pred和smooth_h_pred帧内预测模式。在1806,过程1800使用第一帧内预测类和第二帧内预测类对帧内预测模式进行代码化。在实施方式中,使用第一帧内预测类和第二帧内预测类对帧内预测模式进行代码化可以包括:对指示帧内预测模式的类的第一符号进行代码化,并且在帧内预测模式是平滑帧内预测模式或定向帧内预测模式之一的条件下,对指示帧内预测模式的第二符号进行代码化。第一符号可以是字母表的符号,使得字母表的每个符号指示帧内预测类中的一个。这样,一个符号表示dc类,第二符号表示水平类,第三符号表示垂直类,依此类推。当由编码器实现时,过程1800可以通过确定帧内预测模式是smooth_pred、smooth_v_pred和smooth_h_pred帧内预测模式之一来确定用于代码化当前块的帧内预测模式是平滑帧内预测模式。可替换地,如果帧内预测模式的类是平滑类,则过程1800可以确定帧内预测模式是平滑帧内预测。类似地,过程1800可以通过确定帧内预测模式是d45_pred、d135_pred、d117_pred、d153_pred、d207_pred、d63_pred帧内预测模式之一来确定帧内预测模式是定向帧内预测模式。可替代地,如果帧内预测模式的类是定向类,则过程1800可以确定帧内预测模式是定向帧内预测。备选地,过程1800可以使用第一符号确定帧内预测模式是平滑帧内预测模式或定向帧内预测模式中的一种。当由解码器实现时,过程1800可以使用第一符号来确定帧内预测模式是平滑帧内预测模式或定向帧内预测模式之一。也就是说,在对第一符号进行解码之后,过程1800可以使用第一符号来确定帧内预测模式是平滑帧内预测模式或定向帧内预测中的一种。在实施方式中,仅一个上下文模型可用于代码化任何平滑帧内预测模式。这样,如果帧内预测模式是平滑帧内预测模式,则过程1800选择单个可用上下文模型以对第二符号进行代码化。当由解码器实现时,过程1800可以使用第一符号来确定帧内预测模式是平滑帧内预测模式以确定帧内预测模式的类。在另一实施方式中,可以使用一个以上上下文模型来代码化平滑的帧内预测模式。这样,过程1800代码化另一符号以便选择上下文模型。在实施方式中,仅两个上下文模型可用于代码化定向帧内预测模式:第一上下文模型和第二上下文模型。这样,对指示帧内预测模式的第二符号进行代码化可以包括当帧内预测模式是定向帧内预测模式时,如果第一帧内预测类和第二帧内预测类是同一类(即,相同),过程1800选择第一上下文模型以对第二符号进行代码化;如果第一帧内预测类和第二帧内预测类是不同的类(即不相同),则过程1800选择第二上下文模型以对第二符号进行代码化。图19是根据本公开的另一实施方式,用于使用帧内预测模式来代码化当前块的过程1900的流程图。过程1900使用当前块的相邻块的帧内预测模式的类来确定用于代码化用于对当前块代码化的帧内预测模式的上下文。过程1900使用上下文模型对帧内预测模式进行代码化。(为选择上下文模型)所使用的上下文可以是或可以包括如上所述的当前块的相邻代码化块的帧内预测模式。过程1900将相邻块的帧内预测模式映射到类,其中,类的数量小于可用帧内预测模式的数量。过程1900使用相邻块的帧内预测模式的类而不是帧内预测模式本身来选择上下文模型。过程1900的实施方式可以减少用于代码化帧内预测模式的上下文的数量。过程1900可以由诸如图5的解码器500的解码器执行。例如,过程1900可以全部或部分地由解码器500的熵解码级502执行,并且编码视频比特流可以是图5的压缩比特流420。过程1900可以由诸如图4的编码器400的编码器来实现。例如,过程1900可以全部或部分地由解码器500的熵编码级408执行。过程1900的实施方式可以通过将指令存储在诸如接收站的存储器204的存储器中以由诸如cpu202的处理器执行来实现。可以使用专用硬件或固件来实现过程1900。一些计算设备可以具有多个存储器、多个处理器或两者。可以使用不同的处理器、存储器或两者来分配过程1900的步骤或操作。为了简化说明,将过程1900描绘和描述为一系列步骤或操作。在1902,过程1900确定用于解码当前块的第一相邻块的第一帧内预测模式的第一帧内预测类。在1904,过程1900确定用于解码当前块的第二相邻块的第二帧内预测模式的第二帧内预测类。第一相邻块和第二相邻块可以如上参考图18所述。可用的帧内预测模式可以被映射到类。可以使用表iii中所示的映射。但是,其他映射也是可能的。例如,表iii中的一些类别可以组合以减少类的数量。在另一个示例中,可以将表iii中具有一个以上帧内预测模式的一些类拆分为多个类,以产生更精细的映射。这样,并且使用表iii的映射,可以将第一帧内预测模式和第二帧内预测模式映射到选自包括8个类(即,表iii的别0-7)的类的集合中的类。表iii的帧内预测类别是序数值。也就是说,可以从最低到最高对类进行排序。在表iii的映射中,可用的帧内预测模式中,类0包括dc预测模式,类1包括垂直预测模式,类2包括水平预测模式,类3包括东北帧内预测模式,类4包括西北帧内预测模式,类5包括西南帧内预测模式,类6包括平滑帧内预测模式,类7包括佩斯预测模式。表iii在1906,过程1900可以使用第一帧内预测类和第二帧内预测类来选择上下文模型。上下文模型可以用于代码化用于对当前块进行代码化的帧内预测模式。可以从可用上下文模型的列表中选择上下文模型。在实施方式中,过程1900使用利用第一帧内预测类和第二帧内预测类来选择上下文模型(例如,上下文模型索引)的映射。该映射可以是对称映射。也就是说,给定first_class、second_class和映射f,f(first_class,second_class)=f(second_class,first_class)=context_model_index。在实施方式中,使用第一帧内预测类和第二帧内预测类来选择上下文模型可以包括使用第一帧内预测类来选择到可用上下文模型的列表中的索引,以及将第二帧内预测类用作与可用上下文模型列表中的索引的偏移量来选择上下文模型以对帧内预测模式进行解码。在实施方式中,第一帧内预测类大于或等于第二帧内预测类。换句话说,第一帧内预测类和第二帧内预测类中的较大者可以被用作可用上下文模型列表的索引,而第一帧内预测类和第二帧内预测类中的较小者被用作偏移量。下述get_intra_ctx函数是可以与过程1900一起使用以选择用于对用于代码化当前块的帧内预测模式进行代码化的上下文的实施方式的示例。使用表iii描述了函数get_intra_ctxis。函数get_intra_ctx接收上块和左块的帧内预测模式作为输入。如上所述,所接收的帧内预测模式中的一个或两个可以是默认帧内预测模式。函数get_intra_ctx返回用于对当前块的帧内预测模式进行代码化的上下文模型的索引ctx。在可用的帧内预测模式和类如参考表iii所述的情况下,可以使用36个上下文模型。在步骤2,可以基于例如表iii的映射来确定上相邻块class_above的类。这样,class_above可以是任何值0-7。在步骤3,可以基于例如表iii的映射来确定左相邻块class_left的类。这样,class_left可以是任何值0-7。在步骤4,将变量low设置为class_above和class_left值中的较小者。在步骤5,将变量high设置为class_above和class_left值中的较大值。当class_above和class_left相等时,变量high和low设置为相同的值。值high和low可以分别是值0-7之一。可以组织可用上下文模型的列表,以便对于给定的类值,依次列出与该类值和所有较低或相等的类值相对应的上下文模型。例如,如果high值为5,则在可用上下文列表中顺序列出对应于(high,low)组合(5,0),(5,1),(5,2),(5,3),(5,4)和(5,5)的上下文模型。可以按照high类值的升序进一步组织可用的上下文模型。即,在类n+1的上下文模型之前,列出了与类n(对n=0,...,6)相对应的上下文模型。这样,在步骤1中,阵列ctx_idx描述了可用上下文模型列表内,对应于high帧内预测类的上下文模型的起始位置。对于给定的high帧内预测类i,对于i=0,..,7,ctx_idx[i]=(i*(i+1))/2。例如,如果high值为5,则可以从可用上下文模型列表中的位置(5*(5+1))/2=15开始找到high=5的所有可能上下文模型。在步骤6,将high值用作索引,以找到与该high值相对应的类的上下文模型的起始索引,将low值用作与该索引的偏移量。这样,步骤6可以用于实现图19的步骤1906。上述步骤基本上实现了如参考图20所述的上下文模型的下三角布置。图20是根据本公开的实施方式的上下文模型索引的示意图2000。第一列2006对应于阵列ctx_idx。例如,示意图2000示出了对应于类high=6的上下文模型从索引21开始(即,ctx_idx[6]=21)。索引2002(值8)是当high=3和low=2时要使用的上下文模型的索引(即ctx=ctx_idx[3]+2=6+2=8)。索引2004(值25))是当high=6和low=4时要使用的上下文模型的索引(即ctx=ctx_idx[6]+4=21+4=25)。为了简化说明,将过程600、1000、1200、1500、1700、1800和1900各自图示和描述为一系列块、步骤或操作。然而,根据本公开的块、步骤或操作可以以各种顺序和/或同时发生。另外,可以使用本文未提出和描述的其他步骤或操作。此外,并非需要所有示出的步骤或操作来实现根据所公开的主题的方法。上述编码和解码的方面示出了一些编码和解码技术。然而,应当理解到,编码和解码(就像在权利要求中使用的那些术语)可以表示数据的压缩、解压缩、变换或任何其他处理或改变。此外,上述变形和组合是可能的。例如,本文的教导还描述了一种用于代码化当前块的方法,该方法包括:确定当前块的左邻居块的第一帧内预测模式;确定当前块的上邻居块的第二帧内预测模式,响应于确定第一帧内预测模式和第二帧内预测模式是相同模式,使用相同模式来确定用于对当前块的帧内预测模式进行代码化的概率分布,并且使用概率分布来对帧内预测模式代码化。本文教导的另一示例包括一种用于代码化当前块的方法,该方法包括:确定当前块的左邻居块的第一帧内预测模式;确定当前块的上邻居块的第二帧内预测模式。响应于确定第一帧内预测模式和第二帧内预测模式不是相同的模式并且响应于确定第一帧内预测模式和第二帧内预测模式中的仅一个是平滑帧内预测模式,使用第一帧内预测模式和第二帧内预测模式中的另一个来确定用于对当前块的帧内预测模式进行代码化的概率分布,并且使用概率分布来对帧内预测模式进行代码化。本文使用词语“示例”或“实施方式”来表示用作示例、实例或说明。本文中描述为“示例”或“实施方式”的任何方面或设计不必被解释为比其他方面或设计更优选或更具优势。相反,使用词语“示例”或“实施方式”旨在以具体方式呈现概念。如在本申请中所使用的,术语“或”旨在表示包含性的“或”而不是排他性的“或”。也就是说,除非另有说明或从上下文中清楚,否则“x包括a或b”旨在表示任何自然的包含性排列。也就是说,如果x包括a;x包括b;或者x包括a和b,然后在任何前述情况下满足“x包括a或b”。另外,本申请和所附权利要求中使用的冠词“一”和“一个”通常应理解为表示“一个或多个”,除非另有说明或从上下文清楚地指向单数形式。此外,除非如此描述,否则贯穿使用术语“实施方式”或“一种实现”并不旨在表示相同的实施例或实现。可以用硬件、软件或其任何组合来实现发送站102和/或接收站106的实施方式(以及存储在其上和/或由其(包括由编码器400和解码器500)执行的算法、方法、指令等)。硬件可包括例如计算机、知识产权(ip)核、专用集成电路(asic)、可编程逻辑阵列、光学处理器、可编程逻辑控制器、微代码、微控制器、服务器、微处理器、数字信号处理器或任何其他合适的电路。在权利要求中,术语“处理器”应该被理解为单独地或组合地包含任何前述硬件。可互换使用术语“信号”和“数据”。此外,不一定必须以相同的方式实现发送站102和接收站106的部分。此外,在一个方面,例如,可以使用具有计算机程序的通用计算机或通用处理器来实现发送站102或接收站106,该计算机程序在被执行时执行本文所述的任何相应的方法、算法和/或指令的任何一个。另外或替代地,例如,可以使用专用计算机/处理器,其可以包含用于执行本文所述的任何方法、算法或指令的其他硬件。可以例如在视频会议系统中的计算机上实现发送站102和接收站106。替选地,可以在服务器上实现发送站102,以及可以在诸如手持通信设备的、与服务器分开的设备上实现接收站106。在这种情况下,发送站102可以使用编码器400将内容编码为编码视频信号,并将编码视频信号发送到通信设备。接着,通信设备然后可以使用解码器500对编码视频信号进行解码。替选地,通信设备可以解码在通信设备上本地存储的内容,例如,不是由发送站102发送的内容。其他发送站102和接收站106的实施方式是可用的。例如,接收站106可以是通常固定的个人计算机而不是便携式通信设备,和/或包括编码器400的设备也可以包括解码器500。此外,本公开的全部或部分实施方式可以采用可从例如有形计算机可用或计算机可读介质访问的计算机程序产品的形式。计算机可用或计算机可读介质可以是能够例如有形地包含、存储、通信或传输程序以供任何处理器使用或与之结合使用的任何设备。介质可以是例如电、磁、光、电磁或半导体器件。其他合适的介质也是可用的。在下述示例中总结了进一步的实施方式:示例1:一种用于代码化当前块的装置,包括:存储器;以及处理器,该存储器包括可由处理器执行的指令以:确定用于解码当前块的第一相邻块的第一帧内预测模式的第一帧内预测类;确定用于解码当前块的第二相邻块的第二帧内预测模式的第二帧内预测类;使用第一帧内预测类和第二帧内预测类对帧内预测模式进行代码化。示例2:如示例1所述的装置,其中,第一相邻块在当前块上方,并且第二相邻块以光栅扫描顺序在当前块的左侧。示例3:如示例1或2所述的装置,其中,第一帧内预测模式、第二帧内预测模式和帧内预测模式各自选自包括dc_pred、v_pred、h_pred、d45_pred、d135_pred、d117_pred、d153_pred、d207_pred、d63_pred、smooth_pred、smooth_v_pred和smooth_h_pred以及paeth_pred帧内预测模式的集合。示例4(11):如示例1至3中的任何一个所述的装置,其中,第一帧内预测模式和第二帧内预测模式各自选自包括dc类、水平类、垂直类、平滑类、佩斯(paeth)类和定向类的集合。示例5:如示例4所述的装置,其中,定向类包括d45_pred、d135_pred、d117_pred、d153_pred、d207_pred、d63_pred帧内预测模式。示例6:如示例4所述的装置,其中,平滑类包括smooth_pred、smooth_v_pred和smooth_h_pred帧内预测模式。示例7:如示例1至6中任一项所述的装置,其中,用于使用第一帧内预测类和第二帧内预测类对帧内预测模式进行代码化的指令包括用于以下的指令:对指示指示帧内预测模式的类的第一符号进行代码化;在所述帧内预测模式是平滑帧内预测模式或定向帧内预测模式中的一个的条件下,对指示帧内预测模式的第二符号进行代码化。示例8:如示例7所述的装置,其中,用于对指示帧内预测模式的第二符号进行代码化的指令包括用于以下的指令:在帧内预测模式是平滑帧内预测模式的条件下,选择用于代码化第二符号的单个可用上下文模型。示例9:如示例7所述的装置,其中,用于对指示帧内预测模式的第二符号进行代码化的指令包括用于以下的指令:在帧内预测模式是定向帧内预测模式的条件下,以及在第一帧内预测类和第二帧内预测类为同一类的条件下,选择用于对第二符号进行代码化的第一上下文模型,并且在第一帧内预测类和第二帧内预测类为不同类的条件下,选择用于代码化第二符号的第二上下文模型。示例10:一种用于代码化当前块的方法,包括:确定用于解码当前块的第一相邻块的第一帧内预测模式的第一帧内预测类;确定用于解码当前块的第二相邻块的第二帧内预测模式的第二帧内预测类;使用第一帧内预测类和第二帧内预测类来选择用于对当前块的帧内预测模式进行代码化的上下文模型,该上下文模型选自可用上下文模型的列表。示例11:如示例10所述的方法,其中,第一帧内预测类和第二帧内预测类是序列值,其中,第一帧内预测类大于或等于第二帧内预测类,其中,利用第一帧内预测类和第二帧内预测类从可用上下文模型的列表中选择用于对帧内预测模式进行代码化的上下文模型,包括:使用第一帧内预测类来选择到可用上下文模型列表的索引;将第二帧内预测类用作与可用上下文模型列表中的索引的偏移来选择用于对帧内预测模式进行解码的上下文模型。示例12:如示例10或11所述的方法,其中,第一帧内预测模式和第二帧内预测模式选自包括东北帧内预测类、西北帧内预测类和西南帧内预测类的类集合。已经描述了上述实施例、实施方式和方面,以便容易理解本公开,并且上述实施例、实施方式和方面不限制本公开。相反,本公开旨在涵盖包括在所附权利要求范围内的各种改进和等同布置,该范围应被赋予最广泛的解释,以包含法律允许的所有这些改进和等同配置。当前第1页1 2 3 当前第1页1 2 3 
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1