使用辅码字指示符的编码和解码方法和设备的制作方法

文档序号:7848297阅读:155来源:国知局
专利名称:使用辅码字指示符的编码和解码方法和设备的制作方法
技术领域
本申请总体涉及数据压缩,具体地涉及编码器、解码器和熵编码和熵解码的方法。
背景技术
不论有损还是无损,数据压缩通常使用熵编码来将解相关信号编码为比特序列,即比特流。高效数据压缩具有广泛应用,如图像、音频和视频编码。视频编码的当前最新技术是ITU-T H. 264/MPEG AVC视频编码标准。该标准定义了针对不同应用的多个不同简档,包括主简档、基线简档等等。存在用于编码/解码图像和视频的多个标准(包括H. 264)采用有损压缩过程来产生二进制数据。例如,H. 264包括预测操作以获得残差数据,接着进行DCT变换和DCT系数的量化。然后,对得到的数据(包括量化系数,运动矢量、编码模式和其他相关数据)进行熵编码,以产生数据比特流,从而发送或存储在计算机可读介质上。已经开发了多个编码方案来编码二进制数据。例如,可以使用Huffman码来编码JPEG。H. 264标准允许两种可能的熵编码过程上下文自适应可变长度编码(CAVLC)或上下文自适应二进制算术编码(CABAC)。CABAC得到比CAVLC更大的压缩,但是CABAC计算要求更高。有利地,提供一种改进的编码器、解码器和熵编码和解码方法。

发明内容
一方面,本申请描述了一种用于对输入序号序列进行编码的方法。所述方法包括基于根据上下文模型确定的估计概率,选择编码树;以及基于输入符号序列来遍历编码树,直至到达任一叶节点,并作为响应,输出与所述叶节点相关联的主码字,或者直至在编码树的内部节点处时发生转储清除事件,并作为响应,输出与所述内部节点相关联的辅码字。另一方面,本申请描述了一种用于对编码数据的比特流进行解码以产生重构二进制序列的方法,所述比特流包含多个码字。所述方法包括基于上下文模型,确定与重构二进制序列中的下一比特相关联的估计概率;以及确定在从先前解码的码字获得的比特序列中,与该估计概率相关联的比特是否可用,如果可用,则将该比特添加至重构二进制序列。如果没有这种比特可用,则解析比特流以提取下一码字,解码下一码字以获得与该估计概率相关联的新比特序列;以及将来自新比特序列的比特添加至重构二进制序列。在另一方面,本申请描述了一种用于对输入符号序列进行编码的方法。所述方法包括将输入符号序列编码为多个码字,其中所述码字包括主码字和辅码字;以及产生包括多个连续码字的比特流,其中所述多个连续码字之前有相关联的码字类型指示符,其中码字类型指示符指定其相关联的多个连续码字是否包括至少一个辅码字,以及在其相关联的多个连续码字包括至少一个辅码字的情况下,进一步指定所述至少一个辅码字中的第一个辅码字的位置。在另一方面,本申请描述了一种用于对包含多个码字的编码比特流进行解码的方法,所述多个码字包括主码字和辅码字。所述方法包 括读取比特流中的码字类型指示符;以及基于码字类型指示符,在主码字解码树与辅码字解码树之间进行选择,并使用所选解码树来解码所述多个码字之一。另一方面,本申请描述了一种用于对输入符号序列进行编码的方法。所述方法包括对于输入符号序列中的每个符号,基于上下文模型,依次确定该符号的估计概率;使用与该估计概率相关联的编码树,标识与通过将该符号附加至与该估计概率相关联的先前符号序列而获得的符号序列相关联的码字;以及将所述码字存储在先进先出缓冲器的缓冲单元中,其中,所述缓冲单元与估计概率相关联;以及以先进先出的顺序,从缓冲器输出存储的码字。在其他方面,本申请描述了一种用于实现上述方法的编码器。所述编码器包括存储器;处理器;以及编码应用,存储在存储器中并具有用于将处理器配置为执行这里描述的方法的操作的计算机可读指令。在其他方面,本申请描述了一种用于实现上述方法的解码器。所述解码器包括存储器;处理器;以及解码应用,存储在存储器中并具有用于将处理器配置为执行这里描述的方法的操作的计算机可读指令。本申请还描述了计算机可读介质,其上编码有用于将处理器配置为执行这里描述的一个或多个方法的计算机可执行指令。结合附图,通过阅读以下示例的描述,本领域普通技术人员将理解本申请的其他方面和特征。


现在参照附图作为示例,附图示出了本申请的示例实施例,其中图I以框图形式示出了用于对视频进行编码的编码器;图2以框图形式示出了用于对视频进行解码的解码器;图3示出了编码过程的框图;图4示出了用于编码输入序列的示例方法;图5以流程图形式示出了用于编码输入序列的另一示例方法;图6以流程图形式示出了对编码数据的比特流进行熵解码的示例方法;图7以流程图形式示出了在比特流中信号通知码选择的示例方法;图8示出了编码器的示例实施例的简化框图;以及图9示出了解码器的示例实施例的简化框图。在不同图中可以使用相似参考标号来表示相似组件。
具体实施例方式以下描述总体涉及数据压缩,具体地,涉及有限字母表源(如二进制源)的高效并行编码。在以下给出的许多示例中,给出这种编码和解码方案的特定应用。例如,以下许多示意参照视频编码。可以认识到,本申请不限于视频编码或图像编码。在以下描述中,参照H. 264标准来描述示例实施例。本领域技术人员将理解,本申请不限于H. 264,而是可以适用于其他视频编码/解码标准。还可以认识到,本申请不必限于视频编码/解码,可以适用于任何二进制源的编码/解码。在以下描述中,在视频应用的上下文中,在某种程度上可互换地使用术语帧和片(slice)。本领域技术人员将认识到,在H. 264标准的情况下,帧可以包含一个或多个片。还将认识到,取决于适用的视频编码标准的特定要求,特定编码/解码操作是逐帧执行的,一些编码/解码操作是逐片执行的。在任何特定实施例中,适用的视频编码标准可以确定是否关于帧和/或片来执行以下描述的操作,视情况而定。相应地,根据本公开,本领域技术人员将理解这里描述的特定操作或过程以及对帧、片或两者的特定引用对于给定实施例是 否适用于帧、片或两者。现在参照图1,图I以框图形式示出了用于对视频进行编码的编码器10。还参照图2,图2示出了用于对视频进行解码的解码器50的框图。可以认识到,这里描述的编码器10和解码器50均可以在专用或通用计算设备(包含一个或多个处理单元和存储器)上实现。编码器10或解码器50执行的操作可以通过例如专用集成电路或通过通用处理器可执行的存储程序指令来实现,视情况而定。设备可以包括附加软件,包括例如用于控制基本设备功能的操作系统。关于以下描述,本领域技术人员可以认识到在其中可以实现编码器10或解码器50的设备和平台的范围。编码器10接收视频源12并产生编码比特流14。解码器50接收编码比特流14并输出解码视频帧16。编码器10和解码器50可以被配置为符合多个视频压缩标准来操作。例如,编码器10和解码器50可以符合H. 264/AVC。在其他实施例中,编码器10和解码器50可以符合其他视频压缩标准,包括H. 264/AVC标准的演进。编码器10包括空间预测器21、编码模式选择器20、变换处理器22、量化器24和熵编码器24。本领域技术人员可以认识到,编码模式选择器20确定视频源的适合编码模式,例如对象帧/片是I、P还是B类型,帧/片内的特定宏块是帧间还是帧内编码。变换处理器22对空间域数据执行变换。具体地,变换处理器22应用基于块的变换来将空间域数据转换为频谱分量。例如,在许多实施例中,使用离散余弦变换(DCT)。在一些实例中,可以使用其他变换,如离散正弦变换等等。将基于块的变换应用于像素数据块得到变换域系数的集合。量化器24对变换域系数的集合进行量化。然后,熵编码器26对量化系数和相关联信息(如运动矢量、量化参数等等)进行编码。帧内编码的帧/片(即,类型I)不参照其他帧/片进行编码。换言之,它们不采用时间预测。然而,帧内编码的帧依赖于帧/片内的空间预测,如图I中通过空间预测器21进行说明。即,在对特定块编码时,可以将块中的数据与针对该帧/片已经编码的块内邻近像素的数据进行比较。使用预测算法,可以将块的源数据转换为残差数据。然后,变换处理器22对残差数据进行编码。例如,H. 264规定了 4x4变换块的9种空间预测模式。在一些实施例中,这9种模式中的每一种可以用于独立处理块,然后使用速率失真优化来选择最佳模式。H. 264标准还规定了使用运动预测/补偿来利用时间预测。相应地,编码器10具有反馈环路,反馈环路包括解量化器28、反变换处理器30和解块处理器32。这些单元反映了解码器50实现以再现帧/片的解码过程。帧存储器34用于存储再现帧。按照这种方式,运动预测基于在解码器50处重构帧是什么,而不基于原始帧,由于编码/解码中涉及的有损压缩,原始帧可能不同于重构帧。运动预测器36使用帧存储器34中存储的帧/片作为源帧/片,来与当前帧进行比较,以标识相似块。相应地,对于应用运动预测的宏块,变换处理器22编码的“源数据”是出自运动预测过程的残差数据。残差数据是表示参考块与当前块之间的差异(如果存在)的像素数据。关于参考帧和/或运动矢量的信息可以不由变换处理器22和/或量化器24处理,而是可以提供给熵编码器26,作为比特流的一部分与量化系数一起编码。本领域技术人员将认识到用于实现H. 264编码器的细节和可能变型。
解码器50包括熵解码器52、解量化器54、反变换处理器56、空间补偿器57和解块处理器60。帧缓冲器58提供重构帧以便应用运动补偿的运动补偿器62使用。空间补偿器57表示根据先前解码块来恢复特定帧内编码块的视频数据的操作。熵解码器52接收并解码比特流14,以恢复量化系数。在熵解码过程中,还可以恢复辅助信息,如果适用,一些辅助信息可以提供给运动补偿环路,以用于运动补偿。例如,熵解码器52可以恢复运动矢量和/或针对帧间编码宏块的参考帧信息。然后,解量化器54对量化系数进行解量化,以产生变换域系数,然后,反变换处理器56对变换域系数进行反变换,以重建“视频数据”。可以认识到,在一些情况下,如对于帧内编码宏块,重建的“视频数据”是相对于帧内先前解码块的、用于相对于帧内先前解码块的空间补偿的残差数据。空间补偿器57根据残差数据和来自先前解码块的像素数据来产生视频数据。在其他情况下,如对于帧间编码宏块,来自反变换处理器56的重建“视频数据”是相对于来自不同帧的参考块的、用于运动补偿的残差数据。这里,空间和运动补偿均可以称为“预测操作”。运动补偿器62在帧缓冲器58内定位专用于特定帧间编码宏块的参考块。运动补偿器62基于专用于帧间编码宏块的参考帧信息和运动矢量来进行该操作。然后,运动补偿器62提供参考块像素数据,以与残差数据组合,得到针对该宏块的重建视频数据。然后,可以对重构帧/片应用解块过程,如解块处理器60所示。在解块之后,输出帧/片作为解码视频帧16,例如以在显示设备上显示。可以理解,视频回放机(如计算机、机顶盒、DVD或蓝光播放器和/或移动手持设备)可以在输出设备上显示之前将解码帧缓冲在存储器中。熵编码是所有无损和有损压缩方案(包括上述视频压缩)的基本部分。熵编码的目的是表示通常由独立但是不同分布过程建模为比特序列的假定解相关信号。用于实现该操作的技术必须不依赖于解相关信号如何产生,但是可以依赖于每个即将到来符号的相关概率估计。实际中使用两种常见熵编码方法第一种是可变长度编码,利用码字来标识输入符号或输入序列;第二种是范围(或算术)编码,对[0,1)区间的子区间序列进行封装,以得到单一区间,根据该单一区间,使用定义这些区间的概率分布,可以重构原始序列。典型地,范围编码方法往往提供更好的压缩,而VLC方法有可能更快。在任一情况下,输入序列的符号来自有限字母表。熵编码的特殊情况是输入字母表限于二进制符号时。这里,VLC方案必须将输入符号组合在一起以具有任何压缩可能,但是由于概率分布可以在每个比特之后改变,难以进行高效的码重构。相应地,范围编码由于其更大的灵活性而被认为具有更大的压缩,但是算术码的较高计算要求妨碍了实际应用。在一些重要的实际应用中,如高质量视频解码,熵解码器必须实现非常高的输出速度,对于具有有限处理能力或速度的设备而言这可能成为问题。对于许多这种设备,CABAC的计算要求过高。在一些熵编码方案(如CAVLC和CABAC,两者均在H. 264/HAV中使用)中使用的技术之一是上下文建模。对于上下文建模,输入序列的每个比特具有上下文,其中上下文由该比特之前的比特给出。在一阶上下文模型中,上下文可以完全依赖于先前比特(符号)。在许多情况下,上下文模型可以是自适应的,使得在处理序列的其他比特时,可以改变与给 定上下文的符号相关联的概率。参照图3,图3示出了编码过程100的框图。编码过程100包括上下文建模组件104和熵编码器108。上下文建模组件104接收输入序列X 102,在本示例中,x是比特序列Ov b1; . . . bn)。上下文建模组件104基于序列中的一个或多个先前比特来确定每个比特h的上下文,并基于自适应上下文模型来确定与该比特h相关联的概率Pi,其中该概率是该比特将是最小可能符号(LPS)的概率。在二进制实施例中,根据习惯或应用,LPS可以是“O”或“I”。上下文建模组件输出输入序列(即比特Ovb1,...!^))以及其相应概率(Ρ(ι,Ρι,...Ρη)。这些概率是利用上下文模型确定的估计概率。然后,将该数据输入熵编码器106,熵编码器106使用概率信息对输入序列进行编码。例如,熵编码器106可以是二进制算术编码器。熵编码器106输出编码数据的比特流108。本领域技术人员可以认识到,在许多实现中,上下文建模组件104可以接收更高阶数据,如系数和运动矢量等等,根据这些更高阶数据,上下文建模组件104产生输入比特序列及其相应概率。在以下描述中,参照用于对二进制序列进行熵编码的实施例。可以理解,所描述的过程可以推广至有限字母表的符号,二进制序列是一种特殊情况。本领域技术人员可以认识到对以下描述的一些方面的合适修改,以并入多于两个符号。码字产生一方面,本申请描述了采用编码树来解析码字的熵编码和解码过程。树的每个叶节点与来自主码字集合的码字相关联,树的内部节点与辅码字集合的码字相关联。编码树和码字的产生可以离线执行。输入序列可以理解为任意交织的η个输入源,其中η个源中的每一个与估计概率
值相关联。考虑概率的有限集合P= {pk|l彡k彡n,0<pk彡O. 5}。pk值被认为是最小可能符号(LPS)的概率值;其补具有I-Pk的形式并且属于最大可能符号(MPS)。实际上,根据上下文来确定对Pk(或等效地索引k)的选择以编码下一比特,上下文本身是根据编码历史来确定的。在上下文自适应或有状态编码中,概率Pk取决于输入序列的当前状态。概率的数目η可以根据多种因素来设置,包括期望复杂度。在H.264/AVC CABAC中,例如,数目η为64。对于P的每个pk,产生全二进制树,其中树中的每个路径定义比特序列,该路径中的每个节点(包括叶节点)表示具有Pku · (I-Pk)vB式的值,其中U是路径中LPS的数目,V是路径中MPS的数目。为了产生二进制树,对于P的每个pk,将符号(比特)组合为服从特定约束的序列Sk的集合。示例约束可以包括I.没有序列概率低于阈值。2.序列的数目小于限制值。3.对于Sk,存在有效码字集合。4.序列Sk的集合能够以给定实施例的结构来方便或有效地表示。 在一个示例实施例中,这些约束可以指定为I.没有序列概率低于2_16。2.序列|Sk|的数目小于4096。3.对于Sk,存在有效Huffman码字集合。4. Sk的元素具有能够以30比特表示的特殊形式。可以采用各种算法来平衡产生适合二进制树和相应码字的相关约束。二进制树产生过程得到针对每个索引k的两个Huffman码集主Huffman码集HLk和辅Huffman码集HNk。主Huffman码集HLk中的主Huffman码字与针对k的二进制树的叶相关联;而辅Huffman码集HNk中的辅Huffman码字与二进制树的内部节点相关联。换言之,每个主码字与序列Sk之一相关联;而每个辅Huffman码字与序列Sk的前缀之一相关联。以下将进一步解释,在特定环境下,输入序列可以在完成序列Sk之前终止,因此可以使用辅码字来编码前缀(Sk的部分完成序列)。得到的码集是可变-可变长度码集。码集写为两种形式对于源k,一种指定编码器树,另一种指定解码器树。编码器树的每个叶节点具有与其相关联的特定概率Pku · (I-Pk)vO因此,基于这些概率,可以使用前缀树码来对解析字进行编码。这形成了解码器树的基础。在一个实施例中,每个源k的编码器树可以包括例如链表中的主和辅码字,使用整数码用于每个节点以保存码字。在一个实施例中,每个节点的比特字段可以构造如下O. . . 15 :该节点的Huffman码(主或辅)16. . . 19 =Huffman 码的长度减 I20. . . 31 :左子节点的索引;对于叶节点为O在二进制树中,例如可以使用以下惯例左子节点对应于O比特。可以将表构造为使得右子节点在表中紧随左子节点之后。按照这种方式,编码器能够使用二进制输入序列,逐比特导航表。当编码器到达叶节点(如字段的索引部分所示)时,编码器知道Huffman码是主码字,并且可以针对该序列Sk输出该主码字。以下提供关于编码过程的示例实施例的进一步细节。在下表中阐述主码字的示例集合。针对Pk = O. 20来产生下表,其中概率阈值设为0.13(当序列概率达到小于O. 13的值时结束解析)。得到的树包含14个叶节点。总体而言,这实现了估计源熵O. 7250,仅比理论极限(pk*log(pk) +(l-pk)*log(I-Pk)) = O. 72191 0. 42 %。表I :示例主码集
丨解析序列I序列概率__
Γ^~OiT IMMiMiiH;I !010
Γ..................................HlU.....
权利要求
1.一种用于对输入符号序列进行编码的方法,所述方法包括以下步骤 将输入序列编码为多个码字,其中所述码字包括主码字和辅码字;以及 产生包括多个连续码字的比特流,其中关联码字类型指示符位于所述多个连续码字之前,其中码字类型指示符指定与其相关联的多个连续码字是否包括至少一个辅码字,以及在与其相关联的多个连续码字包括至少一个辅码字的情况下,进一步指定所述至少一个辅码字中的第一个辅码字的位置。
2.根据权利要求I所述的方法,其中,产生步骤包括预测连续主码字的数目,所述多个连续码字包含预测数目的码字,码字类型指示符指示所述预测是真还是假。
3.根据权利要求2所述的方法,其中,预测连续主码字的数目包括确定两个最新近辅码字之间的连续主码字的数目L,并将连续主码字的数目预测为近似O. 7L。
4.根据权利要求2或3所述的方法,其中,码字类型指示符包括指示所述预测是真还是假的标记,在假的情况下,码字类型指示符还包括所述位置。
5.根据权利要求4所述的方法,其中,如果标记指示预测为假,则在所述至少一个辅码字中的第一个辅码字之后插入下一码字类型指示符。
6.根据权利要求4或5所述的方法,其中,如果标记指示预测为真,则在所述多个连续码字之后插入下一码字类型指示符。
7.根据权利要求I至6中任一项所述的方法,其中,产生步骤包括在每个辅码字之后插入码字类型指示符。
8.一种用于对包含多个码字的编码比特流进行解码的方法,所述多个码字包括主码字和辅码字,所述方法包括以下步骤 读取比特流中的码字类型指示符;以及 基于码字类型指示符,在主码字解码树与辅码字解码树之间进行选择,并使用所选解码树来解码所述多个码字之一。
9.根据权利要求8所述的方法,还包括基于预定模型,预测连续主码字的数目,其中码字类型指示符包括指示所述预测是真还是假的标记。
10.根据权利要求9所述的方法,其中,选择步骤包括如果码字类型指示符指示所述预测为真,则针对预测数目的连续码字中的所有码字选择主解码树。
11.根据权利要求9或10所述的方法,其中,如果码字类型指示符指示所述预测为假,则码字类型指示符还包括预测数目的连续主码字内第一个辅码字的位置。
12.根据权利要求11所述的方法,其中,如果码字类型指示符指示所述预测为假,则选择步骤包括针对预测数目的连续码字中在所述位置之前的所有码字,选择主解码树;而针对所述位置处的码字,选择辅解码树。
13.根据权利要求8至12中任一项所述的方法,其中,主码字和辅码字不互斥。
14.根据权利要求8至13中任一项所述的方法,其中,主解码树和辅解码树分别包括主码字表和辅码字表、及与其对应的解码比特序列。
15.一种计算机可读介质,存储计算机可执行指令,所述指令用于将处理器配置为实现根据权利要求I至14中任一项所述的方法。
16.一种用于对输入符号序列进行编码的编码器,所述编码器包括 处理器;存储器;以及 存储在存储器中的编码应用,包含用于将处理器配置为使用根据权利要求I至7中任一项所述的方法来对输入序列进行编码的指令。
17.一种对编码数据的比特流进行解码以产生重构二进制序列的解码器,所述解码器包括 处理器; 存储器;以及 存储在存储器中的解码应用,包含用于将处理器配置为使用根据权利要求8至14中任一项所述的方法来对比特流进行解码的指令。
全文摘要
本发明描述了一种用于将输入符号序列编码为包括主码字和辅码字的多个码字的方法,以及一种用于对多个码字进行解码的方法。所述码字输出作为包括相关联码字类型指示符的比特流,码字类型指示符指定其相关联的多个连续码字是否包括至少一个辅码字以及在其相关联的多个连续码字包括至少一个辅码字的情况下,所述至少一个辅码字中的第一个辅码字的位置。解码器在主码字解码树与辅码字解码树之间进行选择,并使用所选解码树来解码所述多个码字之一。
文档编号H04N7/50GK102783036SQ201180011127
公开日2012年11月14日 申请日期2011年1月26日 优先权日2010年2月26日
发明者乔治里·弗伦茨·科罗迪, 何大可 申请人:捷讯研究有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1