嵌入关于EOB位置的信息的制作方法

文档序号:19735797发布日期:2020-01-18 04:26阅读:386来源:国知局
嵌入关于EOB位置的信息的制作方法

背景技术
:数字视频流可以使用一系列帧或静止图像来表示视频。数字视频可以被用于各种应用,包括例如视频会议、高清视频娱乐、视频广告或共享用户生成的视频。数字视频流可以包含大量数据,并且消耗计算设备的大量计算或通信资源来处理、传输或存储视频数据。已经提出了各种方案来减少视频流中的数据量,包括压缩和其他编码技术。可以通过将帧或图像拆分成基于参考帧的一个或多个预测块而预测的块来执行基于运动估计和补偿的编码。块与预测块之间的差异(即残留误差)被压缩并编码在比特流中。解码器使用该差异和参考帧来重建帧或图像。技术实现要素:所公开的实施方式的一个方面是根据一个实施方式的用于解码量化变换系数的变换块的方法。该方法包括:从编码比特流中解码量化变换系数的预定数量的系数;确定所述预定数量的系数的值;以及通过从编码比特流中读取比特并遍历具有根节点的系数令牌树,从编码比特流中解码后续量化变换系数。根节点指示块结束(eob)令牌。后续量化变换系数以扫描顺序跟随在所述预定数量的系数之后。对后续量化变换系数的解码使用所述值来确定在系数令牌树中是在根节点处开始遍历系数令牌树还是在另一个节点处开始遍历系数令牌树。另一方面是根据本公开的一个实施方式的用于解码量化变换系数的变换块的装置,该装置包括存储器和处理器。处理器被配置成执行存储在存储器中的指令,以:从编码比特流中解码量化变换系数的预定数量的系数;确定所述预定数量的系数的值;以及从编码比特流中基于所述值来解码指示用于后续量化变换系数的eob指示符的比特。另一方面是根据本公开的一个实施方式的用于解码量化变换系数的变换块的装置,该装置包括存储器和处理器。处理器被配置成执行存储在存储器中的指令,以:从编码比特流中解码量化变换系数的预定数量的系数;确定所述预定数量的系数的值;以及通过从编码比特流中读取比特并遍历具有根节点的系数令牌树,从编码比特流中解码后续量化变换系数,该根节点指示eob令牌。后续量化变换系数以扫描顺序跟随在所述预定数量的系数之后。解码后续量化变换系数使用所述值来确定在系数令牌树中是在根节点处开始遍历系数令牌树还是在另一个节点处开始遍历系数令牌树。另一方面是根据本公开的一个实施方式的用于编码量化变换系数的变换块的方法。该方法包括:将量化变换系数划分为至少第一系数组和第二系数组;确定第一系数组的值;以及在编码比特流中基于所述值来编码指示用于第二系数组的变换系数的块结束(eob)的比特。另一方面是根据本公开的一个实施方式的用于编码量化变换系数的变换块的装置,该装置包括存储器和处理器。处理器被配置成执行存储在存储器中的指令,以:将量化变换系数划分成至少第一系数组和第二系数组;确定第一系数组的值;以及在编码比特流中基于所述值来编码指示用于第二系数组的变换系数的eob的比特。本公开的这些和其他方面被公开在以下实施例的详细描述、所附权利要求和附图中。附图说明本文中的描述参考了附图,其中相同的附图标记在多个视图中指代相同的部件。图1是视频编码和解码系统的示意图。图2是可以实施发射站或接收站的计算设备的示例的框图。图3是待编码和随后解码的视频流的图。图4是根据本公开的实施方式的编码器的框图。图5是根据本公开的实施方式的解码器的框图。图6是示出根据本公开的实施方式的量化变换系数的图。图7是根据本公开的实施方式的系数令牌树的图,该系数令牌树可以用于将块熵编码成视频比特流。图8是根据本公开的实施方式的用于解码量化变换系数的变换块的过程的流程图。图9是根据本公开的实施方式的用于解码量化变换系数的变换块的过程的流程图。图10是根据本公开的实施方式的用于编码量化变换系数的变换块的过程的流程图。图11a是根据本公开的实施方式将量化变换系数分成至少第一系数组和第二系数组的示例。图11b是根据本公开的实施方式将量化变换系数分成三个连续组的示例。图12是根据本公开的实施方式的用于编码量化变换系数的变换块的过程的流程图。具体实施例如上所述,与编码视频流相关的压缩方案可以包括:将图像拆分成块,并使用一种或多种技术来生成数字视频输出比特流,以限制输出中所包括的信息。接收到的编码比特流可以被解码,以根据有限的信息重新创建块和源图像。将视频流或其一部分(例如帧或块)编码可以包括使用视频流中的时间或空间相似性来提高编码效率。例如,可以基于识别先前编码的像素值和当前块中的像素值之间的差异(残差)来编码视频流的当前块。这样,只需要将残差和用于生成残差的参数添加到编码比特流中。可以使用有损量化步长来编码残差。如下文进一步描述的,残差块可以在像素域中。残差块可以被变换到频域,从而产生变换系数的变换块。变换系数可以被量化,从而得到量化变换系数的量化变换块。量化的系数可以被熵编码并被添加到编码比特流中。解码器可以接收编码比特流,可以熵解码量化变换系数,以重建原始视频帧。熵编码是一种用于“无损”编码的技术,其依赖于对编码视频比特流中出现的值的分布进行建模的概率模型。通过使用基于测量或估计出的值分布的概率模型,熵编码可以将表示视频数据所需的比特数减少到接近理论最小值。实际上,表示视频数据所需的比特数的实际减少可以是概率模型的准确度、执行编码的比特数以及用于执行编码的定点算术的计算准确度的函数。在编码的视频比特流中,许多比特被用于以下两件事情中的一件:内容预测(例如,帧间模式/运动矢量编码、帧内预测模式编码等);或残差编码(例如,变换系数)。编码器可以使用技术来减少花费在系数编码的比特量/比特数。系数令牌树(也可以被称为二进制令牌树)指定了值的范围,其中该令牌树中的每一个分支具有前向自适应概率。将令牌基值从待编码的值中减去以形成残差,然后用固定概率对块进行编码。包括后向自适应性的变差较小的的类似的方案也是可能的。自适应技术可以在视频流被编码时改变概率模型,以适应数据的变化特征。无论如何,解码器被告知(或具有可用的)用于编码熵编码的视频比特流的概率模型,以解码视频比特流。根据本公开的实施方式将变换块(例如,量化的变换块)中的系数(例如,量化变换系数)分成两个或更多个段或系数组。如下所述,所述段(即系数组)可以是连续的。例如,量化变换系数可以被分成第一系数组和第二系数组。基于第一段中的解码的系数,可以跳过在第二段中的一些位置(即,对于第二系数组的变换系数中的某些)处的对eob令牌(eob_token)的检查。例如,可以基于第一系数组中的解码的系数的值而跳过检查。该值可以是第一系数组中的解码的系数的绝对总和。在示例中,如果第一系数组中的变换系数总和(用usum表示)是奇数,则第二段中的非零系数的数量可以被假设为奇数;如果usum是偶数,则第二系数组中的非零系数的数量可以假设为偶数。这样,仅在第二系数组中的每隔一个非零系数之后才需要检查eob_token。这种技术在本文中被称为将eob位置嵌入系数(即量化变换系数)值中。这样,对于m×n变换块,在第一系数组包括k-1k-1变换系数的情况下,编码当前令牌是否等于eob_token的总次数等于(k+ceiling((m*n-k)/2)))。这可以节省解码多达floor((m*n-k)/2)的上下文编码的二元判定原本需要的解码操作。注意,上下文编码的二元判定在计算中涉及以下基本步骤:上下文推导(例如,推导用于编码和解码的上下文)、概率确定(例如,在给定上下文的情况下计算或查找用于编码和解码的概率)以及布尔编码和解码(例如,使用所确定的概率来进行二进制算术编码和解码)。对于分数,函数ceiling返回大于该分数的最小整数,函数floor返回小于该分数的最大整数。例如,对于4×4变换块(其中第一系数组包括扫描顺序中的前5个(即,k=6)变换系数并且第二系数组包括11个(即,mxn-k=4*4-6=10)变换系数),根据本公开的实施方式可以导致将eob_token编码11次(而不是mxn=4*4=16),从而节省了5个上下文编码的二进制符号。编码或解码变换系数(例如,编码或解码表示变换系数的二进制串)在计算上是昂贵的,因为使用了二进制算术编码。基于上下文的二进制算术编码需要为码字的每一个二进制值确定上下文(从而确定概率模型)。在本公开的实施方式中,可以通过减少用于编码量化变换系数的比特数来提高压缩性能。例如,通过跳过对指示一些量化变换系数的eob令牌的比特的编码和解码,可以减少编码量化变换系数所需的比特数。根据本公开的实施方式可以通过将关于块结束(eob)位置的信息嵌入到其他系数值中来确定是否跳过比特编码。根据本公开的实施方式的益处包括:1)改善了速率失真性能;和2)由于在编码eob位置时节省了基于上下文的编码操作而降低了解码复杂度。本文中,首先参考可以并入教导的系统来描述在视频编码中嵌入关于eob位置的信息。图1是视频编码和解码系统100的示意图。发射站102可以是例如具有如图2中所描述的硬件内部配置的计算机。然而,发射站102的其他合适的实施方式也是可能的。例如,可以将发射站102的处理分布在多个设备中。网络104可以将发射站102和接收站106连接,用于视频流的编码和解码。具体地,可以在发射站102中编码视频流,并且可以在接收站106中将编码的视频流解码。网络104可以是例如因特网。网络104也可以是局域网(lan)、广域网(wan)、虚拟专用网(vpn)、蜂窝电话网或者将视频流从发射站102传递到接收站106(在该示例中是接收站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可以包括代码和数据206,由cpu202使用总线212访问该代码和数据206。存储器204还可以包括操作系统208和应用程序210,该应用程序210包括允许cpu202执行本文中所述的方法的至少一个程序。例如,应用程序210可以包括应用1至n,其还包括执行本文中所述的方法的视频编码应用。计算设备200还可以包括次存储装置214,该次存储装置214可以是例如与计算设备200一起使用的移动的存储卡。因为视频通信会话可能包含大量信息,所以可以将其全部或部分地存储在次存储装置214中,并根据处理需要加载到存储器204中。计算设备200还可以包括一个或多个输出设备,例如显示器218。在一个示例中,显示器218可以是触敏显示器,其将显示器与触敏元件相组合,该触敏元件能够操作来感测触摸输入。显示器218可以经由总线212联接到cpu202。作为显示器218的补充或替代,可以提供允许用户进行编程或以其他方式使用计算设备200的其他输出设备。当输出设备是显示器或包括显示器时,可以以各种方式实施显示器,包括通过液晶显示器(lcd)、阴极射线管(crt)显示器或发光二极管(led)显示器(例如有机led(oled))显示器来实施。计算设备200还可以包括图像感测设备220或者与图像感测设备220通信,该图像感测设备220例如是相机或者现在存在或以后开发的能够感测图像(诸如操作计算设备200的用户的图像)的任何其他图像感测设备220。图像感测设备220可以被定位成使得该图像感测设备220朝向操作计算设备200的用户。在示例中,图像感测设备220的位置和光轴可以被配置成使得视野包括直接邻近显示器218且从其可以看到显示器218的区域。计算设备200还可以包括声音感测设备222或者与声音感测设备222通信,声音感测设备222例如是麦克风或者现在存在或以后开发的能够感测计算设备200附近的声音的任何其他声音感测设备。声音感测设备222可以被定位成使得该声音感测设备222朝向操作计算设备200的用户,并且可以被配置成在用户操作计算设备200时接收用户发出的声音,例如语音或其他话语。尽管图2将计算设备200的cpu202和存储器204描绘为集成到单个单元中,但是也可以使用其他配置。可以将cpu202的操作分布在多个机器上(每一个机器具有一个或多个处理器),这些机器可以直接联接局域网或其他网络或者在局域网或其他网络上联接。可以将存储器204分布在多个机器上,例如基于网络的存储器或执行计算设备200的操作的多个机器中的存储器。尽管在本文中被描绘为单个总线,但是计算设备200的总线212可以由多个总线组成。此外,次存储装置214可以直接联接到计算设备200的其他组件,或者可以经由网络访问计算设备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的框图。如上所述,可以在发射站102中实施编码器400,例如通过提供存储在存储器(例如存储器204)中的计算机软件程序来实施编码器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的框图。可以在接收站106中实施解码器500,例如,通过提供存储在存储器204中的计算机软件程序来实施解码器500。计算机软件程序可以包括机器指令,当由诸如cpu202的处理器执行时,该机器指令使接收站106以下面图8和图9中描述的方式来解码视频数据。也可以将解码器500实施在例如发射站102或接收站106中所包括的硬件中。类似于上面讨论的编码器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的一些实施方式中,在环路滤波阶段512之前应用去块滤波阶段514。附加地或可替代地,除了环路滤波阶段416之外,编码器400还包括去块滤波阶段。图6是示出根据本公开的实施方式的量化变换系数的图600。图600描绘了当前块620、扫描顺序602、量化变换块604、非零映射606、块结束映射622和符号映射626。当前块620被示出为4×4块。然而,任何块尺寸都是可能的。例如,当前块可以具有4×4、8×8、16×16、32×32的尺寸(即大小),或者任何其他的正方形或矩形的块尺寸。当前块620可以是当前帧的块。在另一个示例中,当前帧可以被分成均包括块的集合的段(诸如图3的段308)、片等,其中当前块是分开的块。量化变换块604可以是尺寸类似于当前块620尺寸的块。量化变换块604包括非零系数(例如,系数608)和零系数(例如,系数610)。如上所述,量化变换块604包含与当前块620对应的用于残差块的量化变换系数。同样如上所述,量化变换系数由熵编码阶段(例如图4的熵编码阶段408)进行熵编码。对量化变换系数进行熵编码可以涉及上下文模型(也被称为概率上下文模型、概率模型、模型和上下文)的选择,该上下文模型提供对用于编码二进制化的变换系数的二进制符号的条件概率的估计,如下文参考图7所述。当对量化变换系数进行熵编码时,可以使用附加信息作为用于选择上下文模型的上下文。例如,先前编码的变换系数的量级可以至少部分地用于确定概率模型。为了对变换块进行编码,视频编码系统可以以扫描顺序遍历变换块,并在分别遍历(即访问)量化变换系数时对量化变换系数进行编码(例如熵编码)。在之字形扫描顺序(例如扫描顺序602)中,首先遍历和编码变换块的左上角(也称为dc系数),遍历和编码扫描顺序中的下一个系数(即对应于标记为“1”的位置的变换系数),以此类推。在之字形扫描顺序(即,扫描顺序602)中,首先遍历当前的量化变换系数(例如,待编码的变换系数)上方和左侧的一些量化变换系数。其他扫描顺序也是可能的。量化变换系数的一维结构(例如,阵列)可以通过使用扫描顺序遍历二维量化变换块来产生。在一些示例中,对量化变换块604编码可以包括确定非零映射606,该非零映射606指示量化变换块604的哪些量化变换系数为零以及哪些非零。可以分别用非零映射中的值一(1)和零(0)来指示非零系数和零系数。例如,非零映射606包括与系数608对应的笛卡尔位置(0,0)处的非零607以及与系数610对应的笛卡尔位置(2,0)处的零608。在一些示例中,对量化变换块604编码可以包括生成和编码块结束映射622。块结束映射指示量化变换块604的非零量化变换系数相对于给定扫描顺序是否是最后一个非零系数。如果非零系数不是变换块中的最后一个非零系数,则可以用块结束映射中的二进制比特0(零)来指示该非零系数。另一方面,如果非零系数是变换块中的最后一个非零系数,则可以用块结束映射中的二进制值1(一)来指示该非零系数。例如,当与扫描位置11对应的量化变换系数(即,最后一个非零量化变换系数628)是量化变换块604的最后一个非零系数时,用1(一)的块结束值624来指示该非零系数;用零指示所有其他非零变换系数。在一些示例中,对量化变换块604编码可以包括生成和编码符号映射626。符号映射626指示量化变换块604的哪些非零量化变换系数具有正值,哪些量化变换系数具有负值。符号映射中不需要指示为零的变换系数。符号映射626示出了量化变换块604的符号映射。在符号映射中,负量化变换系数可以由-1表示,正量化变换系数可以由1表示。图7是根据本公开的实施方式的系数令牌树700的图,该系数令牌树700可以用于将块熵编码成视频比特流。系数令牌树700被称为二叉树,因为在该树的每一个节点处,必须采用(即,遍历)两个分支中的一个。系数令牌树700包括分别与被标记为a和b的节点对应的根节点701和节点703。如上参考图6所描述,当针对块检测到块结束(eob)令牌时,当前块中的系数的编码可以终止,并且可以推断该块中的其余系数为零。这样,eob位置的编码可以是视频编码系统中的系数的必要部分。在一些视频编码系统中,确定当前令牌是否等于当前块的eob令牌的二元判定在非零系数被解码之后立即被编码或在第一扫描位置(dc)处被编码。在示例中,对于尺寸为m×n的变换块(其中m表示变换块中的列数,n表示变换块中的行数),当前令牌是否等于eob令牌的最大编码次数等于m×n。m和n可以取值,例如值2、4、8、16、32和64。如下文所描述,二元判定对应于系数令牌树700中从根节点701移动到节点703的判定所对应的“1”比特的编码。本文中,“编码比特”可以意味着输出或生成码字中表示变换系数的被编码的比特。类似地,“解码比特”可以意味着读取(例如从编码比特流中读取)与被解码的量化变换系数对应的码字的比特,使得该比特对应于系数令牌树中被遍历的分支。使用系数令牌树700,为量化变换块(例如,图6的量化变换块604)的量化系数(例如,图6的系数608、610)生成二进制数字串。在一个示例中,n×n块(例如,量化变换块604)中的量化系数按照规定的扫描顺序(例如,图6的扫描顺序602)被组织成1d(一维)阵列(此处为阵列u)。n可以是4、8、16、32或任何其他值。一维阵列的第i位置处的量化系数可以被称为u[i],其中i=0,...,n*n-1。u[i],...,u[n*n-1]中的最后一串零的起始位置可以被表示为eob。在u[n*n-1]不为零的情况下,eob可以被设定为值n*n。也就是说,如果1d阵列u的最后一个系数不为零,则eob可以被设定为值n*n。在使用图6的示例的情况下,1d阵列u可以具有条目u[]=[-6,0,-1,0,2,4,1,0,0,1,0,-1,0,0,0,0]。u[i]中的每一处的值是量化变换系数。1d阵列u的量化变换系数在本文中也可以被简称为“系数”或“变换系数”。位置i=0处的系数(即u[0]=-6)对应于dc系数。在该示例中,eob等于12,因为在1d阵列u的位置12处的零系数之后没有非零系数。对于i=0至n*n-1,为了编码和解码系数u[i],...,u[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_token(零令牌)1one_token(一令牌)2two_token(二令牌)3three_token(三令牌)4four_token(四令牌)5dct_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)在示例中,量化系数值被采用为带符号的12位整数。为了表示量化系数值,12位带符号的值的范围可以被分为11个令牌(表i中的令牌0至10)加上块结束令牌(eob_token)。为了生成表示量化系数值的令牌,可以遍历系数令牌树700。然后可以由编码器将遍历树的结果(即比特串)编码成比特流(例如图4的比特流420),如关于图4的熵编码阶段408所描述的那样。系数令牌树700包括令牌eob_token(令牌702)、zero_token(令牌704)、one_token(令牌706)、two_token(令牌708)、three_token(令牌710)、four_token(令牌712)、cat1(作为表i中的dct_val_cat1的令牌714)、cat2(作为表i中的dct_val_cat2的令牌716)、cat3(作为表i中的dct_val_cat3的令牌718)、cat4(作为表i中的dct_val_cat4的令牌720)、cat5(作为表1中的dct_val_cat5的令牌722)以及cat6(作为表i中的dct_val_cat6的令牌724)。可以看出,系数令牌树将单个量化系数值映射到单个令牌,例如令牌704、706、708、710和712中的一个。其他令牌(例如令牌714、716、718、720、722和724)表示量化系数值的范围。例如,值为37的量化变换系数可以由令牌dct_val_cat5(图7中的令牌722)表示。令牌的基值被定义为其范围内的最小数字。例如,令牌720的基值是19。熵编码为每一个量化系数标识令牌,如果该令牌表示一个范围,则可以通过从量化系数中减去基值来形成残差。例如,可以通过在编码的视频比特流中包括令牌720和残差值1(即,20减19)来表示值为20的量化变换系数,以允许解码器重建原始量化变换系数。块结束令牌(即令牌702)发出信号,表示在变换的块数据中不再有非零量化系数。为了通过使用二进制算术编码引擎(例如通过图4的熵编码阶段408)对令牌t[i]进行编码或解码,可以使用系数令牌树700。从根节点701(即被标记为a的节点)处开始遍历系数令牌树700。遍历系数令牌树生成了比特串(码字),将使用例如二进制算术编码将该比特串编码到比特流中。比特串是当前系数(即,被编码的量化变换系数)的表示。如果当前系数为零,并且其余变换系数不再有非零值,则将令牌702(即,eob_token)添加到比特流中。这是例如图6的扫描顺序位置12处的变换系数的情况。另一方面,如果当前系数非零,或者如果在当前块的任何其余系数中存在非零值,则将“1”比特添加到码字,并且遍历传递到节点703(即,被标记为b的节点)。在节点b处,测试当前系数,来看它是否等于零。如果等于零,则采用左侧分支,使得表示值zero_token和比特“0”的令牌704被添加到码字。如果不等于零,则将比特“1”添加到码字,并且遍历传递到节点c。在节点c处,测试当前系数,来看它是否大于1。如果当前系数等于1,则采用左侧分支,并将表示值one_token的令牌706添加到比特流中(即,将“0”比特添加到码字中)。如果当前系数大于1,则遍历传递到节点d,以检查与值4比较的当前系数的值。如果当前系数小于或等于4,则遍历传递到节点e,并且将“0”比特添加到码字。在节点e处,可以进行等于值“2”的测试。如果为真,则将表示值“2”的令牌706添加到比特流中(即,比特“0”被添加到码字中)。否则,在节点f处,根据值“3”或值“4”测试当前系数,并且适当地将令牌710(即,将比特“0”添加到码字)或令牌712(即,将比特“1”添加到码字)添加到比特流;以此类推。本质上,当遍历到左子节点时,将“0”比特添加到码字,而当遍历到右子节点时,将“1”比特添加到码字。当解码来自压缩比特流的码字时,由解码器执行类似的过程。解码器从比特流中读取比特。如果该比特是“1”,则系数令牌树向右遍历,如果该比特是“0”,则树向左遍历。然后,解码器读取下一个比特并重复该过程,直到树的遍历到达叶节点(即令牌)。例如,为了编码令牌t[i]=three_token,从根节点(即根节点701)开始,编码二进制字符串111010。作为另一个示例,解码码字11100产生令牌two_token。注意,“0”和“1”比特与左右子节点之间的对应关系仅仅是用于描述编码和解码过程的约定。在一些实施方式中,可以使用不同的约定,例如,其中“1”对应于左子节点,“0”对应于右子节点。只要编码器和解码器采用相同的约定,本文中所述的过程就适用。由于eob_token只有在非零系数之后才有可能,所以当u[i-1]为零时(即,当1d阵列u的位置i-1处的量化变换系数等于零时),解码器可以推断第一比特一定为1。第一比特必须是1,因为在遍历树时,对于在零变换系数(例如,图6的之字形扫描顺序位置1处的变换系数)之后的变换系数(例如,图6的之字形扫描顺序位置2处的变换系数),遍历必须从根节点701移动到节点703。这样,二进制标志checkeob可以用于指导编码器和解码器跳过系数令牌树700中从根节点起的第一比特的编码和解码。实际上,当二进制标志checkeob为0时(即,指示根节点不应被检查),跳过系数令牌树700的根节点701,并且节点703成为系数令牌树700中待被访问以遍历的第一个节点。也就是说,当跳过根节点701时,编码器可以跳过编码,解码器可以跳过解码,并且可以推断编码串的第一比特(即,二进制比特“1”)。在开始编码或解码块时,二进制标志checkeob可以被初始化为1(即,指示根节点应该被检查)。以下步骤示出了用于解码n×n块中量化变换系数的示例过程。在步骤1,二进制标志checkeob被设定为零(即,checkeob=0),并且索引i也被设定为零(即,i=0)。在步骤2,通过使用以下过程中的任一种来解码令牌t[i]:(1)如果二进制标志checkeob等于1,则使用全系数令牌树(即,在系数令牌树700的根节点701处开始),或者(2)如果checkeob等于0,则跳过eob_token使用部分树(例如,在节点703处开始)。在步骤3,如果令牌t[i]=eob_token,则量化变换系数u[i],...,u[n*n-1]都为零,并且解码过程终止;否则,如果需要(即,当t[i]不等于zero_token时),可以解码额外的比特,并重建u[i]。在步骤4,如果u[i]等于0,则二进制标志checkeob被设定为1,否则checkeob被设定为0。也就是说,checkeob可以被设定为值(u[i]!=0)。在步骤5,索引i递增(即i=i+1)。在步骤6,重复步骤2至5,直到所有量化变换系数都已经被解码(即,直到索引i=n*n)或者直到eob_token被解码。图8是根据本公开的实施方式的用于解码量化变换系数的变换块的过程800的流程图。可以由诸如解码器500的解码器来执行过程800。过程800可以被实施为例如软件程序,该软件程序可以由诸如接收站106的计算设备执行。过程800可以全部或部分地由解码器500的熵解码阶段502执行。例如,过程800的实施方式可以通过如下方式执行:将指令存储在存储器(诸如接收站106的存储器204)中,以由诸如cpu202的处理器来执行。可以使用专用硬件或固件来实施过程800。一些计算设备可以具有多个存储器、多个处理器或者多个存储器和多个处理器。可以使用不同的处理器、存储器或处理器和存储器来分布过程800的步骤或操作。单数形式的术语“处理器”或“存储器”的使用也涵盖可以用于执行所列举的步骤中的一些或全部步骤的具有一个处理器或一个存储器的计算设备以及具有多个处理器或多个存储器的设备。过程800使用嵌入在第一组量化变换系数(即,第一系数组)中的信息来解码其他量化变换系数。可以将量化变换系数从编码比特流(例如图5的压缩比特流420)中解码。其他量化变换系数可以被称为第二系数组。第二系数组的变换系数可以被称为后续量化变换系数,因为其以扫描顺序在第一系数组的系数之后。嵌入的信息是关于第二系数组中的eob位置的信息。在使用嵌入的信息的情况下,对用于后续变换系数的码字(即令牌)的解码可以跳过对eob位置的解码。如果跳过对变换系数的eob位置的检查,则可以假设(即推断)表示变换系数的码字的第一比特为“1”比特。在802,过程800从编码比特流中解码量化变换系数的预定数量的系数。预定数量的系数可以是如下文关于图10所述的划分值。可以将预定数量的系数在编码比特流中从编码器通信到解码器。预定数量的系数(因此还有划分值)可以是编码器和解码器已知的标准值。预定数量的系数可以取决于变换块的尺寸。预定数量的系数可以基于变换块中非零系数的总数。在804,过程800确定预定数量的系数的值。在示例中,该值可以是预定数量的系数的奇偶性。奇偶性指示预定数量的系数的总和是偶数还是奇数。在示例中,该总和可以是绝对总和(即,预定数量的系数的绝对值的总和)。如下所述,可以单独或组合地使用任何数量的准则以及该值来确定关于eob位置的信息是否被嵌入预定数量的系数中和/或是否使用这种信息。在806,过程800从编码比特流中解码后续量化变换系数。过程800可以通过从编码比特流中读取比特并遍历系数令牌树来解码后续量化变换系数,如上面关于图7的系数令牌树700所描述的那样。当解码用于后续量化变换系数的码字时,码字的每一个比特读取导致从节点起遍历一个分支或另一个分支。例如,11100的码字产生twotoken(即令牌708)。解码后续量化变换系数可以使用该值来确定在系数令牌树中是在根处开始遍历系数令牌树还是在另一个节点处开始遍历系数令牌树。例如,如果准则指示系数令牌树的遍历不是在根节点处开始,则过程800可以在另一个节点(例如图7的节点703)处开始遍历。这样,第一比特“1”可以被暗示用于码字,并且从编码比特流中读取的11100的码字可以被暗示为码字111100。这样,编码比特流中的码字11100对应于dct_cal_cat1令牌(即令牌714)。在示例中,过程800可以包括,在后续量化变换系数(例如,系数u[i])是非零系数的条件下,解码紧接在后续量化变换系数之后的系数(即,系数u[i+1]),使得解码使用后续量化变换系数的位置(例如,如下面关于图9的934所描述的那样)以及预定数量的系数的奇偶性来确定在系数令牌树中是在根节点处开始遍历系数令牌树还是在另一个节点处开始遍历系数令牌树。后续量化变换系数的位置可以是非零系数列表中在预定数量的系数之后的后续量化变换系数的位置。在示例中,如果不满足预定数量的系数的附加准则(例如,一个或多个准则),则过程800不使用所嵌入的关于eob位置的信息。例如,如果总和没有超过值阈值,则过程800不暗示用于预定数量的系数之后的任何变换系数的码字的第一比特(即,1比特)。这样,为了确定在系数令牌树中是在根节点处开始遍历系数令牌树还是在另一个节点处开始遍历系数令牌树,对后续量化变换系数的解码还使用预定数量的系数总和是否超过值阈值。在示例中,值阈值可以由编码器编码,并以适当的标头(例如,块、段、帧或任何其他标头)被通信给解码器。在另一个示例中,值阈值可以是编码器和解码器已知的标准值。在示例中,如果预定数量的系数的第一非零系数与预定数量的系数的最后一个非零系数之间的距离没有超过距离阈值,则过程800不使用所嵌入的关于eob位置的信息。例如,参考图6,如果预定数量的系数的数量是9并且距离阈值被设定为8,则过程800将不使用嵌入的信息,并且将使用全系数令牌树解码变换系数u[9]…u[15](即,过程800不暗示用于任何变换系数u[9]...u[15]的1比特)。过程800将不会暗示1比特,因为第一非零系数在位置0处(即,u[0]=-6),并且前9个系数中的最后一个非零系数在位置6处(即,u[6]=1)。这两个位置之间的距离(即,6-0=0)不超过阈值距离8。在示例中,距离阈值可以由编码器编码,并以适当的标头(例如,块、段、帧或任何其他标头)被通信给解码器。在另一个示例中,距离阈值可以是编码器和解码器已知的标准值。这样,为了确定在系数令牌树中是在根节点处开始遍历系数令牌树还是在另一个节点处开始遍历系数令牌树,对后续量化变换系数的解码还使用预定数量的系数的第一非零系数与预定数量的系数的最后一个非零系数之间的距离是否超过距离阈值。在示例中,过程800在预定数量的系数中不包括dc系数。dc系数可以是编码比特流中的解码(或可用)的第一变换系数,并且对应于变换块的位置(0,0)处的变换系数,或者等效地,对应于上述1d阵列u中的位置0处的变换系数。这样,过程800使用dc系数来确定eob位置的嵌入。图9是根据本公开的实施方式的用于对量化变换系数的变换块解码的过程900的流程图。可以在诸如解码器500的解码器中实施过程900。可以由接收站实施过程900。过程900可以被实施为例如可以由计算设备执行的软件程序。该软件程序可以包括机器可读指令,这些指令可以被存储在诸如存储器204或次存储装置214的存储器中,并且可以由诸如cpu202的处理器来执行,以使计算设备执行过程900。可以使用专用硬件或固件来实施过程900。一些计算设备可以具有多个存储器、多个处理器或多个存储器和多个处理器。可以使用不同的处理器、存储器或处理器和存储器来分布过程900的步骤或操作。单数形式的术语“处理器”或“存储器”的使用也涵盖可以用于执行所列举的步骤中的一些或全部步骤的具有一个处理器或一个存储器的计算设备以及具有多个处理器或多个存储器的设备。为了解码按照规定的扫描顺序(例如,前向之字形扫描顺序,如图6的扫描顺序602)的量化系数u[0],...,u[m*n-1]的m×n块,过程900可以执行以下示例性步骤。在下面的步骤中,如参考图8所述,k-1可以是量化变换系数的预定数量的系数;usum可以是预定数量的系数的总和;t可以是指示预定数量的系数中的非零系数的最小所需数量的数量阈值;nnzsum可以是预定数量的系数中的非零系数的数量。t(以及本文中所描述的任何其他附加准则)可以被用作启用或禁用本文中所描述的嵌入eob位置的机制。例如,当变换系数的数量稀少(即,小于数量阈值t)时,解码器和编码器都可以禁用(即,绕过)嵌入。embedeobpos可以是指示过程900是否可以暗示待解码的后续变换系数中的一些后续变换系数为1比特的标志。checkeob标志在处理系数u[i]时被设定,并且在解码系数u[i+1](即下一个系数)时被使用。过程900使用checkeob标志来确定其在解码u[i+1]时是否可以推断(不一定将是)1比特。如果变换系数是非零系数,则标志eobparity可以指示其在非零系数列表中的位置是偶数还是奇数。例如,在系数列表6、0、1、2、0、0、5和7中,非零系数6、2和7将具有相同的eobparity(例如奇数),并且非零系数1和5将具有相反的eobparity(例如偶数)。在另一个示例中,对于非零变换系数,eobparity可以指示其在非零系数列表中的位置(不包括预定数量的系数)是偶数还是奇数。在又一个示例中,对于非零变换系数,eobparity可以指示其扫描位置(即,所有系数列表中的位置)是偶数还是奇数。这样,在902,过程900初始化计数器i=0,并设定usum=0,nnzsum=0,embedeobpos=0和checkeob=1。如上所述,checkeob指示下一个待解码的令牌是否可以是eob_token(即,当checkeob=1时)或者不是eob_token(即,当checkeob=0时)。在904,如果checkeob等于0(即,如果未设定checkeob),则在908,过程900在跳过eob_token的情况下解码令牌t[i]。例如,解码可以在图7的系数令牌树700的节点703处开始。如果checkeob等于1(即,如果设定了checkeob),则在906,过程900用全系数令牌树解码令牌t[i]。例如,解码可以在图7的系数令牌树700的根节点701处开始。在910,如果解码的令牌t[i]是eob_token,则在912,过程900将量化变换系数u[i],...,u[m*n-1]全部设定为0,并在914终止解码过程。否则,过程900行进到916。在916,如果需要,过程900基于tok[i]的值解码额外的比特。例如,如果tok[i]!=zero_token(即,对应于图7的令牌704),则过程900读取附加比特,直到从比特流中读取令牌。在918,过程900重建量化变换系数u[i]。只要计数器i小于k-1,则过程900仍解码预定数量的系数中的系数。这样,在920,如果i<k-1,则在922,过程900以usum(即,usum=usum+abs(u[i]))累计系数的总和(注意,在图9中使用绝对和),并且,如果u[i]是非零系数,则nnzsum也递增。该过程然后可以行进到940,在940,计数器i递增。在942,如果eob_token已经被解码或者如果i等于m*n(即,所有变换系数已经被解码),则过程在914终止;否则,过程返回到904,并且对下一个系数重复该过程。在924,如果i=k-2,即,过程900现在处理在预定数量的系数之后的第一变换系数。另外,如果满足预定数量的系数的数量的附加准则,则过程900将在对变换块的其余变换系数的解码中使用预定数量的系数中的嵌入的信息。在过程900中,所使用的附加准则是,预定数量的系数中的非零系数的数量超过距离阈值t(即,nnzsum>t)。如上所述,可以使用附加或其他准则。如果要使用嵌入的信息,则在926,过程900通过设定标志embedeobpos=1来指示。过程900还设定uparity变量,该uparity变量用于确定可以将哪个变换系数推断为1比特。可以通过用二进制1比特对总和usum进行位和运算(bit-anding)来计算uparity(例如uparity=usum&0x1)。过程900还初始化eobparity=0。该过程然后行进到940。在928,过程900测试是否i>=k-1。如果是i>=k-1,则过程900当前正在解码其余的(即,后续的)变换系数。在930,过程900测试解码的变换系数u[i]是否是零量化变换系数。如果是零量化变换系数,则在932,过程900将checkeob设定为0,并行进到940。也就是说,因为刚解码的系数u[i]是零系数,并且因为我们知道仍有非零系数待被解码(否则,过程900将从910行进到912并在914终止),所以在解码下一个变换系数时,过程可以跳过eob_token检查(即根节点701)。如果u[i]不为零,则过程900行进到934。在934,如果解码的变换系数u[i]不为零(即u[i]!=0)并且过程900正在使用嵌入的信息(即,embedeofpos==1),则过程900将checkeob设定为(eobparity==uparity)(在936)。对于待解码的下一个系数,如果当前非零系数的eobparity与uparity(即预定数量的系数的奇偶性)相同,则在eob_token(例如根节点701)处开始解码下一个变换系数,因为下一个系数可以是零系数。如果eobparity不等于uparity,则在解码下一个变换系数时可以跳过eob检查。在936,过程900还将下一个非零系数的eobparity设定为与当前系数的eobparity的相反值(即,eobparity=1-eobparity)。在934,如果解码的变换系数u[i]为零或者过程900不使用嵌入的信息(即embedeofpos!=1),则过程900设定(在938)checkeob=1。也就是说,过程900在根节点701处开始解码下一个变换系数。也就是说,过程900不推断表示待解码的下一个变换系数的码字的第一比特为1比特。从938和936,过程900行进到940。k和数字阈值t可以是任何值。例如,k可以是16,t可以是7。在另一个示例中,k可以是6,t可以是2。图10是根据本公开的实施方式的用于编码量化变换系数的变换块的过程1000的流程图。过程1000将关于第二系数组的变换系数的eob位置的信息嵌入到第一系数组的变换系数中。解码器可以使用嵌入的信息(如参考图8至图9所描述的嵌入的信息)来推断第二系数组的变换系数的eob位置。过程1000将变换块分成至少2组:第一系数组和第二系数组。在使用第一系数组的值的情况下,过程1000可以跳过对第二系数组的变换系数中的一些变换系数的二元判定的编码。被跳过的二元判定可以对应于跳过与从图7的根节点701到节点703的遍历对应的“1”比特的编码。可以在诸如图4的编码器400的编码器中实施过程1000。过程1000可以被实施为例如软件程序,该软件程序可以由诸如发射站102的计算设备执行。该软件程序可以包括机器可读指令,这些指令可以被存储在诸如存储器204或次存储装置214的存储器中,并且可以由诸如cpu202的处理器执行,以使计算设备执行过程1000。在至少一些实施方式中,过程1000可以全部或部分地由图4的编码器400的熵编码阶段408来执行。在1002,过程1000将量化变换系数分成至少第一系数组和第二系数组。图11a是根据本公开的实施方式将量化变换系数分成至少第一系数组和第二系数组的示例900。该划分可以使用划分值k。以m×n变换块为例,在给定了规定的扫描顺序(例如图6的扫描顺序602)的情况下,m×n块中的变换系数可以被排列成长度m×n的阵列(如上面关于1d阵列u所描述的那样)。让u[i]表示扫描位置i处的系数,其中i=0,...,m×n-1。示例1100示出了阵列u[0],...,u[m*n-1]被分成两个连续的段(例如,第一系数组1102和第二系数组1104)。第一系数组1102(即第一段)由系数u[0],...,u[k-2]组成,并且第二系数组1104(即第二段)由变换系数u[k-1],...,u[m*n-1]组成。在1004,过程1000确定第一系数组的值。在示例中,该值可以是第一系数组的奇偶性。该奇偶性指示第一系数组的系数的总和是偶数还是奇数。在示例中,该总和可以是第一系数组的系数的绝对总和。也就是说,该总和可以是第一系数组的系数的绝对值的总和。在1006,过程1000在编码比特流(例如图4的压缩比特流420)中编码指示用于第二系数组的变换系数的块结束(eob)的比特。在示例中,在编码第二系数组的变换系数时,过程1000可以使用该值来确定是通过在一个节点(例如根节点701)处开始遍历系数令牌树(例如图7的系数令牌树700)还是通过在另一个节点(例如节点703)处开始遍历系数令牌树来编码变换系数。在一些实施方式中,过程1000可以包括使第一系数组的奇偶性与第二系数组的非零系数的数量相符。通过编码器使奇偶性和非零系数的数量相符使得解码器能够通过利用诸如以下的规则来推断关于一些变换系数的eob位置的信息:(1)如果第一系数组中的变换系数的总和是奇数,则可以假设第二段中的非零系数的数量是奇数;以及(2)如果该总和是偶数,则可以假设第二系数组中的非零系数的数量是偶数。在示例中,在奇偶性是偶数并且非零系数的数量是奇数的条件下,或者在奇偶性是奇数并且非零系数的数量是偶数的条件下,使第一系数组的奇偶性和第二系数组的非零系数的数量相符可以包括调整第一系数组的量化变换系数中的至少一个量化变换系数,使得奇偶性和非零系数的数量匹配。调整量化系数中的至少一个量化系数可以包括将总奇数值(例如,1、3、5等)添加到第一系数组的变换系数。例如,在假设第一系数组包含系数u[0],...,u[k-2]的情况下,则u[j](其中j<k-2)可以被设定为u[j]=u[j]+1。作为另一个示例,u[j]和u[m](其中j和m小于k-2)可以被设定为u[j]=u[j]+1且u[m]=u[m]+2。在这种情况下,添加到第一系数组的变换系数的总奇数值是2+1=3(即奇数值)。在示例中,可以将奇数仅添加到一个变换系数。所述一个变换系数可以是第一系数组的最后一个变换系数(即,u[k-1])。可以随机选择所述一个变换系数。可以基于改变一个系数的速率失真成本来选择所述一个变换系数。在示例中,在奇偶性是偶数并且非零系数的数量是奇数的条件下,或者在奇偶性是奇数并且非零系数的数量是偶数的条件下,使第一系数组的奇偶性和第二系数组的非零系数的数量相符可以包括将第二系数组的非零系数中的至少一个非零系数设定为零,使得奇偶性和非零系数的数量匹配。在示例中,将第二系数组的非零系数中的至少一个非零系数设定为零可以包括将第二系数组的非零系数的奇数数量设定为零。可以基于进行改变的速率失真成本来选择将第二系数的哪个(哪些)变换系数设定为零。在过程1000的示例中,基于该值对指示用于第二系数组的变换系数的eob的比特进行编码可以包括:在第二系数组中的变换系数的位置匹配奇偶性的条件下,在编码比特流中编码包括指示eob的比特的变换系数;以及在第二系数组中的变换系数的位置不匹配奇偶性的条件下,在编码比特流中编码不包括指示eob的比特的变换系数。在过程1000的示例中,量化变换系数的dc系数未被包括在第一系数组中,并且dc系数未被包括在第二系数组中。例如,量化变换系数可以被分成至少三个组,使得其中的一个组包括dc系数。在这种情况下,第一系数组可以是在包含dc系数的组之后的第一连续组。图11b示出了示例。图11b是根据本公开的实施方式将量化变换系数分成三个连续组的示例950。示例950包括三个连续的组,即组1152、组1154和组1156。如上所示,u[0]是dc系数。这样,第一组(即,组1152)包括dc系数。虽然第一组被示出为仅包括一个系数,但其可以包括更多系数。在示例950的情况下,组1154和组1156可以分别是参考图10描述的第一系数组和第二系数组。从第一组中排除dc系数可以避免由于dc值的潜在变化而对重建图像的视觉质量产生的负面影响(例如,如下面关于图12的1210所述的那样)。图12是根据本公开的实施方式的用于编码量化变换系数的变换块的过程的流程图。可以由编码器实施过程1200,例如在图4的编码器400的熵编码阶段408中实施。过程1200可以被实施为例如可以由计算设备执行的软件程序。该软件程序可以包括机器可读指令,这些指令可以被存储在诸如存储器204或次存储装置214的存储器中,并且可以由诸如cpu202的处理器执行,以使计算设备执行过程1200。可以使用专用硬件或固件来实施过程1200。一些计算设备可以具有多个存储器、多个处理器或者多个存储器和多个处理器。可以使用不同的处理器、存储器或者处理器和存储器来分布过程1200的步骤或操作。单数形式的术语“处理器”或“存储器”的使用也涵盖可以用于执行所列举的步骤中的一些或全部步骤的具有一个处理器或一个存储器的计算设备以及具有多个处理器或多个存储器的设备。过程1200将量化变换系数分成两组。该划分可以通过选择划分值k来完成。第一系数组包括系数u[0],...,[k-2],并且第二系数组包括系数u[k-1],...,u[m*n-1]。基于第一系数组的系数的准则,过程1200确定是否对第二系数组的变换系数中的至少一些变换系数的eob位置确定进行编码。在下面的步骤中,k-1、usum、nnzsum、uparity、t、checkeob、embedeobpos和eobparity可以如参考图9所描述的那样。nnzsum2是第二系数组中的非零系数的数量。在给定m×n变换块的情况下,过程1200在1202根据规定的扫描顺序生成量化变换系数u[0],...,u[m*n-1]的1d阵列u,如上文参考图6所述。在1204,过程1200计算第一系数组的系数的总和usum(例如,),计算第一系数组中的非零系数的数量nnzsum(例如,),并计算第二系数组中的非零系数的数量nnzsum2(例如,)。在1206,过程1200计算第一系数组的奇偶性uparity。例如,可以通过将总和usum和二进制1位进行位和运算来计算uparity(例如,uparity=usum&0x1)。在1208,过程1200确定非零系数的数量nnzsum是否大于数量阈值t(即nnzsum>t),以及是否存在奇偶性不匹配。如果是,则过程1200执行1210或1212中的至少一个(以使第一系数组的奇偶性和第二系数组的非零系数的数量相符,如参考图10所描述的那样),然后行进到1214;否则,过程1200行进到1214。过程1200执行1210和1212中的至少一个,以便使第一系数组的奇偶性与第二系数组的非零系数的数量相符。如果非零系数的数量nnzsum不超过数量阈值t,则过程1200在编码第二系数组的系数中的至少一些系数时不使用嵌入在第一系数组中的信息。也就是说,过程1200不使用第一系数组的值来跳过对与用于第二系数组的系数的eob位置相关的确定的编码(例如,不遍历系数令牌树700的根节点)。在1210,过程1200可以将第一组的系数中的一个系数增加1(例如,对于i=0,…,k-2,u[i]=u[i]+1)。在1212,过程1200将第二系数组的非零变换系数中的一个系数的值变为零(例如,对于j=k-1,…,m*n-1且u[j]!=0,u[j]=0)。在1214,过程1200在u[0],...,u[m*n-1]中找到最后一个非零系数u[i*],并设定eob=i*+1。步骤1216、1218、1224、1226、1228、1230、1232、1234、1238、1236、1240、1242和1244可以分别如关于步骤902、904、920、922、924、926、928、930、934、932、936、938和940所描述的那样。在步骤1220,过程1200使用全系数令牌树对令牌t[i]进行编码。也就是说,对令牌t[i]进行编码的过程1200可以在根节点701处开始遍历图7的系数令牌树700。例如,为了编码“4”令牌(即,four_token),在步骤1220,过程1200使用二进制算术编码来编码码字111011。另一方面,在步骤1222,过程1200通过跳过eob_token对令牌t[i]进行编码。也就是说,过程1200可以通过在除根节点701之外的节点处开始遍历来遍历图7的系数令牌树700。另一个节点可以是节点703。例如,为了编码four_token,在步骤1220,过程1200使用二进制算术编码来编码码字11011。在1246,过程1200检查是否已经处理了所有的非零系数(即i==eob)。如果不是,则从步骤1218开始对下一个变换系数重复该过程。如果是,则在步骤1248,如果eob变量的值小于m*n(即eob<m*n),则过程1200编码eob_token(即,图7的令牌702)。也就是说,如果最后一个非零变换系数不是扫描顺序中的系数,则过程1200编码eob_token。一些视频编码系统使用被称为多符号位隐藏(msbh)的技术。例如,msbh可以将一组系数中的第一个有效变换系数的符号嵌入该组系数中所有系数的绝对值总和的奇偶性中。这样,msbh基于奇偶性不对语法元素(即,与符号信息对应的语法元素)进行编码。本文中所述的技术至少在以下方面不同于符号位隐藏。尽管msbh隐藏了特定的语法元素(即非零系数的符号),但是根据本公开的实施方式嵌入了与eob确定相关的信息,而不是嵌入了与语法元素本身相关的信息。符号数据可以被编码为原始比特(即,不使用上下文和/或不使用二进制算术编码),而eob确定的编码是基于上下文的。因此,eob确定的编码比符号位的编码在计算上更昂贵。因此,尽管msbn可能不改变变换块中的上下文编码二进制值的数量,但根据本公开的实施方式减少了上下文编码二进制值的数量(并且对于大的变换块来说也基本是这样)。此外,msbh的概念可能不能被直接应用于隐藏eob确定,因为eob的大范围可能使隐藏的成本不切实际。此外,本文中所述的技术利用并被设计成与用于编码和解码量化系数的令牌树的结构一起工作。在量化被应用于变换块的系数的情况下,可以期望如本文中所述地在系数值中嵌入eob位置。这样,可以在无损编码模式下禁用eob位置的嵌入。uparity携带关于其余量化系数的信息,例如其余量化系数中的非零系数的数量是偶数还是奇数。这样,该信息(即奇偶性信息)可以用于改进对某一位置的系数是零还是非零的确定的编码。例如,在给定图7的系数令牌树700的情况下,为了对令牌进行编码和解码,除了传统的信息例如系数的位置、变换尺寸和类型、颜色分量(亮度或色度)和/或先前解码历史之外,还可以通过使用uparity来推导出上下文。在实施方式中,图片标头中的标志(例如,名称为enable_embedded_eobpos的标志)可以用于启用或禁用在与标头相关联的图片中嵌入eob位置。在实施方式中,在默认情况下启用eob位置的嵌入。因此,如果标头中不存在该标志,则在默认情况下启用eob位置的嵌入(如前所述,无损编码模式下除外)。可以理解,本文中所述的技术可以用于嵌入关于块结束位置的不同信息。例如,可以容易地修改本文中所述的技术,以将eob系数是在第二系数组内的偶数位置处还是奇数位置处嵌入到第一系数组的系数中。下表ii示出了在根据本公开将eob位置嵌入系数值的实施方式中并入标准编解码器。表ii的列“embedeob”的“*”指示“*”左边的对应代码段与在系数值中嵌入eob位置有关。上面描述的编码和解码方面说明了一些编码和解码技术。然而,应当理解,如权利要求中使用的那些术语一样,编码和解码可以意味着数据的压缩、解压缩、变换或者任何其他处理或改变。本文中所使用的词语“示例”或“实施方式”意指用作示例、实例或说明。本文中被描述为“示例”或“实施方式”的任何方面或设计不一定被解释为优选于或优于其他方面或设计。相反,使用词语“示例”或“实施方式”是为了以具体的方式呈现概念。如在本申请中所使用的,术语“或”旨在意指包含性的“或”而不是排他性的“或”。也就是说,除非另有说明,或者从上下文可以清楚,否则“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页1 2 3 
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1