用于在视频压缩中的熵代码化的概率的混合的制作方法


用于在视频压缩中的熵代码化的概率的混合
1.分案说明
2.本技术属于申请日为2018年5月1日的中国发明专利申请201880035871.3的分案申请。
技术领域
3.本公开涉及视频压缩,并且更具体来说,涉及在视频压缩中的熵代码化的概率的混合。


背景技术:



4.数字视频流可以使用一系列帧或静止图像来表示视频。数字视频可用于各种应用,包括例如视频会议、高清视频娱乐、视频广告或用户生成的视频的共享。数字视频流可以包含大量数据,并且消耗用于处理、传输或存储视频数据的计算设备的大量计算或通信资源。已经提出了各种方法来减少视频流中的数据量,包括压缩和其他编码技术。
5.可通过将帧或图像分解成基于参考帧的一个或多个预测块来预测的块来执行基于运动估计和补偿的编码。块和预测块之间的差异(即,残余误差)被压缩并编码在比特流中。解码器使用差异和参考帧来重构帧或图像。


技术实现要素:



6.一方面是一种用于对符号序列进行熵代码化的方法,该方法包括:在多个符号中的一位置处对于至少一个符号选择包括第一模型和第二模型的模型;使用第一模型和第二模型确定混合概率;并使用混合概率代码化符号。确定符号的混合概率包括:使用第一模型确定用于代码化符号的第一条件概率;使用第二模型确定用于代码化符号的第二条件概率;以及,使用第一条件概率和第二条件概率确定用于代码化符号的混合概率。第一条件概率是给定序列的、直到该位置的子序列的情况下的符号的条件概率。第二条件概率是在给定该子序列的情况下的符号的条件概率。
7.另一方面是一种用于对量化变换块进行熵代码化的装置,该装置包括存储器和处理器。存储器包括指令,其可由处理器执行以:选择包括第一概率分布和第二概率分布的概率分布,以用于对指示量化变换块的量化变换系数的令牌进行代码化;使用第一概率分布和第二概率分布确定用于代码化令牌的混合概率;并使用混合概率代码化令牌。令牌是从令牌字母表中选择的。第一概率分布包括令牌字母表中的令牌的第一概率值。第二概率分布包括令牌字母表中的令牌的第二概率值。
8.另一个方面是一种用于对符号序列进行熵解码的装置,包括存储器和处理器。存储器包括指令,其可由处理器执行以选择包括第一模型和第二模型的模型,使用第一模型和第二模型对于在多个符号的一位置处的一符号确定混合概率,并使用混合概率从压缩比特流解码符号。
9.在以下对实施例、所附权利要求书和附图的详细描述中公开了本公开的这些和其
他方面。
附图说明
10.这里的描述参考附图,其中,贯穿若干视图,相似的附图标记指代相似的部分。
11.图1是视频编码和解码系统的示意图。
12.图2是可以实现发送站或接收站的计算设备的示例的框图。
13.图3是待编码并随后解码的视频流的图。
14.图4是根据本公开的实施方式的编码器的框图。
15.图5是根据本公开的实施方式的解码器的框图。
16.图6是图示根据本发明的实施方式的量化变换系数的图。
17.图7是根据本发明的实施方式的、可用于将块熵代码化成视频比特流的系数令牌树的图。
18.图8是根据本公开的实施方式的、用于对量化变换系数进行二进制化的树的示例的图。
19.图9是根据本发明的实施方式的、用于对符号序列进行编码的过程的流程图。
20.图10是根据本发明的实施方式的、用于解码符号序列的过程的流程图。
21.图11是根据本发明的实施方式的、条件概率的二进制树的示例的图。
22.图12是根据本公开的实施方式的、用于熵代码化的过程的流程图。
23.图13是根据本公开的实施方式的、用于估计对在非二进制字母表中的符号进行代码化的成本的过程的流程图。
24.图14是根据本公开的实施方式的、用于对量化的变换块进行熵代码化的过程的流程图。
具体实施方式
25.如上所述,与对视频流进行代码化有关的压缩方案可以包括:将图像分解成块,并通过使用一种或多种技术来限制数字视频输出中包括的信息来生成数字视频输出比特流。可以对接收到的编码比特流进行解码,以根据限制的信息重新创建块和源图像。对视频流或其一部分(例如帧或块)进行编码可以包括使用视频流中的时间或空间相似性来提高代码化效率。例如,可以基于识别先前代码化的像素值与当前块中的那些像素值之间的差(残差)而编码视频流的当前块。以此方式,仅残差和用于生成残差的参数需要被添加到编码比特流。可以使用有损量化步骤来对残差进行编码。
26.如以下进一步描述的,残差块可以在像素域中。残差块可以被变换到频域中,从而产生变换系数的变换块。可以对变换系数进行量化,从而生成量化变换系数的量化变换块。量化系数可以被熵编码并且被添加到编码的比特流。解码器可以接收编码的比特流,对量化变换系数进行熵解码以重构原始视频帧。
27.熵代码化是用于“无损”代码化的技术,其依赖于对在编码视频比特流中出现的值的分布进行建模的概率模型。通过基于测量或估计的值分布使用概率模型,熵代码化可以将表示视频数据所需的比特数减少到接近理论最小值。实际上,表示视频数据所需的比特数的实际减少可能取决于概率模型的精度、执行代码化的比特数目以及用于执行代码化的
定点算术的计算精度。
28.在编码的视频比特流中,许多比特用于以下两种情况之一:内容预测(例如,帧间模式/运动向量代码化、帧内预测模式代码化等)或残差代码化(例如,变换系数)。编码器可以使用技术来减少花费在系数代码化上的比特数。例如,系数令牌树(也可以称为二进制令牌树)指定值的范围,其具有用于此令牌树中的每个分支的前向自适应概率。从待代码化的值中减去令牌基值,以形成残差,然后以固定的概率对块进行代码化。具有次要变化(包括向后适应性)的类似方案也是可能的。自适应技术可以随着对视频流进行编码而更改概率模型,以适应数据的变化的特性。在任何情况下,解码器都被告知或可获得用于对熵代码化的视频比特流进行编码的概率模型,以便对视频比特流进行解码。
29.如上所述,通常通过下述方式来对符号序列进行熵代码化:使用概率模型确定序列的概率p,然后在编码器处使用二进制算术代码化将序列映射到二进制码字,并在解码器处从二进制码字解码该序列。码字的长度(即,比特数)由-log2(p)给出。熵代码化的效率可以与概率模型直接相关。
30.给定符号xn的序列的概率p(xn),良好的熵代码化引擎(例如,设计良好的二进制算术代码化引擎)可以根据概率p(xn)产生长度为-log2(p(xn))的二进制字符串。由于字符串的长度是整数,因此“长度为-log2(p(xn))的二进制字符串”意为长度为大于-log2(p(xn))的最小整数的二进制字符串。这里,当涉及符号序列时,上标i指代具有i个符号的长度的序列,并且下标i指代序列中位置i的符号。例如,x5指的是五(5)个符号的序列,例如11010;而x5指的是第5个位置处的符号,例如序列11010中的最后一个0。因此,序列xn可以表示为xn=x1x2…
xn。
31.在一些实施方式中,符号可以指代从包括n个令牌的非二进制令牌字母表中选择的令牌。这样,符号(即,令牌)可以具有n个值之一。令牌可以是用于代码化并指示变换系数的令牌。在这种情况下,“符号序列x
n”指代令牌列表x1,x2,

,xn,其用于以扫描顺序分别对扫描位置1、2、

、n处的变换系数进行代码化。
32.如在此使用的,概率值(诸如子序列xi的概率p(xi))可以具有浮点表示或定点表示。因此,应用于这些值的运算可以使用浮点算术或定点算术。
33.给定两个概率p1(xn)和p2(xn),使得p1(xn)《p2(xn),概率p1(xn)导致不短于概率p2(xn)的一个码字。即,更小的概率通常比更大的概率产生更长的码字。
34.在视频代码化中从符号放出的潜在概率模型通常是未知的和/或可能太复杂而无法完全描述。因此,设计用于熵代码化的良好模型可能是视频代码化中的挑战性问题。例如,对于一个序列运行良好的模型对于另一序列可能表现不佳。也就是说,在给定第一模型和第二模型的情况下,某些序列可能会使用第一模型更好地压缩,而其他序列可能会使用第二模型更好地压缩。
35.在某些视频系统中,可以对用于编码序列的最优模型进行代码化(即,编码比特流中的信号)。例如,给定要编码的序列,视频系统可以根据可用模型的全部或子集对序列进行编码,然后选择产生最佳压缩结果的模型。即,可以对序列的一组多于一个模型当中的特定模型的选择进行代码化。在这样的系统中,可以隐式地或显式地执行二次(two-pass)过程:第一次用于确定最优模型,第二次使用最优模型进行编码。在例如实时应用和其他对延迟敏感的应用中,两次过程可能是不可行的。
36.如上所述,多个模型(即,模型1,

,m)可用于熵代码化。为了在不丢失信息的情况下压缩符号序列,混合有限数目的模型进行算术代码化也可以同样渐进地选择最佳的一个模型。这源于这样的事实:log(即对数)函数是凹函数,而

log函数是凸函数。
37.根据前述,并且对于长度为n的有限序列xn=x1x2…
xn,不等式(1)如下:
[0038][0039]
在不等式(1)中,wk表示第k模型的加权因子,pk(xn)表示模型k给出的xn的联合概率。如上所述,给定概率pk(xn)(即,序列xn的由模型k给出的概率)以及xn作为输入,熵代码化引擎可以将xn映射为长度大约等于-logpk(xn)的二进制码字。
[0040]
从不等式(1),得出取可用模型的概率的线性(即加权)和(即并且然后对线性和取对数总是小于或等于取模型1,

,m的概率的对数(logpk(xn))并且然后求使用相同的加权因子{wk}的线性和。即,不等式(1)的左侧始终小于或等于不等式的右侧。
[0041]
从不等式(1)还可以得出,在熵代码化符号之前将模型1,

,m的概率混合是更有利的。也就是说,在熵代码化之前混合多个模型的概率可能比根据概率选择模型并使用每个模型分别代码化比特序列更有利。混合不同的模型可能会改善压缩性能(即降低压缩率),并且不亚于选择和代码化最佳模型并且然后使用所选模型代码化序列。
[0042]
概率pk(xn)是序列xn的联合概率。即,给定序列xn=x1x2…
xn,联合概率pk(xn)是第一个符号为x1,第二个符号为x2,

,并且第n个符号是xn的概率。由于联合代码化xn会导致处理上的显著延迟并且会导致高计算复杂性,因此混合在视频代码化中即使有用,用途也是有限的。
[0043]
如本文所使用的模型可以是无损(熵)代码化或者可以是无损(熵)编码中的参数。为了熵代码化的目的,模型可以是影响概率估计的任何参数或方法。例如,模型可以定义在令牌树中的内部节点处用于对决策进行编码和解码的概率(例如,下面关于图7所描述的)。在这种情况下,通过如本文所述混合多个模型,可以将学习当前帧的概率的两次过程简化为单次过程。在另一个示例中,模型可以定义某种上下文推导方法。在这种情况下,根据本公开的实施方式可以用于混合由众多这样的方法生成的代码化概率。在又一个示例中,模型可以定义全新的无损代码化算法。
[0044]
根据本公开的实施方式可以在包括视频代码化的实时或延迟敏感应用中有效率地混合用于熵代码化的多个模型,以减少表示视频数据所需的比特数目。混合模型可用于编码使用熵代码化代码化的任何值。例如,可以混合两个或更多个概率模型以便对量化变换系数进行熵代码化。根据本公开的实施方式的益处包括1)改进的压缩性能和2)在不牺牲压缩性能或引起高计算成本的单次代码化过程中混合来自多个模型的概率。
[0045]
在此首先参考可以并入本教导的系统来描述在视频压缩中对于熵代码化的混合。
[0046]
图1是视频编码和解码系统100的示意图。发送站102可以是例如具有诸如图2中所描述的硬件的内部配置的计算机。然而,发送站102的其他适当的实施方式也是可能的。例如,发送站102的处理可以分布在多个设备间。
[0047]
网络104可以连接发送站102和接收站106,以对视频流进行编码和解码。具体地,可以在发送站102中对视频流进行编码,并且可以在接收站106中对编码的视频流进行解码。网络104可以是例如互联网。网络104还可以是局域网(lan)、广域网(wan)、虚拟专用网
(vpn)、蜂窝电话网络或将视频流从发送站102传输到在本示例中的接收站106的任何其他手段。
[0048]
在一个示例中,接收站106可以是具有诸如在图2中描述的硬件的内部配置的计算机。然而,接收站106的其他合适的实施方式也是可能的。例如,接收站106的处理可以分布在多个设备之间。
[0049]
视频编码和解码系统100的其他实施方式也是可能的。例如,一个实施方式可以省略网络104。在另一个实施方式中,可以对视频流进行编码,然后将其存储以在以后的时间传输到接收站106或具有存储器的任何其他设备。在一个实施方式中,接收站106(例如,经由网络104、计算机总线和/或某种通信路径)接收编码的视频流,并存储该视频流以用于以后的解码。在一个示例实施方式中,实时传输协议(rtp)用于在网络104上传输编码的视频。在另一实施方式中,可以使用除rtp以外的传输协议,例如,基于超文本传输协议(http)的视频流送协议。
[0050]
例如,当在视频会议系统中使用时,发送站102和/或接收站106可以包括如下所述的对视频流进行编码和解码的能力。例如,接收站106可以是视频会议参与者,其从视频会议服务器(例如,发送站102)接收编码的视频比特流以解码和观看,并将其自己的视频比特流进一步编码并发送给视频会议服务器,以供其他参与者解码和查看。
[0051]
图2是可以实现发送站或接收站的计算设备200的示例的框图。例如,计算设备200可以实现图1的发送站102和接收站106之一或两者。计算设备200可以是包括多个计算设备的计算系统的形式,也可以是单个计算设备的形式,例如,移动电话、平板计算机、膝上型计算机、笔记本计算机和台式计算机等。
[0052]
计算设备200中的cpu 202可以是中央处理单元。替选地,cpu202可以是能够操纵或处理现在存在或以后开发的信息的任何其他类型的设备或多个设备。虽然所公开的实施方式可以用所示的单个处理器(例如,cpu 202)来实践,但是可以使用多个处理器来实现速度和效率上的优势。
[0053]
在一个实施方式中,计算设备200中的存储器204可以是只读存储器(rom)设备或随机存取存储器(ram)设备。任何其他合适类型的存储设备可以用作存储器204。存储器204可以包括由cpu 202使用总线212访问的代码和数据206。存储器204可以进一步包括操作系统208和应用程序210,应用程序210包括允许cpu 202执行本文所述的方法的至少一个程序。例如,应用程序210可以包括应用1至n,其还包括执行本文描述的方法的视频代码化应用。计算设备200还可以包括辅助存储214,其可以例如是与移动的计算设备200一起使用的存储卡。由于视频通信会话可能包含大量信息,因此它们可以全部或部分存储在辅助存储214中,并根据需要将其加载到存储器204中以用于处理。
[0054]
计算设备200还可以包括一个或多个输出设备,例如显示器218。在一个示例中,显示器218可以是将显示器与可操作用于感测触摸输入的触敏元件组合的触敏显示器。显示器218可以经由总线212耦合到cpu 202。除显示器218之外或作为显示器218的替选,可以提供允许用户编程或以其他方式使用计算设备200的其他输出设备。当输出设备是显示器或包括显示器时,则该显示器可以以各种方式实现,包括通过液晶显示器(lcd)、阴极射线管(crt)显示器或发光二极管(led)显示器(例如有机led(oled)显示器)实现。
[0055]
计算设备200还可以包括下述或与之通信:图像感测设备220,例如相机或者现在
存在或以后开发的任何其他图像感测设备220,其可以感测诸如操作该计算设备200的用户的图像之类的图像。图像感测设备220可以被定位成使得其指向操作计算设备200的用户。在一个示例中,图像感测设备220的位置和光轴可以被配置成使得视场包括与显示器218直接相邻并且从中可见显示器218的区域。
[0056]
计算设备200还可以包括下述或与之通信:声音感测设备222,例如麦克风或现在存在或以后开发的能够感测在计算设备200附近的声音的任何其他声音感测设备。声音感测设备222可以被定位成使得其指向操作计算设备200的用户,并且可以被配置成接收用户在用户操作计算设备200时发出的声音,例如语音或其他话语。
[0057]
虽然图2将计算设备200的cpu 202和存储器204描绘为集成到单个单元中,但是可以利用其他配置。cpu 202的操作可以分布在可以直接耦合或跨局域网或其他网络耦合的多个机器(其中,每个机器具有一个或多个处理器)上。存储器204可以跨多个机器分布,诸如基于网络的存储器或执行计算设备200的操作的多个机器中的存储器。虽然在这里被描述为单条总线,但是计算设备200的总线212可以由多条总线组成。此外,辅助存储214可以直接耦合到计算设备200的其他组件,或者可以经由网络被访问,并且可以包括诸如存储卡的单个集成单元或诸如多个存储卡的多个单元。因此,可以以多种配置来实现计算设备200。
[0058]
图3是要被编码并且随后被解码的视频流300的示例的图。视频流300包括视频序列302。在下一层级,视频序列302包括多个相邻帧304。虽然将三个帧描绘为相邻帧304,但是视频序列302可以包括任意数目的相邻帧304。然后,可以将相邻帧304进一步细分为个体帧,例如,帧306。在下一层级,可以将帧306划分为一系列分段308或平面。例如,分段308可以是允许并行处理的帧的子集。分段308也可以是可以将视频数据分离成分开的颜的帧的子集。例如,彩视频数据的帧306可以包括亮度平面和两个度平面。可以以不同的分辨率对分段308进行采样。
[0059]
不管帧306是否被划分为分段308,帧306都可以进一步细分为块310,其可以包含与例如帧306中的16x16像素相对应的数据。还可以布置块310以包括来自像素数据的一个或多个分段308的数据。块310还可以具有任何其他合适的尺寸,例如4x4像素、8x8像素、16x8像素、8x16像素、16x16像素或更大。
[0060]
图4是根据本公开的实施方式的编码器400的框图。如上所述,编码器400可以在发送站102中实现,例如通过提供存储在诸如存储器204的存储器中的计算机软件程序来实现。计算机软件程序可以包括机器指令,该机器指令当由诸如cpu 202之类的处理器执行时使发送站102以在此描述的方式编码视频数据。编码器400还可以被实现为例如包括在发送站102中的专用硬件。编码器400具有以下级以在前向路径(由实线连接线示出)中执行各种功能,以使用视频流300作为输入来产生编码或压缩比特流420:帧内/帧间预测402、变换404、量化406和熵编码408。编码器400还可包括重构路径(由虚线连接线示出),以重构用于对未来块进行编码的帧。在图4中,编码器400具有以下级以执行在重构路径中的各种功能:去量化410、逆变换412、重构414和环路滤波416。编码器400的其他结构变体可以用于对视频流300进行编码。
[0061]
当呈现视频流300以进行编码时,可以以块为单位处理帧306。在帧内/帧间预测402,可以使用帧内预测或帧间预测或两者的组合对块进行编码。无论如何,都可以形成预
测块。在帧内预测的情况下,可以由当前帧中的先前已编码和重构的样本形成预测块的全部或部分。在帧间预测的情况下,可以由使用运动向量确定的一个或多个先前构造的参考帧中的样本形成预测块的全部或部分。
[0062]
接着,仍然参考图4,可在帧内/帧间预测402处从当前块减去预测块以产生残差块(也称为残差)。变换404使用基于块的变换在例如频域中将残差变换为变换系数。这种基于块的变换包括例如离散余弦变换(dct)和非对称离散正弦变换(adst)。其他基于块的变换也是可能的。此外,可以将不同变换的组合应用于单个残差。在变换的应用的一个示例中,dct将残差块变换到频域,其中,变换系数值基于空间频率。最低频率(dc)系数在矩阵左上角和最高频率系数在矩阵右下角。值得注意的是,预测块的大小以及因此产生的残差块的大小可能与变换块的大小不同。例如,可以将预测块分为更小的块,对其应用单独的变换。
[0063]
量化406使用量化器值或量化水平将所述变换系数转换为离散量子值,其被称为量化变换系数。例如,可以将变换系数除以量化器值并截断。然后,量化变换系数由熵编码408进行熵编码。可以使用包括令牌树和二进制树在内的任何数目的技术来执行熵代码化。然后,将熵编码的系数以及用于解码块的其他信息(其可以包括例如所使用的预测的类型、变换类型、运动向量和量化器值)一起输出至压缩比特流420。用于解码块的信息可以被熵代码化为压缩比特流420内的块、帧、片和/或区段报头。压缩比特流420也可以被称为编码视频流或编码视频比特流,并且这些术语在本文中可以互换使用。
[0064]
图4中的重构路径(由虚线连接线示出)可用于确保编码器400和解码器500(以下将进行描述)使用相同的参考帧和块来解码压缩比特流420。重构路径执行与在解码过程期间发生的功能(下面将更详细描述)类似的功能,包括在去量化410处对量化变换系数进行去量化以及在逆变换412处对经去量化变换系数进行逆变换以产生推导残差块(也称为推导残差)。在重构414处,在帧内/帧间预测402所预测的预测块可以添加到推导残差以创建重构块。可以将环路滤波416应用于重构的块,以减少诸如构块伪像的失真。
[0065]
编码器400的其他变型可以用于编码压缩比特流420。例如,基于非变换的编码器400可以针对某些块或帧直接量化残差信号,而无需变换404。在另一个实施方式中,编码器400可以具有被组合为单个级的量化406和去量化410。
[0066]
图5是根据本公开的实施方式的解码器500的框图。例如,通过提供存储在存储器204中的计算机软件程序,可以在接收站106中实现解码器500。该计算机软件程序可以包括机器指令,当由诸如cpu 202的处理器执行时,该机器指令使得接收站106以在下面的图8和9中描述的方式解码视频数据。解码器500还可以以例如包括在发送站102或接收站106中的硬件来实现。类似于以上讨论的编码器400的重构路径,解码器500在一个示例中包括以下级以执行各种功能以从压缩比特流420产生输出视频流516:熵解码502、去量化504、逆变换506、帧内/帧间预测508、重构510、环路滤波512和可选的后滤波514。解码器500的其他结构变型可以用于解码压缩比特流420。环路滤波512可以包括去块滤波。
[0067]
当提供压缩比特流420以进行解码时,压缩比特流420内的数据元素可以由熵解码502解码以产生一组量化变换系数。去量化504对量化变换系数进行去量化(例如,通过将量化变换系数乘以量化器值),逆变换506使用所选择的变换类型对去量化变换系数进行逆变换,以产生可以与由编码器400中的逆变换412所创建的推导残差完全相同的推导残差。使用从压缩比特流420解码的报头信息,解码器500可以使用帧内/帧间预测508来创建与在编
码器400中例如在帧内/帧间预测402处创建的预测块完全相同的预测块。在重构510处,可以将预测块添加到推导残差以创建重构块。环路滤波512可以应用于重构块以减少构块伪像。这样,环路滤波512可以应用去块滤波。可以将其他滤波应用于重构块。在一个示例中,后滤波514被应用于重构块以减少构块失真,并且结果被输出为输出视频流516。输出视频流516也可以被称为解码视频流,并且将在本文中互换使用这些术语。
[0068]
解码器500的其他变型可以用于解码压缩比特流420。例如,解码器500可以在没有后滤波514的情况下产生输出视频流516。在解码器500的一些实施方式中,在环路滤波512之前应用后滤波514。另外或替选地,编码器400除了环路滤波416之外还包括去块滤波。
[0069]
图6是图示根据本公开的实施方式的量化变换系数的图600。图600描绘了当前块620、扫描顺序602、量化变换块604、非零图606、块末尾(end-of-block)图622和符标(sign)图626。当前块620被示为4x4块。但是,任何块大小都是可能的。例如,当前块可以具有4
×
4、8
×
8、16
×
16、32
×
32的大小(即尺寸)或任何其他正方形或矩形块大小。当前块620可以是当前帧的块。在另一示例中,当前帧可以被划分成区段(诸如图3的区段308)或区块等,每个都包括块的集合,其中,当前块是该分区的块。
[0070]
量化变换块604可以是与当前块620的大小相似的大小的块。量化变换块604包括非零系数(例如,系数608)和零系数(例如,系数610)。如上所述,量化变换块604包含用于与当前块620相对应的残差块的量化变换系数。同样,如上所述,量化变换系数由诸如图4的熵代码化408的熵代码化阶段进行熵代码化。
[0071]
对量化变换系数进行熵代码化可以涉及上下文模型(也称为概率上下文模型、概率模型、模型和上下文)的选择,该上下文模型提供用于代码化二进制化变换系数的二进制符号的条件概率的估计,如以下关于图7所描述的。当熵代码化量化变换系数时,附加信息可以用作选择上下文模型的上下文。例如,先前代码化的变换系数的幅值可以至少部分地用于确定概率模型。
[0072]
为了对变换块进行编码,视频代码化系统可以以扫描顺序遍历变换块,并随着量化变换系数分别被遍历(即,被访问)来对量化变换系数进行编码(例如,熵编码)。以锯齿形扫描顺序(例如扫描顺序602),首先遍历并编码变换块的左上角(也称为dc系数),并且以扫描顺序遍历并编码下一个系数(即与标记为“1”的位置相对应的变换系数),依此类推。以锯齿形扫描顺序(即扫描顺序602),首先遍历当前量化变换系数(例如,待编码的变换系数)左上方的一些量化变换系数。其他扫描顺序也是可能的。可以通过使用扫描顺序遍历二维量化变换块来产生量化变换系数的一维结构(例如,阵列)。
[0073]
在一些示例中,对量化变换块604进行编码可以包括确定非零图606,该非零图606指示量化变换块604的哪些量化变换系数为零并且哪些为非零。非零系数和零系数可以在非零图中分别用值一(1)和零(0)表示。例如,非零图606包括在与系数608相对应的笛卡尔位置(0,0)处的非零607和在与系数610相对应的笛卡尔位置(2,0)处的零608。
[0074]
在一些示例中,对量化变换块604进行编码可以包括生成和编码块末尾图622。块末尾图指示量化变换块604的非零量化变换系数是否为针对给定扫描顺序的最后一个非零系数。如果非零系数不是变换块中的最后一个非零系数,则可以在块末尾图中用二进制位零(0)表示该系数。另一方面,如果非零系数是变换块中的最后一个非零系数,则可以在块末尾图中用二进制值一(1)表示该系数。例如,由于与扫描位置11相对应的量化变换系数
(即,最后的非零量化变换系数628)是量化变换块604的最后的非零系数,因此以一(1)的块末尾值624指示它;用零指示所有其他非零变换系数。
[0075]
在一些示例中,对量化变换块604进行编码可以包括生成和编码符标图626。符标图626指示量化变换块604的哪些非零量化变换系数具有正值,以及哪些量化变换系数具有负值。不需要在符标图中指示为零的变换系数。符标图626示出了量化变换块604的符标图。在符标图中,可以用零(0)指示负量化变换系数,可以用一(1)指示正量化变换系数。
[0076]
图7是根据本公开的实施方式的、可用于将块熵代码化成视频比特流的系数令牌树700的图。系数令牌树700被称为二进制树,因为在树的每个节点处,必须采取两个分支之一(即遍历)。系数令牌树700包括分别与标记为a和b的节点相对应的根节点701和节点703。
[0077]
如以上关于图6所描述的,当针对一个块检测到块末尾(eob)令牌时,当前块中的系数的代码化可以终止,并且该块中的剩余系数可以被推断为零。这样,eob位置的代码化能够是视频代码化系统中系数的必要部分。
[0078]
在一些视频代码化系统中,紧接在解码非零系数之后或在第一扫描位置(dc)处代码化确定当前令牌是否等于当前块的eob令牌的二进制决策。在一个示例中,对于大小为mxn的变换块,(其中,m表示变换块中的列数,n表示变换块中的行数),当前令牌是否等于eob令牌的最大代码化次数等于mxn。m和n可以取诸如值2、4、8、16、32和64的值。如下所述,二进制决策对应于“1”比特的代码化,该“1”比特对应于从系数令牌树700中的根节点701到节点703移动的决策。这里,“代码化一比特(coding a bit)”可以表示在码字中表示正被编码的变换系数的比特的输出或生成。类似地,“解码一比特(decoding a bit)”可以表示(例如从编码比特流中)读取码字的、与正被解码的量化变换系数相对应的比特,使得该比特对应于在系数令牌树中正被遍历的分支。
[0079]
使用系数令牌树700,针对量化的变换块(诸如图6的量化变换块604)的量化系数(例如,图6的系数608、610)生成二进制数字串。
[0080]
在一个示例中,nxn块(例如,量化变换块604)中的量化系数被遵循规定的扫描顺序(例如,图6的扫描顺序602)组织成1d(一维)阵列(在此为阵列u)。n可以是4、8、16、32或任何其他值。1d阵列的第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处的零系数之后没有非零系数。
[0081]
为了对系数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位置(含)之后不包含任何非零系数的令牌。即,t[eob]=eob_token指示当前块的eob位置。下表i提供了根据本公开内容的实施方式的、除eob_token之外的令牌值的示例及其对应名称的列表。
[0082]
令牌令牌名称
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)
[0083]
在一个示例中,量化系数值被取为有符号的12位整数。为了表示量化系数值,可以将12位有符号值的范围划分为11个令牌(表i中的令牌0-10)加上块末尾令牌(eob_token)。为了生成表示量化系数值的令牌,可以遍历系数令牌树700。然后可以如关于图4的熵代码化408所描述的,通过编码器将遍历树的结果(即,比特串)编码为比特流(诸如,图4的比特流420)。
[0084]
系数令牌树700包括令牌eob_token(令牌702)、zero_token(令牌704)、one_token(令牌706)、two_token(令牌708)、three_token(令牌710)、four_token(令牌712)、cat1(令牌714,即表i中的dct_val_cat1)、cat2(令牌716,即表i中的dct_val_cat2)、cat3(令牌718,即表i中dct_val_cat3)、cat4(令牌720,即表i中dct_val_cat4)、cat5(令牌722,即表i中的dct_val_cat5)和cat6(令牌724,即表i中的dct_val_cat6)。可以看出,系数令牌树将单个量化系数值映射到单个令牌,例如令牌704、706、708、710和712中的一个。其他令牌(例如令牌714、716、718、720 722和724)代表量化系数值的范围。例如,可以用令牌dct_val_cat5——图7中的令牌722——表示值为37的量化变换系数。
[0085]
令牌的基值被定义为其范围内的最小数字。例如,令牌720的基值为19。熵代码化为每个量化系数识别令牌,并且如果令牌表示范围,则可以通过从量化系数减去基值来形成残差。例如,可以通过在编码的视频比特流中包括令牌720和残差值1(即20减去19)来表示具有值20的量化变换系数,以允许解码器重构原始量化变换系数。块末尾令牌(即,令牌702)以信号表示在变换的块数据中没有剩余的其他非零量化系数。
[0086]
为了通过使用二进制算术代码化引擎(例如,通过图4的熵代码化408)来对令牌t[i]进行编码或解码,可以使用系数令牌树700。从根节点701(即,标记为a的节点)处开始遍历系数令牌树700。遍历系数令牌树会生成比特串(码字),将使用例如二进制算术代码化将该比特串编码到比特流中。该比特串表示当前系数(即,正被编码的量化变换系数)。
[0087]
如果当前系数为零,并且剩余的变换系数不再有非零值,则将令牌702(即eob_token)添加到比特流中。例如对于图6的扫描顺序位置12处的变换系数就是这种情况。另一方面,如果当前系数不为零,或者如果当前块的任何剩余系数之中存在非零值,则将“1”比特添加到码字并且遍历前进到节点703(即,标记为b的节点)。在节点b处,测试当前系数以查看其是否等于零。如果是,则采取左侧分支,使得表示值zero_token的令牌704和比特“0”被添加到码字。如果否,则将比特“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”添加到码字)等等。
[0088]
本质上,在遍历到左子节点时将“0”比特添加到码字,而在遍历到右子节点时将“1”比特添加到码字。当从压缩比特流解码码字时,解码器进行类似的过程。解码器从比特流中读取一比特。如果该比特为“1”,则向右遍历系数令牌树,如果该比特为“0”,则向左遍历树。解码器然后读取下一个比特并重复该过程,直到树的遍历到达叶节点(即令牌)为止。作为一个示例,为了对令牌t[i]=three_token进行编码,从根节点(即,根节点701)开始,对二进制字符串111010进行编码。作为另一示例,对码字11100进行解码产生令牌two_token。
[0089]
注意,左和右子节点的“0”和“1”比特之间的对应仅是用于描述编码和解码过程的约定。在一些实施方式中,例如在其中“1”对应于左子节点而“0”对应于右子节点的实施方式中可以使用不同的约定。只要编码器和解码器都采用相同的约定,本文描述的过程就适用。
[0090]
由于eob_token仅可能在非零系数之后,所以当u[i-1]为零时(即,当在1d阵列u的位置i-1处的量化变换系数等于零时),解码器可以推断出第一比特必须为1。第一比特必须为1,因为在遍历树时,对于在零变换系数(例如,在图6的锯齿形扫描顺序位置1处的变换系数)之后的变换系数(例如,图6的锯齿形扫描顺序位置2处的变换系数),遍历必定会从根节点701移到节点703。
[0091]
这样,二进制标志checkeob可以用于指令编码器和解码器跳过对从系数令牌树700中的根节点开始的第一比特进行编码和解码。实际上,当二进制标志checkeob为0时(即,指示不应该检查根节点),系数令牌树700的根节点701被跳过,并且节点703成为要访问以遍历的系数令牌树700的第一节点。即,当跳过根节点701时,编码器可以跳过编码,并且解码器可以跳过解码,并且可以推断出编码串的第一比特(即,二进制比特“1”)。
[0092]
在开始对块进行编码或解码时,可以将二进制标志checkeob初始化为1(即,指示应检查根节点)。以下步骤示出了用于解码n
×
n块中的量化变换系数的示例过程。
[0093]
在步骤1,二进制标志checkeob被设置为零(即,checkeob=0),并且索引i也被设置为零(即,i=0)。
[0094]
在步骤2,(1)如果二进制标志checkeob等于1,则通过使用全系数令牌树(即,从系数令牌树700的根节点701处开始)来解码令牌t[i];或(2)如果checkeob等于0,则使用其中跳过eob_token的部分树(例如,从节点703开始)来解码令牌t[i]。
[0095]
在步骤3,如果令牌t[i]=eob_token,则量化变换系数u[i],

,u[n*n-1]全部为零,并且解码过程终止;否则,必要时(即,当t[i]不等于zero_token时)可以解码额外的比特并重构u[i]。
[0096]
在步骤4,如果u[i]等于零,则将二进制标志checkeob设置为1,否则将checkeob设
置为0。即,可以将checkeob设置为值(u[i]!=0)。
[0097]
在步骤5,递增索引i(即,i=i+1)。
[0098]
在步骤6,重复步骤2-5,直到所有量化变换系数都已被解码(即,直到索引i=n*n)或直到eob_token被解码为止。
[0099]
在上面的步骤2中,对令牌t[i]进行解码可以包括以下步骤:确定上下文ctx;根据上下文ctx确定二进制概率分布(即模型);以及,通过使用所确定的概率分布使用布尔算术代码来解码从系数令牌树700的根节点到叶节点的路径。可以使用上下文推导的方法来确定上下文ctx。上下文推导方法可以使用以下中的一个或多个来确定上下文ctx:块大小、平面类型(即亮度或度)、位置i以及先前解码的令牌t[0],

,t[i-1]。其他标准可用于确定上下文ctx。可以针对系数令牌树700的任何内部节点,在checkeob=1时从根节点701开始或者在checkeob=0时从节点703开始确定二进制概率分布。
[0100]
在某些代码化系统中,在给定上下文ctx的情况下,用于对令牌t[i]进行编码或解码的概率可以是固定的,并且不适合于一图片(即,帧)。例如,概率可以是针对给定上下文ctx定义的默认值,或者该概率可以被代码化(即,用信号指示)为该帧的帧头的一部分。在代码化帧中针对每个上下文代码化概率可能是昂贵的。这样,编码器可以针对每个上下文分析代码化在帧头中的上下文的关联概率是否有益并通过使用二进制标志将其决策以信号通知解码器。此外,针对上下文代码化概率可以使用预测来减少成本(例如,以比特率),其中,可以从先前解码的帧中的相同上下文的概率中得出预测。
[0101]
在一些代码化系统中,代替遍历诸如系数令牌树700之类的系数令牌树来代码化变换系数,每个令牌可以与被代码化的值相关联。这样,代替代码化二进制符号(即,从符号{0,1}组成的字母表中选择),使用包括多于两个的符号的符号的字母表来对变换系数进行代码化。在一个示例中,字母表包括12个符号,即{eob_token、zero_token、one_token、two_token、three_token、four_token、dct_val_cat1、dct_val_cat2、dct_val_cat3、dct_val_cat4、dct_val_cat5、dct_val_cat6}。这样,用于代码化变换系数的字母表包括12个符号,它们也被称为令牌。包含更多、更少或其他令牌的其他令牌字母表也是可能的。仅包括符号{0,1}的字母表在本文中被称为二进制字母表。包括不同于符号{0,1}的符号和/或除符号{0,1}外还包括其他符号的字母表在本文中被称为非二进制字母表。每个令牌可以与一个值相关联。在一个示例中,eob_token的值可以为255。每个其他令牌可以分别与一个不同的值关联。
[0102]
图8是根据本公开的实施方式的、用于对量化变换系数进行二进制化的树800的示例的图。树800是可以在一些视频代码化系统中用于对量化变换系数进行二进制化的二进制树。树800可由视频代码化系统使用,该视频代码化系统使用二进制化、上下文建模和二进制算术代码化的步骤来对量化变换系数进行编码和解码。该过程可以被称为上下文自适应二进制算术代码化(cabac)。例如,为了代码化量化变换系数x,代码化系统可以执行以下步骤。量化变换系数x可以是图6的量化变换块604的任何系数(例如,系数608)。
[0103]
在二进制化步骤中,首先通过使用树800将系数x二进制化为二进制字符串。二进制化过程可以将系数x的无符号值二进制化。例如,为了对系数628(即,值-1)进行二进制化,对值1进行二进制化。这导致遍历树800并生成二进制字符串10。二进制字符串10的每个比特被称为bin。
[0104]
在上下文推导步骤中,对于要代码化的每个bin,导出上下文。可以从诸如以下中的一个或多个的信息中导出上下文:块大小、平面类型(即,亮度或度)、系数x的块位置以及先前解码的系数(例如,左方和/或上方的相邻系数(如果可获得))。其他信息可用于导出上下文。
[0105]
在二进制算术代码化步骤中,在给定上下文的情况下,通过使用例如二进制算术代码化引擎将bin与和上下文关联的概率值一起代码化为二进制码字。
[0106]
代码化变换系数的步骤可以包括被称为上下文更新的步骤。在上下文更新步骤中,在对bin进行代码化后,更新与上下文关联的概率以反映bin的值。
[0107]
现在描述概率模型的混合,以用于代码化(即,编码或解码)长度为n的序列xn。为简单起见,使用了两(2)个模型。然而,本公开不限于此,并且可以混合任何数目的模型。
[0108]
对于序列xn的长度i的任何子序列(其中,1≤i≤n),概率pk(xi)表示通过使用模型k估计子序列xi的概率,其中,k=1,2。对于每个模型,使用相应的加权因子wk,可以使用等式(2)将两个模型混合:
[0109][0110]
在等式(2)中,是子序列xi的混合概率。这样,混合可以为每个子序列xi产生部分(或中间)结果。子序列xi是xi=x1x2x3…
xi。第一模型(即k=1)产生子序列概率p1(xi);而且第二模型(即k=2)产生子序列概率p2(xi)。
[0111]
在一个示例中,并且由于先验上可能不知道哪个模型应该具有优先级,因此可以使用简单的混合。例如,可以使用均匀加权。即,可以选择加权因子wk,使得wk=1/2。这样,等式(2)可以重写为:
[0112][0113]
混合概率是子序列的概率。但是,算术代码化是以逐个符号的方式上(即,不是在符号序列上)进行的。这样,混合概率不能直接用于熵代码化。这可以通过将混合概率转换为条件概率的乘积来解决,如下所述。令表示在给定先前的符号导致子序列x
i-1
的情况下,在位置i处的符号具有某值的的条件概率。也就是说,混合概率可以由等式(4)给出:
[0114][0115]
使用基本条件概率公式p(a

b)=p(a∩b)/p(b),其中,p(a∩b)是事件a和b都发生的概率,等式(4)可以是重写为等式(5):
[0116][0117]
注意,xi和x
i-1
二者都出现的混合概率与单独xi的混合概率相同,因为子序列xi包含子序列x
i-1
并具有符号xi。
[0118]
可以使用等式(3)来重写等式(5)。即,可以根据模型概率来重写等式(5)的每个子序列混合概率(即分子和分母)。等式(5)可以重写为等式(6):
[0119][0120]
通过将等式(6)的第一量和第二量分别乘以等于一(1)的因子(即,分别是和),得到等式(7):
[0121][0122]
等式(7)可以写成等式(8):
[0123][0124]
值得注意的是,作为分别使用模型1和模型2对直到第i符号的序列的编码(和类似地,解码)的结果可获得p1(xi|x
i-1
)和p2(xi|x
i-1
)的条件概率。即,从相应的初始状态开始,每个模型k可以在整个代码化过程中保持并跟踪条件概率pk(xi|x
i-1
)。例如,在对符号xi进行代码化(例如,编码或解码)之后,可以更新概率pk(xi|x
i-1
)以对于下一个符号x
i+1
获得pk(x
i+1
|xi)。可以由编码器和解码器使用相同的规定过程来更新概率。编码器和解码器可以遵循相同的规定过程,以保持和更新模型k的概率。在一些实施方式中,每次对符号xi进行代码化时都不执行概率的保持和更新。这样,概率pk(xi|x
i-1
)可以具有形式pk(xi|c
k,i
),其中,c
k,i
可以被称为用于对xi进行代码化的上下文。每个模型k可以具有从x
i-1
和模型k可用的其他信息中导出相应上下文c
k,i
的相应方法。概率pk(xi|c
k,i
)可以存储并保存在存储器中,其中,上下文c
k,i
可以用作用于访问存储器的索引。在根据本公开的实施方式中,将条件概率混合,然后使用混合概率(即)对序列进行编码(或解码)。
[0125]
在等式(8)中,w
i,1
和w
i,2
是分别等于和的权重,而p1(xi|x
i-1
)和p2(xi|x
i-1
)分别等于和这样,混合概率现在被表达为第一模型的条件概率(即p1(xi|x
i-1
))第二模型的条件概率(即p2(xi|x
i-1
))的线性组合,其中,每个条件概率乘以相应的加权因子。值得指出的是,即使模型1和模型2都是无记忆的(即),混合概率也通常没有简单的乘积形式,例如此外,权重w
i,1
和w
i,2
对于不同的符号可以具有不同的值。也就是说,权重w
i,1
和w
i,2
可以在i的不同值处变化。
[0126]
当使用等式(3)混合联合分布时,使用均匀的加权因子(即1/2)。但是,当混合条件概率时(如等式(8)所示),加权(即对于第一模型的w
i,1
和对于第二模型的w
i,2
)可能不再统一。第一模型的条件概率的权重w
i,1
等于第一模型给出的x
i-1
的联合概率除以第一模型给出的x
i-1
的联合概率和第二模型给出的x
i-1
的联合概率之和。对于权重w
i,2
同样。在等式(8)中,对于子序列x
i-1
,第一模型提供第一概率,第二模型提供第二概率,并且在给定x
i-1
时xi的条件概率的加权因子等于第一模型和第二模型的每个给定的概率除以两个模型给出的联合
概率之和。也就是说,在条件概率的混合中,例如,如果第一模型为子序列x
i-1
提供更高的概率,则第一模型最终将具有比第二模型更高的加权因子(即权重w
i,1
)。
[0127]
联合概率是实数,权重w
i,1
和w
i,2
的计算涉及实数的除法。这样,权重w
i,1
和w
i,2
的计算可能是复杂且昂贵的。期望用定点表示来近似权重w
i,1
和w
i,2
,以使得例如可以知道表示每个权重的确切比特数,并且使得可以避免除法运算。
[0128]
如上所述,在码字的概率与使用码字的概率生成的码字的长度(以比特为单位)之间存在相关性和/或关系。即,由-log2(p)给出码字的长度(即,比特数)。每个模型生成的码字的长度可用于近似权重w
i,1
和w
i,2
。也就是说,对于k=1,2,可以通过使用模型k编码x
i-1
所产生的、以比特计的码字长度lk(x
i-1
)来近似-log(pk(x
i-1
))。这样,可以使用等式(9)来近似权重w
i,1
(以及类似地,权重w
i,2
):
[0129][0130]
当l2(i-1)等于l1(i-1)时,则w
i,1
=w
i,2
=0.5。假设在不失去一般性的情况下l1(i-1)小于l2(i-1),则等式(9)可以通过扩展分母然后从分母和分子消去来产生。
[0131]
为了根据模型k确定长度i的子序列的长度lk(xi),可以使用假设的编码过程。假设的编码过程是执行代码化步骤但不生成实际码字或将比特输出到编码比特流中的过程。由于目的是估计lk(xi)(在某些应用中将其解释为比特率(或简单速率)),因此可以将假设的编码过程视为或称为速率估计过程。假设的编码过程使用概率模型来计算或估计序列的码字长度。可以在生成码字或不生成码字的情况下确定(即,测量)码字长度。例如,在时间实例i处,使用第一模型对序列xi‑‑1进行代码化生成长度为l
l
(i-1)的码字,并且使用第二模型来生成长度为l2(i-1)的码字。在一个示例中,多个假设的编码器可以是可用的并且并行执行。例如,用于算术编码器的标准速率估计器可用于每个模型。每个速率估计器可以提供(或可以用来提供)对于在给定模型的情况下子序列的、由编码器产生的码字长度的估计。
[0132]
在时间实例i给定两个竞争模型的情况下,如果第一模型提供的比特少于第二模型,则,对于直到位置x
i-1
处的符号的序列,指派给第一模型的权重(使用等式9)将大于指派给第二模型的权重。最终(即,当使用混合概率完成对序列xn的编码时),获胜模型(即,具有较高权重的模型)是产生较少比特的模型,这是期望的压缩结果。
[0133]
权重w
i,1
使用2的幂进行近似(在等式(9)中),因此可以有效率地进行计算。
[0134]
可以进一步简化权重w
i,1
。等式(9)的右侧为1/(1-r)形式,其中,这可以看作是由1+r+r2+

给定的几何级数,其公共比率这样,可以使用等式(10)来近似权重w
i,1

[0135][0136]
这样,等式(8)的w
i,1
*p1(xi|x
i-1
)可以重写为等式(11):
[0137][0138]
在等式(11)中,可以在p1(xi|x
i-1
)具有定点表示的情况下使用移位有效率地计算
此外,当p1(xi|x
i-1
)具有定点表示时,则等式(11)中的无穷和可以被截断为有限数目的项的和。例如,当p1(xi|x
i-1
)具有8比特表示时,该和可以被截断以仅保留前八(8)个项因为对于任何j≥8,在l1(x
i-1
)-l2(x
i-1
)≤-1(也就是说,它们相差至少一比特)时,当l1(x
i-1
)-l2(x
i-1
)<-1时(也就是说,当它们相差多于一个比特时),对于任何j≥j
*
,其中,j
*
<8。这样,仅需要前j
*
个项来计算w
i,1
p1(xi|x
i-1
)。
[0139]
可使用等式(12)计算权重w
i,2

[0140][0141]
可以使用等式(13)计算等式(8)的量w
i,2
*p2(xi|x
i-1
):
[0142][0143]
如等式(11)中那样,当p2(xi|x
i-1
)具有定点表示时,可以通过将无穷和截断为有限和来简化等式(13)的右侧。
[0144]
如上所述,模型的联合概率的混合可以使用简单的均匀混合,因为模型提供更好的压缩可能无法先验地知道。联合概率的均匀混合使用条件概率,并导致选择获胜模型(即权重较高的模型)。
[0145]
某些视频数据在帧/图片中可能是非平稳的。即,一个变换块的统计量可以与例如紧接的后续变换块实质上不同。这样,概率模型的混合可以用于使概率分布适应于正被代码化的当前变换块的局部统计。使用概率的混合以适应当前块的局部统计在本文中被称为变换块的局部混合。
[0146]
如上所述,由于当前块的统计信息可能与先前的变换块的统计信息明显不同,因此在对变换块进行局部混合的情况下,当前块不使用先前的变换块的代码化历史。这样,概率模型的混合可以从当前变换块的边界开始。
[0147]
在对变换块进行局部混合时,等式(2)的子序列xi(即,对于每个i,可以代表被编码的量化变换块的量化变换系数,并且k可以代表用于对变换系数(即,子序列)xi进行代码化的模型。模型的示例包括上下文模型、调整概率的速度或方法(例如laplace、good-turing、krichevsky-trofimov估计器或其他方法)、初始分布、其他模型或它们的组合。这样,序列xi可以表示直到并包括当前量化变换系数的变换块(即,量化的变换块)的所有代码化系数(即,代码化的量化变换系数)。如上所述,以扫描顺序代码化变换块的系数。这样,子序列xi包括以扫描顺序在当前系数xi之前的所有变换系数(即,x
i-1
系数序列),并且包括当前系数xi。在局部混合的情况下,索引i可以表示或指示扫描顺序中的扫描位置。
[0148]
图9是根据本公开的实施方式的、用于对符号序列进行编码的过程900的流程图。
过程900可以接收大小为n的符号序列。序列可以用xn表示。接收可以表示生成、确定或以任何方式接收。在一个示例中,符号序列可以表示量化变换系数,诸如在熵代码化408处从图4的量化406接收的量化变换系数。在一个示例中,符号序列可以是令牌,例如关于图7描述的令牌。在一个示例中,符号序列可以是二进制化的值,例如关于图8描述的二进制化的值。符号序列可以是基于概率模型编码的任何符号序列。
[0149]
可以在诸如图4的编码器400的编码器中实现过程900。过程900可以被实现为例如可以由诸如发送站102之类的计算设备执行的软件程序。该软件程序可以包括机器可读指令,其可以存储在诸如存储器204或辅助存储214之类的存储器中,并且可以由诸如cpu 202之类的处理器执行,以使计算设备执行过程900。在至少一些实施方式中,过程900可以全部或部分地由图4的编码器400的熵代码化408执行。
[0150]
过程900使用至少两个概率模型来编码符号xn的序列。过程900可以使用任何数目的概率模型。然而,为简单起见,仅两(2)个模型(即,第一模型和第二模型)用于说明过程900。过程900通过混合第一模型和第二模型的概率来对序列的每个符号进行编码。
[0151]
在902处,过程900将计数器i初始化为零(0),将第一子序列长度(即,第一长度l1)初始化为0,并且将第二子序列长度(即,第二长度l2)初始化为零(0)。计数器i用于序列xn的每个符号。第一长度l1和第二长度l2如上所述。即,第一长度l1和第二长度l2可以分别对应于由算术代码化引擎分别使用第一模型和第二模型生成的码字的长度。
[0152]
在904,过程900计算如上所述的条件概率p1(xi|x
i-1
)和p2(xi|x
i-1
)。条件概率p1(xi|x
i-1
)是在给定子序列x
i-1
(即直到并不包括符号xi的子序列)的概率的情况下,在符号序列的位置i处的符号的条件概率。对于p2(xi|x
i-1
)同样。
[0153]
在906处,过程900计算符号xi的混合概率过程900计算在以上等式(4)中描述的混合概率。过程900可以使用等式8、11和13来计算混合概率。在908,过程900使用计算出的混合条件概率来对符号xi进行编码。
[0154]
在910,过程900更新第一长度l1和第二长度l2。如上所述,可以在910处使用假设算术编码器。第一长度l1被更新为包括在对符号xi进行编码时被添加到由第一模型添加的假设码字的附加码字长度(即,比特)。第二长度l2被更新以包括在对符号xi进行编码时添加到由第二模型添加的假设码字的附加码字长度(即,比特)。过程900分别使用l1=l
1-log(p1(xi|x
i-1
))和l2=l
2-log(p2(xi|x
i-1
))来更新第一长度11和第二长度l2。在一个实施方式中,可以计算值-log(p1(xi|x
i-1
))和-log(p2(xi|x
i-1
))和/或通过使用查表(即在查表中查)对其近似。注意,概率p1(xi|x
i-1
)和p2(xi|x
i-1
)是介于零(0)和一(1)之间的概率。条件概率p1(xi|x
i-1
)和p2(xi|x
i-1
)均可使用定点表示(例如8比特整数定点表示)来表示和/或近似。这样,可以通过使用查表来估计-log(p1(xi|x
i-1
))和-log(p2(xi|x
i-1
))二者。8比特整数(即表示概率值p1(xi|x
i-1
)或p2(xi|x
i-1
))可以用作对于查表的输入(即索引)。通常,查表的大小取决于p1(xi|x
i-1
)和p2(xi|x
i-1
)的定点表示的宽度。即,宽度越大,估计-log(p1(xi|x
i-1
))和-log(p2(xi|x
i-1
))的精度越高。
[0155]
在912,计数器i递增,以便处理下一个符号x
i+1
。在914,如果所有符号都已被处理(即,i=n+1),则过程终止。否则,过程返回到904以处理下一个符号。
[0156]
图10是根据本公开的实施方式的、用于解码符号序列的过程1000的流程图。可以在诸如解码器500的解码器中实现过程1000。可以由接收站实现过程1000。过程900可以例
如被实现为可以由计算设备执行的软件程序。该软件程序可以包括机器可读指令,该机器可读指令可以存储在诸如存储器204或二级存储214的存储器中,并且可以由诸如cpu 202的处理器执行,以使计算设备执行该过程900。可以使用专用硬件或固件来实现过程900。某些计算设备可以具有多个存储器、多个处理器或两者。可以使用不同的处理器、存储器或两者来分布过程1000的步骤或操作。单数形式的术语“处理器”或“存储器”的使用涵盖具有一个处理器或一个存储器的计算设备以及具有可用于执行某些或所有所述步骤的多个处理器或多个存储器的设备。
[0157]
过程1000可以用于从编码的比特流中解码符号序列。例如,过程1000可以接收编码的比特流,诸如图5的压缩比特流420。过程1000可以包括与过程900的框902-906和910-914类似的框。相似框的描述被省略。代替框908,过程1000包括框1002。在1002,过程1000使用计算出的混合条件概率(即,)从编码比特流解码符号xi。
[0158]
在过程900或1000的一些实施方式中,可以每隔一定数目的步骤(例如,s>1)执行框906,以进一步节省(例如,减少)计算复杂度或提高吞吐量。吞吐量可以以在一个时钟周期内处理(代码化或解码)的符号数来测量。例如,当步骤的数目s=2时,仅当i为奇数或偶数时,才执行框906,但不是两者。在过程900或1000的另一实施方式中,可以在i的所有可能索引的预定义子集处执行框906。
[0159]
上文描述了模型的均匀加权的使用。然而,根据本公开的实施方式可以使用非均匀的先验权重。在使用m个模型的非均匀加权中,可以将权重wk中的至少一些设置为不等于1/m的值(即wk≠1/m)。
[0160]
为了简单起见,前述内容(例如,过程900和1000)描述了两个模型的使用:第一模型和第二模型。然而,根据本公开的实施方式可以扩展到任何数目的模型。例如,对于m≥2的多个模型,并假设加权因子wk均匀(即wk=1/m),则权重w
i,k
可使用等式(14)进行近似:
[0161][0162]
在公式14中,lk(x
i-1
)表示以比特为单位的码字长度,该码字长度是使用模型k(1≤k≤m)来编码子序列x
i-1
得出的。
[0163]
在图9—10的描述中,并且在使用二进制树对变换系数进行代码化的编解码器或对二进制符号的字母表进行代码化的编解码器的情况下,位置i(即xi)处的符号是指二进制字母表{0,1}中的符号。在使用令牌的字母表(即,非二进制字母表)来代码化变换系数的编解码器的情况下,位置i处的符号(即,xi)是指来自非二进制字母表的符号。
[0164]
在图9—10的910,查表可以用于计算第一长度l1和第二长度l2。在通常的情况下,在使用k个模型时,可以使用查表确定长度lk(x
i-1
)。在非二进制字母表的情况下,需要附加步骤以便使用查表。在二进制字母表的情况下,用于代码化符号{0,1}的概率分布可以表示为单个值。这是因为例如已有对二进制符号0进行代码化的概率p,因此可以将对二进制符号1进行代码化的概率确定为(1-p)。这样,一个概率值(或其定点表示)可以用作用于在查表中查值的输入。
[0165]
在非二进制字母表的情况下,查表可以是多维查表。例如,给定12个符号的非二进制字母表,查表中的查需要11个输入。
[0166]
在一些实施方式中,可以通过将与非二进制字母表符号相关联的概率分布转换为二进制分布来避免这种复杂的(即,多维的)查表。二进制分布可以表示为二进制树。非二进制字母表的概率分布到二进制树的转换可以是隐式或显式的。例如,假设非二进制字母表是三进制字母表(a,b,c),并且非二进制概率分布由三元组(p_a,p_b,p_c)给出,其中,p_a、p_b和p_c是正实数,其中,p_a+p_b+p_c=1,并且其中,p_a、p_b和p_c分别对应于符号a、符号b和符号c的概率。在将概率分布(p_a,p_b,p_c)转换为二进制分布的示例中,可以将符号b和c组合为单个符号bc。这样,获得了(a,bc)的第一二进制分布(p_a,p_b+p_c)。为了从组合符号bc进一步确定符号b或符号c,可以获得第二二进制分布(p_b/(p_b+p_c)、p_c/(p_b+p_c))。对于在非二进制字母表上定义的任何分布,可以重复(或递归)应用上述转换以获得等效的二进制分布序列。
[0167]
可以使用任何二进制树。使用图7为例,假设在给定上下文的情况下,代码化令牌702-704的概率分布是已知的,则可以导出二进制树,例如系数令牌树700,使得该树的每个内部节点对应于二元决策(即,每个内部节点对应于二进制概率分布)。
[0168]
导出的树的内部节点的二进制分布可以用作查表的输入,以确定码字长度。例如,为了估计代码化非二进制字母表的令牌的成本,可以将树从令牌向上遍历到根。在遍历中遍遇到的概率(即内部节点的概率)可以被求和(即相加),并且该和可以用作查表的输入。
[0169]
在一些实施方式中,查表可以离线计算,并且在编码和/或解码时可以供编解码器使用。在一些实施方式中,可以在线计算查表。即,可以在代码化时由编解码器计算查表。在一些实施方式中,查表可以被周期性地计算(例如,更新,重新计算等)。在一些实施方式中,如果字母表大小(即,字母表中的符号数)不超过符号的阈值数,则重新计算查表。符号的阈值数目可以是12、16或任何其他阈值数目。
[0170]
周期性地计算查表可以意为:在估计代码化字母表中的每个符号的成本的代码化单元、超级块、变换块或视频帧的某个其他单元的开始处计算查表。
[0171]
在等式9-13中,仅使用码字长度的差。例如,在等式10中使用了差l1(x
i-1
)-l2(x
i-1
)。因此,可以不必保持(例如,跟踪)所有模型k的一组码字长度值{lk}。这样,在图9-10的910的一些实施方式中,可以通过仅保持码字长度差来降低存储需求。如果使用k个模型,则将保留与k-1个模型相关的差。例如,在使用两个模型k∈{1,2}的情况下,出于混合的目的,仅使用l
1-l2(例如,需要)。另外,如果概率具有定点表示,则可以以有限精度来存储长度差l
1-l2以降低存储复杂度。
[0172]
在一个示例中,在使用k(>2)个模型的情况下,可以使用两个步骤来降低与码字长度{lk}相关联的存储复杂性。第一步骤是将模型索引j选择为任意模型索引,其为在1到k之间的固定数,其中,k是要混合的模型数(即1≤j≤k)。第二步骤是计算并存储针对除j之外的所有1≤k≤k的长度差l
k-lj。
[0173]
在另一实施方式中,在第一步骤中,可以选择i,使得对于所有1≤k≤k,lk≥lj。即,仅存储非负的差(即,l
k-lj≥0)。由于在{lk}中保持最小值的索引可以改变,因此可以保持和/或更新索引j,索引j是{lk}中保持最小值的索引。通过仅存储正的长度差,可以节省(即不使用)用于存储符号比特(即,与负值相关联)的附加存储。
[0174]
图13是根据本公开的实施方式的、用于估计代码化在非二进制字母表中的符号的
成本的过程1300的流程图。
[0175]
在1302,过程1300将与字母表相关联的概率分布(即,与非二进制字母表的每个符号相关联的概率值)转换成二进制分布。在一个示例中,概率质量函数(pmf)可以转换为二进制分布。在另一个示例中,概率分布的累积分布函数(cdf)可以转换为二进制分布。如上所述,通过使用完整的二进制树隐式或显式生成二进制分布。
[0176]
在1304,过程1300使用二进制分布来估计(即,查)以比特为单位的码字长度(或其缩放版本)。框1304可以由906处的过程900使用。框1304可以由906处的过程1000使用。
[0177]
在混合超过两(2)个模型的情况下,可以使用二进制树来计算(即确定、生成等)条件概率。即,可以使用上述过程来递归地计算等式(8)的因子w
i,k
pk(xi|x
i-1
)。递归计算意味着一次组合两个(2)模型的概率以产生中间条件概率。然后将中间条件概率一次组合两个。在模型数m是2的幂(即,m=2m)的情况下,可以通过在完整的二进制树(例如关于图11所描述的)上应用上述过程来递归地计算出等式(8)的因子w
i,k
pk(xi|x
i-1
)。
[0178]
图11是根据本公开的实施方式的、条件概率的二进制树1100的示例的图。在二进制树1100中,八(8)个模型被混合。八个模型的概率为p_1至p_8。每两个概率首先被混合。例如,如上所述,概率1102和1104被混合以产生中间条件概率1106,然后将其与中间条件概率1108组合以产生中间条件概率1110,依此类推,直到计算出最终条件概率1112。最终条件概率1112可以用于编码和/或解码。例如,可以在过程900的908处和/或过程1000的1002处使用最终条件概率1112。
[0179]
例如,在某些模型比其他模型更有用的情况下,可以使用参照图11描述的过程。在已知某些模型比其他模型更有用的情况下,可能不希望采用均匀加权。为了将更多权重指派给一个模型,可以在树中复制该模型。
[0180]
参考图11作为一个示例,模型p_1,p_2,

,p_6和p_8可能不同,并且已知p_6比其他模型更有用。由于p_6更有用,因此可以在树中复制p_6:p_7是p_6的副本。这样,向概率为p
_
6的模型在混合中指派两倍的权重以进行熵编码。
[0181]
作为另一个示例,例如,假设有两个模型,模型a和模型b,并且这两个模型的先验权重是根据本公开的实施方式可以将模型集扩展为4个模型的集合,其中,第一模型对应于模型a,其余三个模型对应于模型b,并且四个模型的先验为
[0182]
在上文中,描述了固定源。固定源意味着对符号xi的混合使用子序列x
i-1
的所有历史记录来确定w
i,k
。这样,统计数据不会在代码化过程的来源上发生变化。然而,在源可能是非固定的情况下,根据本公开的实施方式可以适应局部统计,以使用滑动窗口来获得更好的压缩性能。比特的长度l的滑动窗口指示在混合过程中使用的先前比特的数目(即,先前比特的数目的概率)。也就是说,滑动窗口表示要记住的在序列中的距离:仅滑动窗口内部的符号用于估计加权因子。更具体地说,仅将在滑动窗口内的那些符号的概率用于估计加权因子。
[0183]
这样,代替使用来代码化xi,使用其中,长度l≥1是滑动窗口的长度,并且其中,x
i-l

x
i-1
是从i-l比特开始并且在i-1比特结束的子序列。当长度l已知时,根据本公开的过程可以执行针对两个模型的以下步骤:
[0184]
在步骤1,初始化i=1、l1=0、l2=0。步骤1可以如关于图9的902所描述的。在步骤
1,该过程还初始化l
1,-l
=0,并且l
2,-l
=0。
[0185]
在步骤2,所述过程根据第一模型和第二模型计算p1(xi|x
i-l

x
i-1
)和p2(xi|x
i-l

x
i-1
)。
[0186]
在步骤3,所述过程根据等式15和16计算混合概率据等式15和16计算混合概率
[0187][0188][0189]
在步骤4,该过程通过使用对xi进行编码(由编码器实现时)或解码(由解码器实现时)。
[0190]
在步骤5,该过程将l1更新为l1=l
1-logp1(xi|x
i-l

x
i-1
),并将l2更新为l2=l
2-logp2(xi|x
i-l

x
i-1
)。如果该过程正在窗口外进行编码/解码(即,i>l),则该过程将更新l
1,-l
=l
1,-l-logp1(x
i-l
|x
i-2l

x
i-l-1
)和l
2,-l
=l
2,-l-logp2(x
i-l
|x
i-2l

x
i-l-1
)。
[0191]
在步骤6,i增加1(即,i=i+1)。
[0192]
在步骤7,该过程重复步骤2-6,直到处理了序列xn的所有比特(即,i=n+1)。
[0193]
在上述滑动窗口中,l1(x
i-1
)-l1(x
i-l-1
)=l
1-l
1,-l
和l2(x
i-1
)-l2(x
i-l-1
)=l
2-l
2,-l
。这样,可以将l1(x
i-1
)-l1(x
i-l-1
)视为通过使用第一模型对x
i-l

x
i-1
进行代码化而产生的码字长度。可以将l2(x
i-1
)-l2(x
i-l-1
)视为通过使用第二模型对x
i-l

x
i-1
进行代码化而产生的码字长度。
[0194]
如上所述,在针对变换块的局部混合的情况下,当新的变换块开始时(即,当变换块的代码化开始时),可以针对所有的模型k来对码字长度{lk}进行重置,以便在对新(即当前)变换块进行代码化开始时可以平等地考虑所有模型。这样,当当前变换块的编码完成时,长度1k被重置为零以用于下一个变换块的编码。
[0195]
在一些实施方式中,局部混合可以被应用于其他代码化单元。例如,长度1k可以在除变换块之外的代码化单元的开始处被重置。例如,代码化单元可以是超级块(例如,大小为64
×
64的块)。这样,长度1k可以在超级块的开始处被重置。长度1k可以在其他尺寸(例如128
×
128)的代码化单元起始处被重置。
[0196]
在上述滑动窗的情况下,存储器步长(即长度l)是固定的。在局部混合的情况下,存储器步适应于变换块的大小。例如,第一变换块可以是4
×
4变换块,第二变换块可以是16
×
16,等等。这样,根据块大小和/或量化的变换块中最后一个非零系数的位置,在对不同数目的系数进行代码化之后,长度1k被重置。
[0197]
图12是根据本公开的实施方式的、用于对符号序列进行熵代码化的过程1200的流程图。该序列可以如以上针对序列xn所述。过程1200可以由编码器或解码器实现。当由编码器实现时,“代码化”是指在诸如图4的压缩比特流420之类的编码比特流中进行编码。当由解码器实现时,“代码化”表示从诸如图5的压缩比特流420之类的编码比特流解码。
[0198]
当由编码器实现时,过程1200可以从诸如图4的量化406之类的量化步骤接收符号序列。在另一个示例中,过程1200可以接收将被编码的值(例如,量化变换系数),并且根据接收到的值来生成符号序列。当由解码器实现时,解码器可以接收编码比特流中的符号序列,诸如图4的压缩比特流420。
[0199]
在1202,过程1200选择要混合的模型。这些模型可以包括第一模型和第二模型。如本公开中所使用的,“选择”表示识别、构造、确定、指定或以无论任何方式进行其他选择。
[0200]
对于至少一个符号(例如,xi),在符号的位置(例如,i)处,过程1200使用第一模型和第二模型执行包括块1204-1208的块以确定混合概率。可以对符号序列中的所有符号执行框1204-1208。
[0201]
在1204,过程1200使用第一模型确定用于代码化符号的第一条件概率。第一条件概率是给定序列的子序列的情况下的符号的条件概率。在一个示例中,序列的子序列可以意指子序列x
i-1
。在另一个示例中,其中,正在使用滑动窗口,该序列的子序列由该序列的、该位置之前的预定数目的符号组成。预定数目的符号可以如关于滑动窗口长度l所描述的。这样,序列的子序列可以是子序列x
i-l

x
i-1
。在1206,过程1200使用第二模型来确定用于代码化符号的第二条件概率。第二条件概率是给定子序列的情况下的符号的条件概率,如关于框1204所描述的。
[0202]
在1208,过程1200使用第一条件概率和第二条件概率来确定用于代码化符号的混合概率。混合概率可以如关于图9的906所描述的。可以使用使用第一权重和第二权重的线性组合来组合第一条件概率和第二条件概率。在一个实施方式中,可以使用假设的算术代码化来确定(即,近似地确定)至少第一权重以确定用于代码化序列的、直到该符号的子序列的长度。可以使用长度来确定第一权重。在一个示例中,确定权重(例如,第一权重和/或第二权重)可以包括:确定由对序列的、直到符号的子序列进行代码化而得到的速率,并使用所确定的速率来确定第一权重。在一个示例中,可以使用速率估计器来确定速率。在一个示例中,速率估计器可以是假设的算术编码器。在一个示例中,确定速率可以包括使用输入作为概率值来查表(例如,查表)。即,概率值用作对查表的输入。
[0203]
在1210,过程1200使用混合概率代码化符号,例如,关于908(当由编码器实现时)和1002(当由解码器实现时)所描述的。
[0204]
在过程1200的一个实施方式中,模型可以包括第三模型和第四模型,并且使用第一模型来确定混合概率,第二模型可以包括将第一模型和第二模型混合以生成第一中间条件概率,混合第三模型和第四模型以生成第二中间条件概率,并且将第一中间条件概率和第二中间条件概率混合以生成用于代码化符号的条件概率。在一个实施方式中,第一模型和第四模型是相同的模型。
[0205]
图14是根据本发明的实施方式的、用于对量化的变换块进行熵代码化的过程1400的流程图。过程1400对指示量化变换块的量化变换系数的令牌进行代码化。如上所述,可以从令牌的非二进制字母表中选择令牌。过程1400如上文关于变换块的局部混合所描述的那样来对变换系数进行代码化。在一个实施方式中,可以针对与量化变换块相对应的令牌直到块末尾令牌来重复过程1400。
[0206]
处理1400可以由编码器或解码器实现。当由编码器实现时,“代码化”是指在诸如图4的压缩比特流420之类的编码比特流中进行编码。当由解码器实现时,“代码化”表示从诸如图5的压缩比特流420之类的编码比特流解码。
[0207]
当由编码器实施时,过程1400可以从诸如图4的量化406之类的量化步骤接收量化变换块。如图4所示,并且可以部分地或全部地由诸如熵代码化408之类的熵代码化步骤来实现。当由解码器实现时,解码器可以在诸如图5的压缩比特流420之类的编码比特流中接
收量化的变换块,其可以部分地或全部地通过诸如熵解码502的熵解码步骤来实现。
[0208]
在1402,过程1400选择用于对指示量化变换块的量化变换系数的令牌进行代码化的概率分布。可以选择两个或更多个概率分布。在一个示例中,概率分布包括第一概率分布和第二概率分布。每个概率分布提供与字母表的令牌相对应的概率值(例如,第一概率值和第二概率值)。例如,如果非二进制字母表包括n个(例如16个)符号,则概率分布可以包括n个概率值。
[0209]
在1404,过程1400使用第一概率分布和第二概率分布来确定用于代码化令牌的混合概率。混合概率可以如以上关于图9-10所述来确定。确定混合概率可以包括:使用第一概率分布来确定用于代码化令牌的第一条件概率;使用第二概率分布来确定用于代码化令牌的第二条件概率;以及使用第一条件概率和第二条件概率来确定混合概率。第一条件概率可以是给定量化编码块的先前代码化的令牌情况下的令牌的条件概率。第二条件概率可以是给定量化编码块的先前代码化的令牌情况下的令牌的条件概率。
[0210]
在一个实施方式中,确定混合概率还可以包括利用使用第一权重和第二权重的线性组合来组合第一条件概率和第二条件概率。第一权重可以基于第一码字的第一长度,该第一码字用于使用第一条件概率来对与先前代码化的令牌相对应的令牌进行代码化。第二权重可以基于第二码字的第二长度,该第二码字用于使用第二条件概率来对与先前代码化的令牌相对应的令牌进行代码化。
[0211]
在一个实施方式中,可以通过以下操作来确定第一权重和第二权重:将第一概率分布转换为第一二进制分布,将第二概率分布转换为第二二进制分布,使用第一二进制分布来确定第一长度,以及使用第二二进制分布来确定第二长度。
[0212]
在一个实施方式中,第一概率分布可以是用于对量化变换块的量化变换系数进行代码化的初始概率分布。即,第一概率分布可以是基于用于对量化变换系数进行代码化的上下文而选择的概率分布。在一个实施方式中,当由解码器实现时,可以从编码的比特流中解码初始概率。
[0213]
第二概率分布可以基于代码化单元的统计。这样,可以随着对量化系数进行代码化而修改(例如,更新)第二概率分布以反映代码化单元的实际统计。代码化单元可以是量化变换块。代码化单元可以是包括量化变换块的超级块。
[0214]
在1406,过程1400使用混合概率来代码化令牌。
[0215]
为了简化说明,将过程900、1000、1200、1300和1400分别描绘和描述为一系列框、步骤或操作。然而,根据本公开的框、步骤或操作可以以各种顺序和/或同时发生。另外,可以使用本文未提出和描述的其他步骤或操作。此外,实现根据所公开主题的技术可能不需要所有示出的步骤或操作。
[0216]
被称为上下文树加权(ctw)的技术是一种使用混合的无损数据压缩算法。为了对长度为n的二进制序列xn进行代码化,ctw将概率函数p(xn)估计为2k个概率函数pi(xn)的线性混合,每个概率函数都是通过假设有限存储器二进制树源进行估计的,并且具有相同的加权因子。相反,根据本公开的实施方式可以与任何模型一起工作。此外,本文描述的逐符号加权因子计算可以使用长度函数来近似子序列的概率,这与维护和计算联合概率的现有解决方案相比被大大简化。
[0217]
上面描述的编码和解码的方面示出了一些编码和解码技术。然而,应当理解,如在
权利要求书中使用的那些术语,编码和解码可以表示压缩、解压缩、变换或数据的任何其他处理或改变。
[0218]
词语“示例”或“实施方式”在本文中用来表示用作示例、实例或例示。本文中被描述为“示例”或“实施方式”的任何方面或设计不必被解释为相对于其他方面或设计优选或有利。相反,使用词语“示例”或“实施方式”旨在以具体方式呈现概念。如在本技术中使用的,术语“或”旨在意指包括性的“或”而不是排他性的“或”。也就是说,除非另外指定或从上下文清楚可知,否则“x包括a或b”旨在表示任何自然的包含性排列组合。也就是说,如果x包括a;x包括b;或x包括a和b,则在任何上述情况下均满足“x包括a或b”。另外,在本技术和所附权利要求书中使用的冠词“一”和“一个”通常应当被解释为意指“一个或多个”,除非上另外指出或从上下文清楚是针对单数形式。此外,在整个本公开中,贯穿本公开的术语“实施方式”或“一个实施方式”的使用并不旨在表示相同的实施例或实施方式,除非如此描述。
[0219]
发送站102和/或接收站106的实施方式(以及存储在其上和/或由其(包括由编码器400和解码器500)执行的算法、方法、指令等,)可以以硬件、软件或其任何组合实现。硬件可以包括例如计算机、知识产权(ip)核心、专用集成电路(asic)、可编程逻辑阵列、光学处理器、可编程逻辑控制器、微代码、微控制器、服务器、微处理器、数字信号处理器或任何其他合适的电路。在权利要求中,术语“处理器”应被理解为单独地或组合地包括任何前述硬件。可互换使用术语“信号”和“数据”。此外,发送站102和接收站106的部分不必一定以相同的方式实现。
[0220]
另外,在一方面,例如,可以使用具有计算机程序的通用计算机或通用处理器来实现发送站102或接收站106,该计算机程序在被执行时执行在此描述的任何相应方法、算法和/或指令。另外或替选地,例如,可以利用专用计算机/处理器,其可以包含用于执行本文所述的任何方法、算法或指令的其他硬件。
[0221]
发送站102和接收站106可以例如在视频会议系统中的计算机上实现。替选地,发送站102可以在服务器上实现,而接收站106可以在与服务器分开的设备(例如,手持通信设备)上实现。在这种情况下,发送站102可以使用编码器400来将内容编码为编码视频信号,并将编码视频信号发送给通信设备。进而,通信设备然后可以使用解码器500对编码视频信号进行解码。替选地,通信设备可以解码本地存储在通信设备上的内容,例如,未由发送站102发送的内容。其他发送站102和接收站106实现方案是可用的。例如,接收站106可以是大体上固定的个人计算机,而不是便携式通信设备,和/或包括编码器400的设备也可以包括解码器500。
[0222]
此外,本公开的全部或部分实施方式可以采取可从例如有形计算机可用或计算机可读介质访问的计算机程序产品的形式。计算机可用或计算机可读介质可以是例如可以有形地包含、存储、通信或传输程序以供任何处理器使用或与其结合使用的任何设备。介质可以是例如电子、磁性、光学、电磁或半导体设备。也可获得其他合适的介质。
[0223]
已经描述了上述实施例、实施方式和方面,以允许容易理解本公开并且不限制本公开。相反,本公开意图覆盖包括在所附权利要求书的范围内的各种修改和等同布置,该范围应被赋予最宽泛的解释,以涵盖法律允许的所有这样的修改和等同结构。

技术特征:


1.一种用于对符号序列进行熵代码化的方法,包括:选择包括第一模型和第二模型的模型;在所述符号的位置处,对于至少一个符号,使用所述第一模型和所述第二模型通过以下来确定混合概率:使用所述第一模型确定用于代码化所述符号的第一条件概率,所述第一条件概率是给定具有第一值的所述序列的子序列的情况下,所述符号的条件概率;使用所述第二模型确定用于代码化所述符号的第二条件概率,所述第二条件概率是给定具有第二值的所述子序列的情况下,所述符号的条件概率;和使用所述第一条件概率和所述第二条件概率确定用于代码化所述符号的所述混合概率,其中,确定所述混合概率包括:使用第一速率估计器确定第一码字的第一长度,以用于使用所述第一条件概率代码化所述序列的直到所述符号的第一子序列;使用第二速率估计器确定第二码字的第二长度,以用于使用所述第二条件概率代码化所述序列的直到所述符号的第一子序列;使用所述第一长度确定第一权重;使用所述第二长度确定第二权重;和使用利用所述第一权重和所述第二权重的线性组合来组合所述第一条件概率和所述第二条件概率;和使用所述混合概率来代码化所述符号。2.根据权利要求1所述的方法,还包括:确定由代码化所述序列的直到所述符号的子序列而产生的速率;和使用所确定的速率来确定所述第一权重。3.根据权利要求2所述的方法,其中,确定所述速率包括:使用概率值作为输入在查表中查所述速率。4.根据权利要求1所述的方法,其中,所述模型包括第三模型和第四模型,并且其中,使用所述第一模型和所述第二模型确定所述混合概率包括:混合所述第一模型和所述第二模型以生成第一中间条件概率;混合所述第三模型和所述第四模型以生成第二中间条件概率;和混合所述第一中间条件概率和所述第二中间条件概率以生成要用于代码化所述符号的条件概率。5.根据权利要求1所述的方法,其中,所述序列的所述子序列包括所述序列的直到所述位置的所有符号。6.一种用于对符号序列进行熵解码的装置,所述装置包括:存储器;和处理器,其中,所述存储器包括能由所述处理器执行以执行以下操作的指令:选择包括第一模型和第二模型的模型以用于解码符号序列x
n
,其中,所述符号序列x
n
包括对于每个i=0到n的符号x
i
;和对于所述符号序列x
n
的位置j处的至少一个符号x
j
,执行步骤以执行以下操作:使用所述第一模型计算第一条件概率p1(x
j
|x
j-1
);
使用所述第二模型计算第二条件概率p2(x
j
|x
j-1
);使用所述第一条件概率和所述第二条件概率获得混合概率和使用所述混合概率来解码x
j
。7.根据权利要求6所述的装置,其中,其中,所述第一条件概率是给定所述序列的子序列x
j-1
具有第一值的情况下,所述符号x
j
具有某一值的使用所述第一模型的第一条件概率,以及其中,所述第二条件概率是给定所述序列的子序列x
j-1
具有所述第一值的情况下,所述符号x
j
具有所述某一值的使用所述第二模型的第二条件概率。8.根据权利要求7所述的装置,其中,获得所述混合概率包括执行以下操作:使用相应第一权重和第二权重混合所述第一条件概率和所述第二条件概率,其中,所述第一权重对应于由使用所述第一模型以解码所述子序列x
j-1
而产生的码字的第一长度l1,以及其中,所述第二权重对应于由使用所述第二模型以解码所述子序列x
j-1
而产生的所述码字的第二长度l2。9.根据权利要求8所述的装置,其中,所述第一权重和所述第二权重是使用查表来确定的。10.一种用于对比特序列进行熵代码化的装置,所述装置执行以下操作:使用第一概率分布,获得第一条件概率以用于代码化在所述比特序列内的位置处的比特,所述第一条件概率是在给定所述比特序列的子序列具有第一相应值的情况下所述比特具有某一值的条件概率;使用不同于所述第一概率分布的第二概率分布,获得第二条件概率以用于代码化所述比特,所述第二条件概率是在给定所述子序列具有第二相应值的情况下所述比特具有所述某一值的条件概率;确定由熵代码化直到但不包括所述比特的所述子序列而产生的速率;使用所确定的速率来确定权重;获得混合条件概率作为所述第一条件概率和所述第二条件概率的加权组合,以用于代码化所述比特,其中,所述权重在所述加权组合中使用;和使用所述混合概率来代码化所述比特。11.根据权利要求10所述的装置,其中,所述装置进一步执行以下操作:在使用所述混合概率代码化所述比特之后,更新所述第一条件概率或所述第二条件概率中的至少一个。12.根据权利要求10所述的装置,其中,为了获得所述第一条件概率包括执行以下操作:在查表中查所述第一条件概率;和其中,为了获得所述第二条件概率包括执行以下操作:在所述查表中查所述第二条件概率。13.根据权利要求10所述的装置,其中,为了获得所述混合概率包括执行以下操作:混合所述第一概率分布和所述第二概率分布以生成第一中间条件概率;混合第三概率分布和第四概率分布以生成第二中间条件概率;和
混合所述第一中间条件概率和所述第二中间条件概率以生成所述混合概率以用于代码化所述比特。14.根据权利要求13所述的装置,其中,所述第四概率分布是与所述第一概率分布相同的概率分布。15.根据权利要求10所述的装置,其中,所述子序列包括所述比特序列的直到但不包括所述位置的所有比特。16.一种用于对符号序列进行熵解码的装置,所述装置包括:处理器,所述处理器被配置为:选择包括第一模型和第二模型的模型以用于解码比特序列x
n
,其中,所述比特序列x
n
包括对于每个i=0到n-1的比特x
i
;和对于所述比特序列x
n
的位置j处的每一个比特x
j
,所述处理器被配置为执行以下操作:使用所述第一模型确定第一条件概率p1(x
j
|x
j-1
);使用所述第二模型确定第二条件概率p2(x
j
|x
j-1
);使用第一权重获得混合概率作为所述第一条件概率和所述第二条件概率的加权组合,所述第一权重对应于由使用所述第一模型以解码子序列x
j-1
而产生的码字的第一长度l1;和使用所述混合概率来解码该比特x
j
。17.根据权利要求16所述的装置,其中,所述第一条件概率是给定所述比特序列的所述子序列x
j-1
具有第一值的情况下,所述比特x
j
具有某一值的使用所述第一模型的第一条件概率,以及其中,所述第二条件概率是给定所述比特序列的所述子序列x
j-1
具有所述第一值的情况下,所述符号x
j
具有所述某一值的使用所述第二模型的第二条件概率。18.根据权利要求17所述的装置,其中,所述加权组合使用第二权重,所述第二权重对应于由使用所述第二模型以解码所述子序列x
j-1
而产生的所述码字的第二长度l2。

技术总结


本公开涉及用于在视频压缩中的熵代码化的概率的混合。公开了使用概率混合对符号序列进行熵代码化和解码。一种方法包括:在多个符号中的一位置处对于至少一个符号选择包括第一模型和第二模型的模型;使用第一模型和第二模型确定混合概率;以及使用混合概率代码化符号。确定符号的混合概率包括:使用第一模型确定用于代码化符号的第一条件概率;使用第二模型确定用于代码化符号的第二条件概率;以及,使用第一条件概率和第二条件概率确定用于代码化符号的混合概率。第一条件概率是给定序列的、直到该位置的子序列的情况下的符号的条件概率。第二条件概率是给定该子序列的情况下的符号的条件概率。符号的条件概率。符号的条件概率。


技术研发人员:

达克

受保护的技术使用者:

谷歌有限责任公司

技术研发日:

2018.05.01

技术公布日:

2022/12/22

本文发布于:2024-09-22 07:35:43,感谢您对本站的认可!

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

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

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