专利名称:混合视频压缩方法
技术领域:
本发明涉及视频压缩,特别涉及一种用于压缩视频帧序列的方法和装置。
多媒体在日常生活中扮演着一个日益重要的角色。几乎在任何地方都可以发现数字视频图像(运动图像)。
数字视频中包含的信息量要求改进数字视频系统的传输带宽以及要求更高容量的存储设备。在后一个领域中的一个发展证据是近年来闪存半导体存储器模块容量的飞速增长。不幸的是,数字视频的信息内容非常多,这使得使用半导体存储器来存储视频数字数据是不可能的或至少是十分昂贵的。
例如,在无压缩的情况下,一分钟的全解析度(D1)数字视频需要1,866G字节存储容量。带宽可能达到248000kbit/s。
在20世纪九十年代早期,出现了名为MPEG1的视频编码系统,该系统能够将数字视频数据量减少到大概原始的1/30。由于质量问题,对这个系统进行了改进,并且名为MPEG2的视频编码器诞生了。这主要用于DVD和DVB系统。作为该系统的一个改进版本,MPEG4被设计用于面向互联网的、所谓的流媒体。
本发明的目标是一个高效的视频数据压缩系统。所提出的系统使得在半导体存储器模块中存储视频数据成为可能,允许利用低成本的RAM存储器模块来存储视频数据,这种RAM模块在计算机市场上很普遍。这样一种非机械的存储系统(即不包含运动部件的存储系统)可被有利地用在电视机和用于卫星和有线电视应用的所谓的机顶盒中,用于广播节目的中间存储,同时还作为常规磁带录像机的一种替代品。
应用本发明压缩方法的编码系统还可被有利地用于代替常规摄像机的机械磁带记录系统,例如在闪存中存储数字视频数据。
所提出的混合视频压缩编码系统使得数字数据流的带宽可被减少到300-600kbit/s,同时保留好的视频质量,这意味着对于两小时的视频仅仅需要4-500M字节的存储空间。
I.
背景技术:
已经有多种不同的方法被设计用于压缩视频帧序列。
在视频帧的编码过程中,为了维持期望的质量和期望的总体数据长度,编码数据量总是在最小和最大极限之间动态地变化。
通常,已知的软件程序根据对一个由x个帧构成的序列计算出的平均编码帧长度来执行压缩控制。如果平均长度超过了上一个平均长度值,压缩将会更强(压缩比增加)。如果平均长度小于上一个值,压缩比就会在指定的最小和最大极限值之间减小。
通常通过选择“更强的”量化来增加压缩比(在变换期间执行了一个“舍入”操作,见下文)。那会引起更高的错误率和噪声。错误通常在视觉上明显且干扰的,特别是在1Mbit/s的情况下。由于可压缩性因帧而异,在恒定期望质量的情况下,通常很难维持所期望的平均帧长度。
通常最小和最大长度值不能被设置过高,因为那样将会使得控制范围变得太宽,并且编码长度在过大的尺度上变化。通常的情况是,指定的最小值不能提供所期望的质量,因而有必要进一步提高压缩比。
I.1.MPEG方法MPEG是用于压缩视频数据的最普遍、最已知的方法之一。可以认为它是一种混合编码方法,因为它结合了基于空间冗余的压缩和基于时间冗余的压缩。
基于空间冗余的方法要么通过减少细节来减少帧的信息内容,要么通过识别并且利用帧中的重现特征。在另一方面,基于时间冗余的压缩方法利用先前和后续帧,并且仅仅对这些变化进行编码。
JPEG是用于静态图像压缩的已知方法之一。该方法也是基于利用空间冗余。将要被压缩的图像划分成块,并且使用离散余弦变换来减少这些块的信息内容。
为了更加容易理解本发明的创新特征,让我们简要地回顾已知的MPEG系统的操作。该系统的操作如
图1所示,图1显示了其功能单元。接收到的要被压缩的块通过输入线1被传递给选择器2。选择器2决定给定块是否是一个内部块、帧间块或预测块,并对其作相应处理。已经通过DCT(离散余弦变换)模块3和量化模块4的块,在熵编码模块13中被编码并且通过视频多路复用器14写出到输出15,进入即将被传输或存储的压缩输出数据流。内部/帧间块的变换数据(见下面的解释)是由反量化模块5,IDCT(反余弦变化)模块6和选择器7被重建的,并且这些数据最后被写入参考帧存储器8。如下面所详细解释的那样,量化模块4在本质上用量化因子来除DCT变换块的元素(DCT系数)。这些系数是由反量化模块5进行重建的,实际上是通过将它们与量化因子相乘。换句话说,反量化模块试图将DCT系数的原始值至少恢复到整除引起的错误所允许的可能的程度。这样做的目的是对每一帧或一帧内的每一块立即进行解码。由于该方法使用已解码的帧作为对下一帧进行编码的参考,有必要进行立即解码。这个过程不包括熵编码(解码),因为考虑到熵编码不会引起在已解码的参考帧中应当加以考虑的信息丢失,它将是多余的。
第一个帧没有参考,这意味着它总是所谓的内部帧(I帧)。因此,对于第一个帧,重复上面的过程直道整个I-型帧被处理。使用前导或后继帧作为参考帧的帧或块被分别称为P-型和B-型帧/块。
下一个接收到的帧的块被提供给运动估计模块10,该单元试图从存储在参考帧存储器8中的参考帧中为要被编码的块寻找一个参考块。
运动估计模块10使用找到的参考块执行运动补偿,接着由预测模块9从参考块中减去了要被编码的(原始)块,差被传递给执行上述变换的模块到选择器2,DCT变换模块3和量化模块4,接着到熵编码模块13,以及最后到多路复用器14。作为运动补偿的结果而产生的运动向量(MV)由熵编码模块12进行编码并且被传递给多路复用器14,该多路复用器将运动向量插入到输出数据流15。
模块7是一个选择器/和数模块,该模块对I-型块不做变动,而在P-型和B-型块的情况下,将找到的参考块与反变换的差数相加。这样重建得到的块最后被写入参考帧存储器。
在搜索中发现的位置被熵编码模块12转换成向量并且编码。
下面将更加详细的描述这些操作。
I.2.1.
依赖时间冗余的压缩系统仅仅对连续帧的变化部分进行编码。实际上,这是通过将帧划分成块并且将各个块与先前或后续帧的一个搜索范围内的像素逐个像素地进行比较而实现的。这个过程如图2所示,图2显示了正在位于先前帧16的搜索范围21或后续帧18的搜索范围19中搜索一个与帧17的给定块20最佳匹配的参考块。该参考块可以位于任何地方,并不需要与参考帧16或18中指定的搜索范围(灰色显示)相一致。当然在这种情况下,会出现在给定参考帧中参考搜索不成功的现象。显然,并未因参考搜索而将参考帧17,18划分成块,图2显示的块仅仅是为了更好的概述。
使用下面的表达式来进行比较MSE(k,l;u,v)=1MNΣi=0M-1Σj=0N-1(In(k+i,l+j)-In-1(k+i+u,l+j+v))2]]>其中MSE是所谓的均方误差,在本质上对待编码块与找到的参考块的各个像素的比较值进行了量化,所述的比较是逐个像素进行的,下标k,l是确定待编码块的位置下标,下标u,v是指向位于参考帧中的搜索范围的下标,以及M,N是该块的水平和垂直尺寸。
位于包含有待编码块的帧紧前面或紧后面的帧被统一称为参考帧。
在搜索过程当中,在参考帧中建立了一个典型尺寸为-32/32像素的搜索范围。当前待编码块的位置将被指定为搜索范围的中心。就是说,如果编码过程当前是在位置10,10,那么这个位置将会是参考帧中搜索范围的中心。用当前块逐步地扫描该范围并且在每一步计算出误差(上面指定的MSE值)。最佳参考候选将会是在该处的搜索给出最小误差的位置,就是说,与当前待编码块最佳匹配的块。基于该误差值,可以确定该搜索是否可以被认为是成功的。在成功搜索的情况下,查找到的参考块位置是在全解析度模式中获得的。然而,在大多数情况下,搜索结果是不满意的。
如果我们更加详细地检查该问题,很快就会发现导致过量错误(因而不成功的搜索)的原因在于错误估计方法。例如,在噪声帧的情况下,即使在最佳位置两个块都不可能是相同的,所述块的信息内容仅仅因为噪声而不同。当块的位移不是严格的像素尺寸的倍数时,位移在两个整数像素之间结束,即实际位移仅可以被严格地表示为像素尺寸的分数,这种情况也会出现。
因此,为了在当前块及其参考之间提供一个适当的匹配,应当过滤掉噪声以及其它干扰因素。通常低通滤波器被用于此目的。所述的滤波器根据预先确定的采样频率执行高频部分的衰减,并且因而能够在某种程度上抑制图片噪声。滤波器通常通过将每个像素与其旁边和/或上面的像素或两者进行平均来对误差进行补偿。例如,所谓的1/2像素解析度参考帧是通过在原始帧的每两个相邻像素之间插入一个像素来产生的,插入像素的值为两个相邻像素的平均值。如果从每两个相邻像素的平均值创建新像素,使用该新像素来创建一个与原始帧解析度相同的新帧,则结果基本上相同。实际上,在水平插值的情况下,这个帧相对原始帧被向左移了1/2像素,并且在垂直插值的情况下向上移了1/2像素。
I.2.2.
对于误差补偿,通常建议双线性滤波器。双线性滤波器包括创建三个插值(过滤)参考帧,即一个垂直插值,一个水平插值,以及一个既垂直又水平插值。应当记住一个参考帧被解码(重建)为一个编码的内部(或帧间)帧的变种。这么做是为了防止基于给定参考帧的更多帧被已解码的参考帧中存在的量化误差进一步恶化。
在下一个阶段中,搜索是以1/2像素解析度执行的(就是说,它是在经过滤波的参考帧中继续的)。根据匹配的x,y位置的位元,利用表达式S=(y&1)*2+x&1(这里&代表一个逻辑AND操作)生成了一个选择器S。
接着,建立了一个范围为-1/+1,-1/+1,即在点(x+(-1/+1)),y+(-1/+1))的新的搜索范围,用在第一搜索阶段(在未滤波参考搜索)中发现的最佳块的位置作为该范围的中心。
下面使用新的范围重复搜索。选择器根据位置来挑选所需的插值参考帧并且在帧中挑选由所述位置确定的特定块,并且计算相对于当前块的平方误差。在搜索的末尾,保留了误差值最小的位置。如此,从选择器所指的误差最小的块的像素中减去当前块的像素。这点被显示在图3中。在参考帧23中找到了一个与待编码帧22的块24相似或相同的块。当发现最佳匹配块25时,将其内容通过数据线28提供给Sad/Sub(比较)模块29,根据选择器在位置值的基础上利用表达式S=(y&1)*2+x&1所做的选择,所述的比较是使用下述一种参考帧执行的未滤波的参考帧,水平插值(滤波)参考帧,垂直插值(滤波)参考帧或双向插值(滤波)参考帧。这个过程仅仅涉及一个未滤波参考帧,该参考帧在本地被滤波(插值)。在前面滤波的三个参考帧(水平,垂直,以及双向插值)可用的情况下,该过程是相同的。在那种情况下,选择器从上述备选(未滤波帧以及三个不同的滤波帧)中选择一个适当的参考帧,并且提供处于位置x,y的块,用于进一步的比较和处理。
最后,或者是平方误差或者,在最小误差块的情况下,参考块25和待编码块24之间的差异被传递给输出30。
I.2.3.
接着,得到的差异(如果搜索成功)或者当前块本身(如果搜索不成功)被利用DCT变换从空间表示转换到频率表示。这样通过所谓的量化操作减少了不必要的数据精度。这在本质上涉及丢弃由DCT产生的高阶系数,因为这些系数通常很小。剩下的DCT系数也要么很小要么是零值,这些值以及上面建立的位置值可以用熵编码有效地编码。这个过程显示在图4-5中。
图4显示了对于一个内部帧的编码过程的示意性框图。输入帧31具有Y,UV格式,其中Y包含亮度信息并且UV包含颜色差异(色度)信息。帧31包括例如8×8像素大小的块。因而,各个块是8×8的矩阵,具有与给定的帧相关联的单独的Y和UV块。在下面,如果没有特别指出,Y和UV块同样地被编码,因此在图4中它们一般地用矩阵f(i,j)表示。在步骤31中在给定块上执行DCT变换的结果是由F(u,v)表示的矩阵,该矩阵也包括8×8的元素。在步骤33中修改矩阵F(u,v)单独的元素,我们获得了量化后的矩阵Fq(u,v),在图4中用参考数字37指代。正如在前面已经指出的那样,量化在本质上涉及减少不必要的数据精度,实际上是通过丢弃矩阵F(u,v)的某些元素实现的。从而,从此以后,原始块中包含的信息被包含在量化矩阵37中。在步骤34中使用差分脉冲编码调制(DPCM)减少了量化矩阵37的第一个元素,即所谓的DC系数。这在本质上意味具有相同数量级的后续块的DC系数被彼此相减,并且以这种方式获得了小振幅的DC系数,这些DC系数可以由步骤36中执行的静态霍夫曼熵编码更加有效地编码。所述矩阵的其它元素,即所谓的AC系数,使用所谓的游程编码进行编码,对于重复出现的系数游程编码仅仅记录出现次数和系数值(下面详细描述了该过程)。DC和AC系数是从8×8量化矩阵中遵循所谓的Z字形(Zig-Zag)扫描顺序提取的,如在矩阵37中所示的那样。因此这些系数是以频率增加的顺序被提供给熵编码器的,从低频系数开始,一直到高频系数。
I.2.4.
在不是内部块而是帧间编码块的情况下,图5显示了一个匹配和补偿的P-型块的编码。通过搜索来为待编码块42找到一个参考块43。块42位于其原始位置40,在当前待编码帧的块38之间。参考块43可以位于参考数字41所指示的位置。搜索是通过把待编码块42步进穿过参考帧的搜索范围39来执行的。如果找到最佳匹配,就从参考块43中减去待编码块42(或相反)来生成待编码块42和匹配的参考块43之间的误差。以这种方式,获得了误差的亮度44和色度45分量。在步骤46中,这些分量要经历DCT变换,量化,以及游程编码,并且最后在步骤47中,游程编码数据要经历进一步的熵编码。
由于原始帧在解码过程中不能作为参考,只有已解码的帧能被用作参考。这就是为什么有必要在编码过程中从已经编码的数据中重建参考帧。这么做最简单的方式是在量化之后立即执行反量化和反DCT变换。
在参考搜索成功的情况下,匹配的参考块被添加到反变换块,并且反变换块被写入当前帧的当前位置。因为这个步骤中获得的帧将用作下一个帧的参考,当前帧的所有块都需要被更新。
如果参考搜索成功,该块被划分为帧间块,而在搜索不成功时该块被划分为内部块。块分类数据对于解码器是必要的,因为它们指出该块在编码过程中是如何生成的。帧是按照相同的原则被分类的。
如果没有找到一个帧的参考(或者如果该帧相对参考帧发生的变化大到这样一种程度差分编码将需要与原始帧编码几乎相同的数据量),使用DCT对整个帧进行转换并且该帧被划分为I-帧。如果一个帧仅仅使用前导帧作为参考,它被划分为P-帧,而在该帧使用前后帧作为参考的情况下,它被划分为B-帧。
图6示例了对于B-帧,编码系统既在前导帧48又在后续帧50中来搜索待编码块C的一个参考49,最后要么让产生最小误差的帧作为参考,要么让两帧的线性插值平均值作为参考。
首先计算出匹配块P和C的MSE值,接着计算块F和C的MSE。接下来,该系统计算表达式0.5*(P+F)产生的块和块C的MSE,并且最终对产生最小MSE的备选块进行编码。就是说,在块C的MSE与前导帧48最相关时,所述帧48的块P变成了块C的参考块。在最佳结果是由紧随帧49的帧50产生的情况下,那么帧50的块F就变成了C的参考,以及如果最佳结果是利用F和P的平均获得时,那么这两块都被用作C的参考。如果没有足够好的结果,那么该块被编码成一个内部块。块描述符结构必须总是显示出参考的源,就是说,块C是如何编码的。
I.2.5.
在参考搜索成功的情况下,所建立的参考位置被转换成了向量并且这些向量被编码。这些向量指定了待编码块相对于参考的位移幅度和方向。
可以由以下事实说明使用DCT的合理性在部分系数被删除(被清零)的情况下,反DCT变换能够以很好的近似重建原始数据块。
可能会出现这个问题既然DCT仅仅是FFT的一个变种,为什么使用DCT?答案在于经验证明对于视频编码DCT给出了比FFT更好的功能近似。在图7中用一些具体值作为例子说明了这一点。FFT系数52和DCT系数53是通过在输入数据51上分别执行FFT和DCT变换产生的。量化之后(就是说,丢弃或删简系数之后),获得了删简的FFT系数54和删简的DCT系数55。反变换后,获得了IFFT重建数据56和I DCT重建数据57。用曲线58和59描绘重建数据,可以看出FFT对于系数删简更加敏感。
I.2.6.
量化的目的是减少帧数据的精度(详细程度),丢弃不必要的细节。
如果对一个给定块进行仔细检查,就可以注意到该块包含许多视觉察觉不到的细节。原因在于人眼的敏感度朝着较低的空间频率分量增加。因而,如果该帧的高频分量比低频分量衰减得更厉害,直到某个极限,虽然数据的压缩率增加了但在解码帧中视觉上察觉不到变化。MPEG1-2标准使用了这种量化。根据另一种已知的方法,忽略了系数的频率分布,因此每个系数将除以相同的常数(H26x-MPEG4)。量化最重要的功能是减少描述DCT系数的比特数。换句话说,希望用尽可能少的比特来描述DCT变换系数。描述一个系数的比特数越少,压缩率就更好。然而,当除数的值增加时,整除引起的错误也会增加。
还存在其它用于减少表示DCT系数的比特数的已知方法。例如,所谓的DC(增量码)预测是基于认识到位于连续DCT块第0个位置的值彼此之间仅有轻微差异。因此,如果从前一个DC值中减去当前的DC值,有可能减小DC分量的值以及表示这些值的比特数。(位于一个块第0个位置的系数被称为DC,而其它的被称为AC。)AC预测的过程与DC预测相似,差异在于以不同的方向来扫描系数,并且使用不同的方法来平均系数。对于AC/DC预测有许多已知的解决方案,因此不需要在这里详细的对它们进行描述。
II.
本发明的总目的是改进上面提到的已知方法的压缩效率,或更确切地,是以相对低的计算负载提供有效的压缩。利用附属于本说明书后面的独立权利要求中描述的发明方法已实现了该目的。
虽然上述方法可被有效地单独使用,但同时使用它们可以导致特别重要的改进,这一方面由于各个方法的效果被叠加了,另一方面由于各个方法关注压缩过程的不同阶段。
执行本发明方法的步骤的其它装置和软件(计算机程序产品),以及其它主要是对编码数据执行解压缩的逆方法,也是本发明的目的。
结合附图详细解释了本发明,其中图1显示了现有MPEG编码技术的示意性的框图,图2示出了发现帧间帧的方法,图3示出了用于比较参考块和待编码块的方法,图4显示了DCT变换、量化以及后面的熵编码的步骤,图5示出了从参考块中减去待编码块的方法,图6示出了在前导或后继帧中搜索参考帧的过程,图7显示了DCT和FFT方法之间的差异,图8是本发明的混合视频编码器的示意性功能图,
图9示出了内部块的预测模式,图10示出了如何从可能的预测模式中选择预测模式,图11显示了块分割编码的一个实施例,图12显示了使用不同尺寸子块的可能的块分割,图13示出了包括三个不同块尺寸的分割,图14示出了包括两个不同块尺寸的分割,图15a-c显示了可用于P和B帧的搜索模式,图16示出了使用减少的样本的参考搜索方法,显示了搜索过程中使用的块尺寸和块模式,图17显示了在根据本发明的方法中使用的插值参考帧是如何生成的,图18a示出了根据本发明在神经算术编码单元中选择(寻址)神经元,还显示了神经元组合在地址范围中的布局,图18b显示了用于根据本发明的神经带宽控制系统的一个实施例的神经网络示意图,图18c显示了用于根据本发明的神经带宽控制系统的另一个实施例的神经网络示意图,图19显示了在高度动态范围神经带宽控制系统中输入数据的数据路径的修改,图20示出了根据本发明的动态缩放方法,图21显示了在本发明的动态缩放方法中实现的传输信噪特征,与无动态缩放的特征进行了比较,图22是对利用根据本发明的方法编码的视频数据进行解码的过程的流程23是应用了根据本发明的方法的音频视频数据编码系统的示意框图,图24是一个系统的示意框图,该系统用于对依照本发明编码的音频和视频数据进行解码。
III.
图8示出了根据本发明的混合编码系统的逻辑结构(示意功能图)。该系统的主要功能单元在许多方面与图1所示的已知MPEG编码系统相似。输入视频数据60,换句话说,待编码帧被提供给帧缩放单元61,该单元根据许多不同标准(下面详细讨论),要么减少输入帧的尺寸要么对其不做改变。整个系统由编码控制单元62控制,在本说明书中稍后将对其确切功能加以阐明。依据内部/帧间开关63,根据内部或帧间编码编码这些帧或块。经过DCT变换模块64,量化模块65以及熵编码模块72之后,处于已变换、已量化并且已编码的状态的块被引导到输出73。由反量化模块66和反DCT模块67生成编码帧间帧所需的参考帧,重建的参考帧从这些模块通过一个解块(de-block)滤波器69被提供给帧存储器70。运动补偿,即产生滤波的参考帧以及补偿的运动信息74(运动向量及被减块)是由参考数字68指代的一个模块执行的(其解析度可以在1/2,1/4以及1/8像素之间调整)。帧存储器70存储当前参考帧,其中的块被自动地刷新(实现)。模块71执行对变化的识别,并且发现最适合用于跟踪帧中变化的块分割,并且模块71使用四杈树结构(后文详述)描述最佳块分割。熵编码模块72是一个所谓的神经算术压缩器(见下)。
下面我们将更加详细地解释根据本发明的编码(压缩)过程的某些特征。
本说明书中使用的术语“预测”,在某种意义上涵盖了可逆转的数学表达式,这些数学表达式利用实际的或潜在的可预期的相似性,基于一种实质上平均特征的操作,并且返回具有良好近似性的原始值。这意味着数据重建只能产生原始数据的近似值,换句话说,期望值是“预测的”。出于实践目的,使用一个特定函数来执行这些计算(通常涉及取平均操作)。
本发明的压缩方法本质上具有一种混合特性,因为它同时利用了时间和空间冗余。基于分层的块结构实现了压缩,该结构包含了尺寸动态变化的块。参考搜索不仅使用紧邻当前帧的前导或后继帧,还使用更多的前导或后继帧,最大深度为+1和-3个帧(就是说,允许在1个后继帧和3个前导帧中进行参考搜索)。由该方法实现了高级别的运动补偿,解析度范围从1/2到1/8像素变化。熵压缩器基于多级预测执行最优化的算术编码。
在下面,术语“内部预测”意味着一种可逆转的算术表达式,它基于一个或多个参考块中的值,减少或清除当前待编码块的像素值。
为了清楚起见,不得不指出在本说明书中参考了两种本质上不同的预测原则1.所谓的“内部预测”,用于对内部帧编码,以及2.用于神经熵编码的预测。
在适当的地方指出了这些预测原则。
IV.对待编码块的快速内部预测IV.1.
内部预测是基于观察到一个给定帧中相邻块通常具有相似的属性,因此这些相邻块之间的空间相关性可被用于减少信息。因而,使用上述的内部预测过程,可以根据与所选块相邻的一块或多块中预定像素的信息内容,来修改所选块(待编码块)的信息内容。在一个可能的方面,可以使用位于待编码块前面的块的垂直线76或位于待编码块上面的块的水平线77(就是说,其中的像素值)或二者来实现内部预测,如图9中所示意。另垂直线76被称为B,水平线77称为A。
让我们考虑一个具体的例子令221,224,230,232是位于待编码块上面的块的最后一条水平线77的元素。
令待编码块如下-------------------------------219,223,226,232219,224,224,231217,220,221,229214,220,221,228现在从待编码块的每条水平线中减去水平线77。我们获得如下预测块2,1,4,02,0,6,14,4,9,37,4,9,4这个例子使用水平预测。该预测的优点在于减少像素的比特,以及,由于可以观察到在水平线77中值从左向右增加的趋势,证明与待编码块中的情况相同,待编码数据的熵也提高了。得到的值的分布为2ד2”,2ד1”,2ד0”,4ד4”,2ד9”,1ד7”,这显示了比原始块更高的符号出现率。
定义了更多的变换/预测类型,通过应用其中之一,可以获得更好的熵。因而,在所提解决方案的一个实际的实施例中,对修改的(预测的)块进行了编码,而没有对原始的待编码块75进行编码。预测块这样计算的通过逐线地从待编码块75的水平或垂直线中减去邻接水平线77A或垂直线76B,或者从原始像素值中减去A和B的平均值,典型地利用公式(像素-(A+B)/2)完成该计算,并且从而获得所谓的预测块。本质上这是一个已知的解决方案,但是我们认识到,如果我们允许使用不同尺寸的块,甚至同时混合它们(通过这种方式我们通常获得了可被更好地压缩的块),则内部编码的效率可被显著地提高。然而,必须执行的大量计算使得这种解决方案本身不可行。在已知的方法中,是通过在预测块上有效执行DCT变换和熵编码而发现最终、最佳的压缩预测块的。只有在此之后,才能确定给定的预测块可被压缩的程度。然而,在以上步骤中发现的最佳压缩预测块只有在重建块(与原始块相比)的误差不太高时才可被使用。因此,为了测量误差还必须执行反变换。总而言之,需要极高的计算能力。
因而,根据本发明,在执行DCT变换之前,在待编码块上执行了一个可压缩性分析。基于上述可压缩性分析,使用DCT和熵编码对该块进行编码。然而,在大多数情况下,可压缩性分析显示值得通过将待编码块划分成进一步的子块来检查该块的可压缩性。在这种情况下,分析了与不同块分割变量相关的块的可压缩性,并且选择了能够实现最佳潜在结果的分割。最后,经过块分割以及紧随其后的内部预测之后,在所选择的、潜在最有利的块分割的基础上,执行了DCT变换。
IV.2.
下面将更加详细地描述这个过程。
正在图12中可以看到的那样,在所示的本发明的实施例中,可能的块尺寸为16×16,8×8,以及4×4像素。可以以多种方法来执行不同尺寸块的(内部)预测。这些被列举在后面的页中。
IV.2.1. 4×4块的预测定义了六种类型的预测。
1.DC预测令S0是预测向量如果存在A和B,那么S0=∑(Aj+Bj+4)/8否则,如果只存在AS0=∑(Aj+2)/4否则,如果只存在BS0=∑(Bj+2)/4否则S0=128因而根据下面的公式计算出了预测块DCP(j,i)=IB(j,i)-S0,其中j=0..3,i=0..3其中IB是待编码块,以及DCP是预测块。
2.水平预测DCP(j,i)=IB(j,i)-A(i),其中j=0..3,i=0..33.垂直预测DCP(j,i)=IB(j,i)-B(i),其中j=0..3,i=0..34.组合了水平和垂直预测的对角线预测T(0,0)=(B(3)+2*B(2)+B(1)+2)/4T(1,0)=(B(2)+2*B(1)+B(0)+2)/4T(2,0)=(B(1)+2*B(0)+A(-1)+2)/4T(3,0)=(B(0)+2*A(-1)+A(0)+2)/4T(4,0)=(A(-1)+2*A(0)+A(1)+2)/4T(5,0)=(A(0)+2*A(1)+A(2)+2)/4T(6,0)=(A(1)+2*A(2)+A(3)+2)/4DCP(j,i)=IB(j,i)-T(j-i+3)其中j=0..3,i=0..3
5.垂直对角线预测T(j,i)=A(3)其中j=0..3,i=0..3T(0,0)=(A(0)+A(1))/2T(1,0)=A(1)T(0,1)=T(2,0)=(A(1)+A(2))/2T(1,1)=T(3,0)=A(2)T(0,2)=T(2,1)=(A(2)+A(3))/2DCP(j,i)=IB(j,i)-T(j,i)其中j=0..3,i=0..36.水平对角线预测T(j,i)=B(3)其中j=0..3,i=0..3T(0,0)=(B(0)+B(1))/2T(0,1)=B(1)T(1,0)=T(0,2)=(B(1)+B(2))/2T(1,1)=T(0,3)=B(2)T(2,0)=T(1,2)=(B(2)+B(3))/2DCP(j,i)=IB(j,i)-T(j,i)其中j=0..3,i=0..3IV.2.2.根据类似的原则,可以实现尺寸为8×8像素的块的预测。
在这种情况下,定义了四种可能的预测类型1.DC预测如果存在A和B,那么S0=∑(Aj+Bj+8)/16否则,如果只存在AS0=∑(Aj+4)/8否则,如果只存在BS0=∑(Bj+4)/8否则S0=1282.水平预测
DCP(j,i)=IB(j,i)-A(i),其中j=0..8,i=0..83.垂直预测DCP(j,i)=IB(j,i)-B(i),其中j=0..8,i=0..84.对角预测DCP(j,i)=IB(j,i)-(A(i)+B(i))/2,其中j=0..8,i=0..8IV.2.3.最后,16×16像素块的预测也是类似的。
在这种情况下,定义了四种预测类型1.DC预测如果存在A和B,那么S0=∑(Aj+Bj+16)/32否则,如果只存在AS0=∑(Aj+8)/16否则,如果只存在BS0=∑(Bj+8)/16否则S0=128DCP(j,i)=IB(j,i)-S0,其中j=0..15,i=0..15(IB是当前块,DCP是预测块)2.水平预测DCP(j,i)=IB(j,i)-A(i),其中j=0..15,i=0..153.垂直预测DCP(j,i)=IB(j,i)-B(i),其中j=0..15,i=0..154.所谓的平面预测v=5*((∑(A(j+7)-A(j-7))*j))/4)/4h=5*((∑(B(j+7)-B(j-7))*j))/4)/4k=A(15)+B(15)T(j,i)=(k+(i-7)*h+(j-7)*v+16)/32DCP(j,i)=IB(j,i)-T(i),其中j=0..15,i=0..15IV.2.4.因此,在这个情况下,所提的方法使用了三种不同的块尺寸以及多达14种预测类型。很容易发现,如果应用了已知的方法,就会需要很高的计算机能力,因为所有预测和后续计算应该在16×16模式(就是说,在允许块尺寸为16×16的情况下)中被执行4次,在8×8模式中也是4次,以及在4×4模式中16次。
实际上,这意味着如果16×16尺寸的块没有被划分成子块,P→DCT→Q→IQ→IDCT→IP变换序列,以及后续的对系数的熵编码,以及确定原始和反变换块的MSE值,都需要被执行4次。如果允许将块划分成子块,根据上面描述的方法,总共的变换次数增加到16(4*4)或甚至96(6*16)次之多(虽然块尺寸较小)。
因此,对最佳预测块的选择是根据图10所示的流程图执行的。块数据79通过多路复用器/选择器80根据块尺寸,从上面列举的模式中选择当前的预测模式81。选择器82b可由用户设置为将预测块的块数据79直接地或通过一个哈达马(Hadamard)变换模块82a引导到处理单元82c。处理单元82c产生该块的绝对平方和,并用比较器83评估产生的和。在该值小于参考阈值的情况下,用该瞬时和覆盖所述的参考阈值,并由处理单元84将当前预测模式和预测块一起存储。接下来,多路复用器/选择器80为下一次预测选择模式,并且重复整个过程直到所有可用的模式——换句话说,与该块不同的潜在分割有关的所有预测模式——进行过测试。最后,确定最佳预测块以及产生该最佳预测块的预测模式。
处理单元82c使用下面的公式来对预测块进行叠加sum(i)=Σi=0Mabs(pixel(i))2]]>(方程I)其中M是块长度。
在某些情况下,可以证明上面的方法没有考虑空间频率是不利的。这就是包括Hadamard变换模块82a的原因。在计算平方和之前执行该变换,并且用户可以决定是否应用该变换。Hadamard变换的定义在下面给出。在产生了变换块的频率分量/系数的意义上,该变换与DCT相似。在大多数情况下,将会产生更加有效的预测,其中变换块包含更少的频率分量/系数。
在如上所述确定了最佳块分割和相应的预测模式之后,执行剩下的变换(DCT...)并且用熵编码模块对该块进行编码。
通过将本发明方法与已知的解决方案进行对比,可以看出我们的方法的质量/压缩比要好cca.1dB。虽然已知的方法可以实现更好的压缩,但它总是以质量为代价。然而,本发明方法提供了更好的图像质量以及实际上相同的压缩率。
本发明方法的另一个重要特征是如果执行了哈达马变换其计算负载大概是已知方法的1/10,以及如果不应用哈达马变换其计算负载大概是已知方法所需的计算负载的1/16。
由于为了成功解码必须以某种方法记录块的分割,因此根据所谓的四杈树结构对块进行分割。每个16×16像素的块可被想象成有四个子孙叶子的根,这些叶子依次可被进一步分解成四个其它的子孙,块尺寸减少到4×4。在图11中示出了这一点,其中在给定块的4×4像素的子块之一(03)中,显示了进一步的2×2像素子块,并且在其中一个2×2像素的块中,显示了各个像素。在该块的图像旁边的图示出了各个子块,或者甚至该块的各个像素在需要的情况下是如何被标识的。可以清楚地看到,随着解析度的增加,描述给定分割所需的数据量也增加。
这种分割方法(允许三种不同的块尺寸)被提出作为本发明方法的默认方法。然而,在另外一种实现中,可以由用户或系统本身将其改写,并且可以设置一种仅仅使用两种不同块尺寸的模式。这种模式将方便地属于整个帧,并且不会与三个块尺寸模式混淆,避免给定帧中的一个块是以两种块模式编码的,而另一个是以三种块模式编码的。
在本发明所提出的一个方面中的内部预测编码通过使用动态变化的块尺寸允许4种可能的模式(I-型)。因而,在整个I-帧编码期间,允许应用不同尺寸的块(下面列举了可用的块尺寸)。应当再次注意到,必须在该帧的头部结构中指出所选择的模式。在这个例子中,4种可能的模式如下●使用三种不同的、动态变化的块尺寸的编码(16×16,8×8,4×4)。
●使用两种动态变化的块尺寸的编码(16×16和8×8)。
●使用两种动态变化的块尺寸的编码(16×16和4×4)。
●使用两种动态变化的块尺寸的编码(8×8和4×4)。
在该方法的一个实现中,用户只可以在两种块和三种块模式之间选择,或者可选地,系统能够自动地选择最优的模式。因而,用户可以从下面的选项中选择1.使用三种不同的、动态变化的块尺寸的编码。
2.使用两种动态变化的块尺寸的编码。
3.自动选择上述选项的其中之一。
选择通常是由可用的计算能力所决定的,或者可选地,是基于对待编码帧的某些特征所作的估计。
图12示出了用在上述例子中的块尺寸。
下面让我们更加详细地讨论使用动态变化的块尺寸的内部预测编码的过程。
IV.3.使用三种不同的、动态变化的块尺寸的内部预测编码(I-型)Y块的大小为16×16,或换言之,使用了四个8×8像素的子块或十六个4×4像素的子块。
UV的大小是8×8,或者与Y块的分割相对应,使用了四个4×4像素的子块或16个2×2像素的子块(见图13)。必须注意到,只有在“帧间”模式中才允许UV色面上的2×2像素的块尺寸。
因为应用了三种不同的块尺寸,需要一种选择最优尺寸的方法。
如果我们打算根据已知的方法去做,我们不得不使用最大块尺寸来执行所有必须的变换,并且测量原始和重建块之间的误差。然后,在误差超过一个极限的情况下,该块将被划分成四部分,并且对每个子块重复变换和误差比较。那些误差大于一个给定阈值的子块将再次被划分成4个子块并且再次重复变换。
虽然这种方法很理想,但它涉及大量的、对于产生最终结果不需要的变换。
在一个块必须被划分成三个8×8和四个4×4像素的子块的情况下,需要在16×16块的两个方向上执行一组变换,也需要在两个方向上执行四组8×8的变换,还需要执行四组4×4的变换。其中,在16×16块上执行的一组变换以及在其中一个8×8块上执行的一组变换(DCT和熵编码解码)是多余的。因而,不得不执行这些不必要的恰恰具有最高计算负载的变换组。
因此,根据本发明,首先在块上执行了可压缩性分析。在本发明的一个方面,这是通过将该块划分成四个子块并且使用下面的公式计算出该块所谓的方差而实现的variance=Σj=0Mpixelj2-(Σj=0Mpixelj)2M]]>(方程II)其中M是子块的长度,并且通过检验是否满足条件方差≤TH8或方差≤TH16,这里TH8=对于8×8的块所允许的方差阈值,TH16=对于16×16的块所允许的方差阈值。
TH8和TH16是经验常数。如该公式所示,“方差”值对该块中可视细节的数量作了量化。
根据用户的选择,可以在计算前激活哈达马变换,但是TH常数将与无哈达马变换时计算中所用的常数不同。
如果所有子块的方差值都保持在+/-N%的范围内,并且所述方差值的和不超过预置阈值TH16,那么就可以使用最大块尺寸对该块进行编码。
如果上面的条件不满足,但是子块的方差小于TH8,给定的子块可以8×8的尺寸被编码。否则,8×8像素的子块还应当被进一步划分成4×4像素的子块。
当确定TH8/16的值时,应当考虑量化引起的误差,因为如果量化误差相对低,可以使用较大的块尺寸且得到满意的结果,对块再次划分就变得不需要了。
例如,TH值可以使用下面的表达式来确定TH(i)=TH基础值(i)*误差因子(qp),其中i=0..1且qp=1..MAXQP误差因子(qp)的值是从一张由qp索引的表中取得的,该值是基于量化因子QP而确定的。在这个案例中,由本发明的神经控制系统提供了所述的量化因子QP,将在合适的地方描述该神经控制系统,但是备选地,QP也可以是常数或利用另外一种已知的方法确定的。
误差因子表包含了从组合量化误差值生成的值,且误差因子值随索引值的增大而减小。
换句话说,更高的量化意味着TH更小的变化以及更严格的条件,或者再换句话说,一个块中可视细节的数量更多,并且更高的量化引起块尺寸收敛到较小的块尺寸值。
因为,如下面所解释的一样,块分割本身的编码需要相对高的数据量,检查是否值得允许使用三种不同的块尺寸是有利的。在仅允许两种不同块尺寸的情况下,为了记录块分割数据,只需对更少的额外信息进行编码。
因此,在本发明的一个方面,对整个帧进行了块分割分析,对每个块尺寸赋予一个统计量(就是说,确定了具有每个允许的块尺寸的块的个数)。如果对于所有块尺寸,每个尺寸的发生率都大致相同,并且我们使用三种块或自动选择模式,则继续该过程。否则,如果大多数块是两种主要块尺寸其中之一,那么就确定这些主要块尺寸,并且使用标题为“使用两种动态变换的块尺寸的内部预测编码”章节中描述的步骤执行该方法(下面的IV.4.章)。
该方法分两部分工作。
首先,在方差计算的基础上,对整个帧执行可压缩性分析,作为结果确定了最优块分割。在第二部分,利用那些为正在执行的最优分割而发现的预测来执行块分割,并且最后,利用那些被证明是最佳的预测,在属于所选择的块分割的每个块上执行编码和反变换。
虽然方差分析确切地指定了应该怎样分割一个给定块的各子块,但是必须以某种方式记录该分割。最明显的解决方案使用所谓的四杈树结构(在图11中示出)。
为了描述整个块,需要两个变量级。第一级的变量被称为L,而第二级变量用字母ABCD指代。在给定块未被分割的情况下,L被置为0(如果块尺寸为16×16那么L=0)。如果该块被分割,L被置为1。在这种情况下,需要另外四个比特来描述子块。
如果一个子块未被进一步分割(具有8×8像素的尺寸),相关比特的值为0。在该子块被进一步分割的情况下(分割成4×4像素子块),相关比特的值为1。例如L ABCD0 -------- 该块未被分割1 0000 该块被划分成4个8×8的子块
10001该块的前四分之一被划分成4×4像素的子块,其它块的尺寸为8×810010该块的第二个四分之一被划分成4×4像素的子块,而其它的尺寸为8×8如果该块被分割(L=1),有16种可能的组合,因此在这种情况下,对块的分割进行编码的数据(包括L)是5比特长,而如果该块未被分割,分割数据仅为1比特长(只有L)。
在完成块分割之后,执行与每个块相关的变换并且在熵编码模块中对已变换的块进行编码。
IV.4.使用两种动态变化块尺寸的内部预测编码如果分析决定使用两种块尺寸更有利,那么就使用已经确定的两种主要块尺寸。(图14显示了可能的子块配置。)使用两种块尺寸的编码以与我们上面描述的在本质上相同的方式执行,只有几个微小的调整。
在其中一个主要尺寸是16×16的情况下(其它尺寸为8×8或4×4),假如方差不超过极限TH16(就是说,该块满足16×16尺寸下的条件),将使用16×16的尺寸对该块进行编码,否则,在编码前将把它划分成8×8或4×4像素的子块。然而,如果两个主要块尺寸为8×8和4×4,那么在至少三个子块的方差值小于TH8的情况下(也就是说,该块满足所述条件),将使用8×8的尺寸对该块进行编码,否则就用4×4的尺寸。
其中只允许两种块尺寸的块分割的优点在于5比特的QT码(分割描述符)可由代表所选分割的单个比特代码代替(例如,对于一个16×16的基本块尺寸,0可以代表一个16×16的块,1可以代表4个8×8的子块)。
所有后续变换都与已经描述的相同。概括起来通过分析为该帧选择了两种块尺寸,并且使用它们编码整个帧。
图14的1,2,3部分示出了可能的子块组合。
因而,块编码过程如下进行1.根据可压缩性分析认为最佳的块分割将块划分成子块,2.为每个子块确定最佳预测子块,并且对预测块进行编码。
IV.5.从空间表示到频率表示的变换
IV.5.1.离散余弦变换(DCT)本身不是新的。对于所有块尺寸基本原理都相同。
离散余弦变换y(k)=c(k)Σn=0N-1cos2πk(2n+1)4Nx(n)]]>其中N是给定块中的元素个数,c(0)=1/√N,c(k)=√(2/N),1≤k≤N-1,×(n)是待编码块的第n个元素。
反DCT变换x(n)=Σk=0N-1cos2πk(2n+1)4Nc(k)y(k)]]>这些变换可以作为分解的矩阵-向量乘积实现,这极大地减少了计算量。
当前实现的方法是使用基于整数的2D变换实现的。由于存在几种有详细文档的在计算机上执行DCT变换的方法,没必要在此对其论述。
IV.5.2.哈达马变换X(b)=(12)n/2*Σa=0N-1X(a)(-1)Σk=0n-1a(k)b(k)]]>其中aa(n-1)...a(1)a(0)bb(n-1)...b(1)b(0)a(k),b(k)=0,1与离散余弦变换相似,哈达马变换是FFT的一个变种,其优点在于它仅仅包括矩阵形式的加法和减法。因此,它在计算机上可能执行的比DCT或FFT快的多。它也有一个重要的缺陷,即该函数是不连续的。这就是对于更高细节的块,为什么哈达马变换比DCT变换引起视觉上更加显著的误差的原因。这使得它适合于直接被应用到“扁平”(低细节)的16×16的块。由于16×16像素的块需要极高的计算量,无论何时只要16×16的块需要被变换,优选使用哈达马变换。应当在这儿注意到,在一个特定的实施例中,如果给定块有足够低的细节水平,根据本发明执行的方差分析仅仅允许使用16×16尺寸的块。
IV.6.在块或子块的DCT变换和熵编码之间执行的步骤就是所谓的量化,在量化过程中,为了能够利用熵编码模块进行更加容易的编码,根据特定的规则对DCT变换块的矩阵元素作了修改。
根据本发明使用的方法与标准的MPEG量化相似,并且使用下面的公式实现qcoeff(j)=((data(j)*16)+(matrix(j)*0.5)matrix(j)*(217QP*2+1))/217]]>其中,qcoeff(j)是与量化之后的DCT变换块对应的矩阵的第j个元素,data(j)是与量化之前的DCT变换块对应的矩阵的第j个元素,matrix(j)是量化矩阵的第j个元素,以及QP是量化因子(一个标量值)。
反量化data(j)=(qcoeff(j)*2+1)*matrix(j)*QP16]]>量化矩阵matrix(j)与DCT变换块或原始块本身具有相同的尺寸(例如16×16,8×8等)。
由本发明方法提供的解决方案与已知的MPEG量化方法的不同在于它根据量化因子来选择量化矩阵matrix(j)。已知的MPEG量化使用单个matrix(j)量化矩阵。
量化矩阵和QP量化因子之间的对应关系是通过将整个量化域划分成N个子域而实现的,每个子域都被赋予一个先前指定的带宽范围。在本发明的一个实施例中,QP在1和36之间,该区间被划分成如下的多个(在一方面,为四个)子域(1-4),(4-8),(8-20),(20-36)。
赋予这些子域的带宽范围是(6000-1000k比特/s,800-1000k比特/s,400-800k比特/s,100-400k比特/s)。
这意味着向划分的QP域分配了一个优化的4×3矩阵表(对应于三种不同的块尺寸),该表的每个元素是整个量化矩阵matrix(j)。
由于matrix(j)的尺寸与块尺寸相同(4×4,8×8,16×16),向这些块尺寸中的每一个分配了单独的矩阵,并且这样,该表的每一行包括三个单元(换句话说,向每个子域赋予了三个矩阵)。
因而,在该方法修改QP的情况下,向新的量化因子赋予了与给定带宽相对应的最优表行(最优矩阵)。
IV.6.对量化的系数进行编码在本发明的压缩系统的一个具体实现中,实现了三种不同的用于对系数进行编码的方法。虽然这些方法的基本原理众所周知,为了清楚起见,下面将对它们作简要解释。
IV.6.1.基于离散余弦变换的DC值之差分的编码方法正如其名字所显示的,这种方法包括对连续块的DC值彼此相减的步骤以及使用一种算术编码方法(算术编码的原理众所周知并在本文后面详细说明)对得到的差分进行编码的步骤。
Xdpcm=X(i)-X(i-1)该方法也被称为差分脉冲编码调制(DPCM),并且基于观察到连续DC值之间的差分通常很小,因此可以用比这些值本身更少的比特对差分进行编码。因为本发明方法使用多种块尺寸,注意到只有相同尺寸块的DC值可被有利地彼此相减很重要,因为块尺寸确定了DC系数的大小。
该算术编码方法对每种块尺寸使用专门的参数进行编码(对编码区间的细分,编码区间的上限/下限,等)。
IV.6.2. AC值的游程编码以及对得到的压缩值的算术编码AC系数是通过所谓的Z字表(Zig-Zag表)的方法(见图4,37)获得的并且用已知的游程方法压缩。
游程编码方法生成有序对(系数出现次数),其中后面的值表示给定系数在数据序列中出现的次数。由于一个给定块中有序对的总数无法预计,要么说明有序对的数量,要么在最后一个有序对之后插入块结束码。
如果最后有序对的系数值为零,不需要对所述的最后一个有序对进行编码——将块结束码写入序列就足够了。系数-出现次数对以相反的顺序(出现次数系数)被写入待编码的数据序列。原因在于以这种方式,零值的出现次数参数可被用作块结束码(当然没有对应的系数),因为如果所有有序对都是有效的,就不会发生出现次数为零的组合,因此该该码可以被安全地用作块结束码。
如果该块在编码前仅包含零值,那么只有块结束码被编码。在这种情况下,在块重建过程中,在解码前将给定块清零(用零填充)。由游程方法产生的对最后也用算术编码进行编码。
IV.6.3.使用常规参数和由神经网络方法预测的参数的AC值算术编码在这种方法中,直接使用算术方法对AC系数进行编码,而不用中间的游程编码。在根据本发明在编码器中实现的方法之一中,执行算术编码,以便通过一个模函数由先前编码的系数的值确定当前系数被编码时所处的级别(在许多方面,这与无神经网络的常规算术编码很相似)。该模函数通常仅仅确保在多于一个的相同的AC系数彼此相邻时,这些系数在同一级别被编码。神经算术编码模块的工作原理将在本文的后面详细解释。在这里提到下面一点就足够了在本发明的神经算术编码器中,没有依赖于AC值的参数(区间范围,区间细分)。没有使用块结束码,相反,通过输出实际的位置加一,记录了被变换且被量化的块中最后一个非零AC系数的位置。这是必要的,因为如果在一个块中所有的AC系数为零,有可能通过输出一个零来指出在输出的数据流中没有更多的与给定块相关的数据被编码(换句话说,该块仅包含零)。
例如位置0 1 2 3 4 5 6 7系数63 11 21 32 0 0 0 0输出3 63 11 21 32其中3指出了最后的有效(非零)位置。然而,这种安排不能够指出所有数据为零的情况,因为如果在位置0发现1,我们应该仍然为最后一个有效(非零)位置编码一个0。因此,除了所有的数据都为零的时候,位置值增加1。
因此输出数据序列如下4 63 11 21 32,或者如果全部为零,输出仅为0。
作为上述方法的一个备选,可以设想对每个处于预定水平的系数都编码一个0,并且如果达到最后一个非零值,则编码一个1。
例如水平00 0 0 1其中“1”指示了最后一个非零数据水平163 11 21 32在根据本发明实现的编码模块中,上面描述的两种方法之一被用于为熵编码准备AC数据。然而,也可以利用其它变换而不背离本发明的范围。
IV.6.4.在熵编码过程中,在测试模式中执行了方法2(见IV.6.2章)以及方法3(见IV.6.3章),并且最后应用产生较短数据序列的方法。当然,必须在编码的数据流中以某种方式标识出所选择的方法。
依照本发明,总是执行(编码DC系数的)方法1,并将已编码数据写入输出数据流,随后利用神经熵编码模块对其进行编码。当然,也可以利用其它已知的熵编码方法。
为了清楚起见,让我们考虑使用方法2和3时(分别在IV.6.2和IV.6.3章)单个子块的输出数据流的格式(在它进入算术编码器之前)。
2.|0|PRED|DPCM|AC|EOB或当全部为零时为|0|PRED|DPCM|EOB3.|1|PRED|DPCM|POS|AC或当全部为零时为|1|PRED|DPCM|EOB其中起始比特标识了编码模式PRED预测类型DPCM由差分编码所编码的DC系数AC 一个或多个AC系数POS AC系数的位置EOB 块结束字符。
对整个16×16块编码的格式
|QT=0000|
,
,
,
其中QT(四杈树)是在块被划分成四个子块并且每个子块应用类型-2编码的情况下描述块分割的数据。
或者|QT=0001|
,|
(2×4×4)
,|
(2×4×4)
,(1×8×8)
,
(2×8×8)意味着16×16的块包含三个未被再划分的8×8子块,以及第四个(事实上首先到来)被再划分成四个4×4子块的8×8块。
IV.7.UV色面的内部预测编码在已知的MPEG编码方法中,给定帧的像素数据从RGB被转换到所谓的YUV2格式。这里Y代表亮度信号,而UV是色差(色度)信号。
UV表面的物理尺寸被缩小到相对于Y的一半(虽然这引起了数据丢失,但已经证明这种丢失是可以接受的,并且不会导致质量上的严重下降)。
因而,对每个16×16的Y块,都赋予一个8×8的U块和一个8×8的V块(如图12中所示)。
这样,当将U和V块分割成子块时,只有8×8和4×4尺寸的块是适合使用的(因为2×2像素的子块不会比4×4或8×8的块压缩地更好,它们不值得使用)。实际上,以与已经描述的相同的方式进行对块分割的分析,最重要的区别在于,这里仅仅使用了TH8方差阈值进行比较。必须记住,与方差比较的TH8是一个经验值,而方差是以类似于方程II的方式计算出来的。如果被测试块的方差满足条件TH8≥方差,那么使用8×8尺寸对该块进行编码,否则使用4×4像素的尺寸。
对于U块和V块的预测,仅仅利用了DC预测(经验显示使用其它预测模式的增益是微小的)。
其它变换与上面描述的相同。唯一的区别在于量化步长(量化阶)。
数据块的输出格式(在算术编码之前)如下|0|M|DPCM|AC|EOB或当全部为零时为|0|M|DPCM|EOB|1|M|DPCM|POS|AC或当全部为零时为|1|M|DPCM|EOB其中M是表示块分割的比特。例如,如果该块未被分割则M=0,如果它被分割则M=1。
现在让我们回到所谓的“帧间”块的编码,其中在另外一个帧中为该待编码块搜索参考块。
V.使用动态变化的块尺寸的帧间预测编码V.1正如已经指出的那样,帧间编码是基于时间冗余的。这意味着将当前帧与前导帧或后续帧作了比较,并且只对两个帧之间的差异进行了编码。该方法的参考搜索模式如图15所示。下面的备选搜索是可行的仅在三个前导P-型帧中搜索(图15a);仅在两个前导B-型帧中搜索(图15b);在前导和后续运动补偿参考中搜索(图15c,在这种情况下,B-型帧通常不能用作参考)。
该方法的基本原理与已知方法相同在参考帧中指定的搜索范围内为待编码帧执行搜索,接着将冗余信息(差分块)与参考块的位置(或更确切地,运动向量)一起编码,并且这里差分块是通过从位于所述搜索确定的位置上的块的各个像素中减去待编码块的对应像素而计算得到的。
在可能的搜索方法中,最佳结果将由所谓的“完全搜索”产生。然而,这种搜索将带来巨大的计算负载,因为当在搜索范围中所有可能的位置搜索一个匹配块时,它涉及将16×16的块与位于从该搜索范围的每个像素开始的搜索范围中的数据进行比较。实际上,对于一个32×32像素的搜索范围,这将意味着1024*256=262144次加法和减法以及用于确定差分绝对值的操作,而仅仅为了找到一个匹配的16×16的参考块。由于一个720×576像素的帧包含1620个块(大小为16×16像素),全部计算术量将超过424百万。这就是为什么出于实际目的,通常应用所谓的“快速搜索”而不是完全搜索。“快速搜索”方法应用较少的测试点(典型地小于64),并且有这样的缺点只有在位移较小时(典型地小于1-4像素),就是说,视频连续镜头(footage)中的运动较慢时,该方法才是成功的。
在位移较大的情况下,成功搜索的概率迅速下降。快速搜索方法的另一个缺点在于,即使搜索看起来成功,不能确定所发现的位置是搜索范围内的最小点(最佳参考块的位置)。
实际上,本发明中实现的搜索方法可被认为是一种“完全搜索”,在慢速运动的情况下,该方法仅比真正的完全搜索方法高少许的计算负载。即使在较快运动(更大位移)的情况下,本发明方法的计算负载仅仅是标准“完全搜索”方法所需的负载的一部分。
V.2根据本发明实现的搜索方法是基于所谓的“螺旋搜索”,该方法实际上执行如下。
V.2.1在参考帧中指定了一个搜索范围。搜索范围中心的坐标与搜索样本(待编码块)中心的坐标相同。
在下一步骤中,搜索样本,就是说,待编码块88被划分成较小的子块(见图16)。在本发明的一个实施例中,使用4×2的子块产生了良好的结果。现在,使用一种与方程II相类似的表达式,为每个子块计算方差值。如果至少有两个子块的方差值大于所有其它子块的方差值,它们的方差和大于预定义的经验常数THV22,并且两个子块没有邻接(例如子块88b和88c),那么在搜索过程中仅仅测试16×16的块88的这些子块。
在条件THV22≤方差1+方差2不满足的情况下(这里方差1和方差2是两个方差最大的非邻接子块的方差值),那么用四个方差最大的非邻接子块重复上面的操作,将这些子块的组合方差与另一个常数THV24进行比较(这由块89的子块89a,89b,89c,89d示出)。
如果对于四个子块的方差,该条件仍然不为真,则将所有子块合并成4×4的子块,并且利用常数THV42和两个子块重复上述操作,并且如果需要,利用常数THV44和四个子块重复上述操作(见块90的子块90a,90b),在后面的情况中试图发现四个方差最大的非邻接子块。
如果在上面任何一种情况中各个条件都不满足,则使用位于该16×16块的四个角和中心的五个4×4子块执行参考搜索(图16)。
常数THV指定了上面每种情况中子块的组合方差应当等于或超过的最小方差。
上面详述的过程可被直观地概括为试图在16×16的块中发现最详细的子块,假定它们在搜索范围中有匹配的参考,其它细节较少的子块也有合适的参考。
在参考帧中符合搜索样本的位置处指定了螺旋的中心,并且接着在加宽的周期中用减少的搜索样本测试指定点周围的块,如上所述。样本模式子块的相对位置保持不变,对该搜索范围进行扫描。
V.2.2根据下面的公式执行测试MSE=Σj=0Mabs(A(j)-B(j))2]]>其中M是块长度。
MSE是所谓的均方误差。每次发现MSE值小于当前计算出的最小MSE时,将新的MSE值与当前位置一起写入临时缓冲区,例如一个64元素的循环缓冲区。如果该缓冲区是满的,从第一个元素开始重写数据。
优选地,通过也从其它方面分析所获得的MSE值,可以对该搜索方法进行微调。例如,如果搜索发现多个满足匹配条件(例如MSE小于最大允许误差)的位置,且这些位置从起点看来位于相同方向(在同侧),并且当搜索离开这些位置的区域时误差随之增加,那么可以中止该搜索,因为很有可能该搜索离开了最优点。
在搜索的结尾处,在已经测试了每个点或中止了搜索之后,循环缓冲区包含了可能是最佳参考位置候选的那些位置。(在1024个可能的位置中,仅保存了少量位置,例如按照上面的例子,64个位置。)接着再次测试了这些存储的位置,但这次用整个16×16的块,并且确定了产生最小误差的位置。
V.2.3.现在,将从待编码块以及新建立的参考块计算出的SAD16值(绝对差分和,下标指示块尺寸)与一个经验常数MAXSAD16进行比较。使用下面的公式来计算SADSAD=Σj=0Mabs(A(j)-B(j))]]>其中M是块长度,A和B代表参考块和待编码块的元素。
常数MAXSAD16指定了与一个16×16块相匹配的参考块的最大可接受误差。如果由上述搜索找到的块的误差不可接受,在当前帧的前导或后继帧中(依赖于帧类型)重复参考搜索。如果没有能够给出可接受结果的参考帧,就选择产生最小误差的那个。接着该块被分割成四个4×4的子块并且为每个子块计算出了SAD8的值并将其与(经验)常数MAXSAD8进行比较。
此后,测试包含在与参考帧相关的缓冲区中的位置,并且选择其中能够产生可接受结果的8×8子块最多(满足条件SAD8≤MAXSAD8)的参考帧和位置。
对于有过多误差的每个子块,使用8×8的块尺寸在一个减小的搜索范围内从给定子块的位置开始重复该搜索。如果误差仍然超过极限,将由8×8搜索发现的最佳子块再次细分为4×4的子块,并且在满足条件SAD4>MAXSAD4的子块上重复该搜索。
如果一个特定块的所有子块都必须被细分为4×4子块,那么对于这个特定块,在当前参考帧中搜索不成功的情况下,可以在所有参考帧中重复参考搜索。
如果搜索结束后发现各个子块的误差仍然过多,就对搜索不成功的块进行标记。在本方法的后续步骤中,这些块将作为内部块编码。
在所有参考帧中搜索意味着,如果例如在第二个帧中得到满意的结果而搜索结束,那么就不会在第三个帧中继续搜索。
V.3.处理16×16分割的块如果在16×16块的情况下,在当前帧中参考搜索不成功(没有发现参考块),并且当前帧是P-型,就在前导P-型参考帧中重复搜索,最大深度为3帧。如果搜索成功,就会纪录参考帧的编码,并且结束搜索。否则,该方法选择误差最小的帧,将该块划分成四个8×8子块,并且在这些误差超过极限的子块中继续搜索。如果当前帧是B-型,首先在后继P帧中执行搜索,接着在三个前导P帧中执行搜索。如果在B-型帧情况下,在所有参考帧中搜索都不成功,就会根据后继帧和其中一个前导帧产生一个平均参考块,这是通过使用MPEG方法中应用的简单表达式,对后继帧和其中一个前导帧中发现的最佳候选参考块的位置进行插值而实现的。如果产生的插值块和原始块之间的平方误差仍然太大,就选择误差最小的参考帧,并且将该块划分成四个8×8的子块。
V.4.处理8×8分割的块
8×8块的处理几乎与16×16块的处理相同,区别在于如果在处理结束时搜索仍然不成功,将块再次细分成4×4像素的子块。
V.5.处理4×4分割的块4×4块的处理几乎与8×8块的处理相同,唯一的区别在于,在搜索仍然不成功的情况下,该误差块被标记为内部块。
V.6.以1/2,1/4和1/8像素解析度扩展搜索当以全像素解析度对块的处理结束之后,以1/2,1/4和1/8像素解析度执行搜索(在滤波/插值的参考中搜索)。唯一的例外是B-型帧的插值模式,在插值前必须执行1/2,1/4和1/8像素解析度的搜索。因为1/2,1/4和1/8像素解析度的搜索在本质上与本文中前面描述的已知方法相同,这里就不再解释该过程。
在实现的方法中,向每个帧最多赋予三个参考帧。它们的区别在于其尺寸以及产生它们的滤波方法不同(见图17)。
每个搜索过程使用一个相关的参考帧。1/2和1/4像素解析度的搜索使用1∶4比例插值的参考帧,而1/8像素解析度的搜索使用1∶8比例插值的参考帧。全像素搜索使用1∶1比例插值的参考帧。由于实际上插值的参考帧和滤波器的使用是众所周知的,这里不需要对其进行详述。
与前面的情况类似,应用了一种螺旋搜索,但这里由于极大地减小了搜索范围,测试点的数量小于20。通常,只有在SAD=0时才中止搜索(当前块和参考块完全匹配)。可以用每个块尺寸执行搜索,但不进行块简化(就是说,只有整个块而不是子块被比较),这意味着对一个16×16的块进行测试涉及到256个减法操作。
当从匹配的参考块减去待编码块之后,将得到的简化块从空间表示变换到频率表示。
V.7.
在为16×16的块查找参考块以及分割参考块的过程成功完成之后,待编码块也被划分成相同尺寸的子块,并且从参考块的子块中减去这些待编码块的子块。接着,这些差分要经历离散余弦变换和量化,并且对得到的块中包含的系数应用了AC/DC预测。与内部块的预测过程类似,该预测方法生成了变换块的DC值之间的差分,并且在AC系数的第一水平/垂直线上应用了水平/垂直预测。该方法和前面方法的区别在于上面描述的内部预测从待编码块的像素值中减去了邻接像素的实际像素值,而在这里从DCT变换块的元素中减去了邻接DCT变换块的元素。该方法进一步提高了熵编码过程中变换块的编码效率。
关于应当应用哪种预测模式(水平或垂直)的决策是根据变换块周围块的DC系数之间的差分作出的,其中块的相对位置可能如下CBAX其中X代表正被处理的变换块,而A,B,C是周围块。
预测模式(pred)是通过下面的条件表达式选择的pred=abs(A-C)<abs(C-B)其中,A,B和C是正被处理块的周围块的DC系数。
如果条件为真,应用垂直预测,否则选择水平模式。由于确定预测模式的相互关系在执行块重建时可用,不需要在输出中纪录所选择的模式。
V.8.
本节给出了用于描述块分割的数据的一种可行的数据格式和编码方法。
对待编码块的块分割的描述与论述内部帧的小节中给出的相似。
L是一个最大2比特长的值,它描述了16×16块的分割。如果该块没有被划分则比特1为0,如果它被划分则为1。如果该块被标记为内部块则比特2为1。当每个8×8子块被再次划分成4×4子块并且超过50%的这些子块被标记为内部块时,会发生后一种情况。在那种情况下,系统将根据对内部块编码的过程对给定块进行编码。
熵编码之前的数据如下RFIDX是所应用的参考帧的帧号MV是运动向量DC是离散余弦变换的第一个系数以及
AC代表其他的DCT系数IP指示了B帧的插值模式I代表内部模式P是内部模式预测的编号用于P帧的模式如下模式0|L|RFIDX|MV|DC|AC模式1..15|L|QT|RFIDX|I|MV|DC|AC...I|MV|DC|AC用于B帧的模式如下模式0|L|RFIDX|IP|MV|DC|AC模式1..15|L|QT|RFIDX|I|IP|MV|DC|AC...I|IP|MV|DC|AC如果I=1,对给定块的描述变为|I|P|DC|AC。
让我们看两个P-型帧的具体例子1|0001|2| 1|0001|0|0 MV4 DC4 AC4 1 P DC4 AC40 MV4 DC4 AC4 0 MV4 DC4 AC40 MV4 DC4 AC4 0 MV4 DC4 AC40 MV4 DC4 AC4 0 MV4 DC4 AC40 MV8 DC8 AC8 0 MV8 DC8 AC80 MV8 DC8 AC8 0 MV8 DC8 AC80 MV8 DC8 AC8 0 MV8 DC8 AC8四个4×4块和四个4×4块,其中第一个是内部块三个8×8块 三个8×8块(在这个例子中,变量“AC”通常代表多个数据元素。)已经对16×16块的Y色面进行编码,下一步是对UV色面进行编码。该块的尺寸与Y块以及其中子块的尺寸是成比例的。
在Y块的尺寸为16×16像素的情况下,UV块的尺寸为8×8像素,如果Y块的尺寸为8×8,那么UV块的尺寸为4×4,并且最后,对于一个4×4的Y块,对应的UV块尺寸为2×2。
另外,U和V块的分割与Y块的分割相同。执行UV块的分割的方法与Y块的相同。因而在编码过程中,只有DC和AC值在熵编码之前必须被顺序地写出,因为所有其它数据(块分割描述符,块标识符,等)已经在Y块中进行了描述。
V.9.宏块(运动向量和帧间块)的预测为了对运动向量(就是说,指示相对于参考块的运动的向量)进行最优编码,优选地,运动向量以尽可能短的格式表示。这点可以通过从当前运动向量中减去属于位于当前块旁边、上面或斜上方的块的运动向量而实现。在这三种可能的邻接运动向量中,选择了与平均值最接近的一个,或换言之,选择了比最小值大但比最大值小的那个。
V.10.最后,使用熵编码模块对数据进行编码。下面我们将注意力转到对本发明的二进制多级算术编码模块的描述。
VI.神经算术编码模块根据本发明的熵编码模块使用了二进制自适应技术。这意味着在关于已经接收的比特模式和出现频率的函数中,逐比特地对输入数据进行处理。
VI.1.该方法的首要设计目标是以相对简单的计算获得最大可能的压缩。本发明方法可以不用除法实现,仅仅执行两次乘法和几次加法以及逻辑操作。所有其它操作都是基于整数的。
本发明方法是所谓的算术编码方法。算术编码本质上是一种已知的方法。算术编码的基本原理涉及根据接收到的待编码数据序列的数据修改一个区间(范围)的上限和下限。只有即将到来的数据的分布在某种程度上已知时,换言之,如果对于下一个输入数据元素的值的概率估计在某种程度上已知时,算术编码器才真正有效。
下面的短小算法在二进制数据流(仅包含0和1符号)上执行了算术编码。当前待编码的数据(数据流的下一个比特)被存储在“bit”变量中。编码区间的上限和下限是变量“area
”和“area[1]”。
area[inverz(bit)]=area
+(area[1]-area
)*prob216+bit]]>if((area[1]-area
)<256){outdata=area[1]224]]>area
=area
*28area[1]=area[1]*28}prob=calc_next_probe(bir)提高编码效率的关键因素是如何确定“prob(概率的)”变量(下文中probe(探查)值或probe)的值。在上面的例子中,probe值由“calc_next_probe(bit)”函数返回。
数列“array
”包含两个32位值,即“area
”和“area[1]”变量,它们存储了编码区间的上限和下限。从算术编码理论可以得知,利用probe值缩放区间(area
,area[1])。在已知的方法中,prob值通常是作为先前到达的比特的出现频率的函数而确定的。根据新接收到的比特的值,用所述比例值修改编码区间的下限或上限。可以修改该区间(可编码新比特)直到上限和下限的差变得小于256。原则上,还可以使用其它值,但为了对付溢出,256似乎是最实用的值。因而,当上限和下限的差变得小于256时,将8个最高有效位写入输出数据序列,并且表示下限和上限的变量被向左移动8个位置。
这可以用算术形式写为area[1]=area[1]*256area
=area
*256VI.2.对probe值的确定如下我们引入频率表的概念,并且定义两个用于描述到达数据序列中0和1的出现频率的函数,f(0)和f(1)。接收到的比特被提供给一个长度为m比特的缓冲区,其中2m=N,因此N的以2位底的对数提供了窗口宽度。
顺序到达缓冲区的比特构成了“窗口”变量(根据需要向左移动缓冲区内容)。将“窗口”变量删减为长度为m比特,以形成指向频率表中一行的索引(存储在“index”变量中)。在这里给出的例子中,频率表有512行。频率表的元素由变量FreqTbl[index]f0和FreqTbl[index]f1指定。这些变量显示了当比特组合与当前存储在缓冲区中的比特组合相同时(换言之,当前比特组合被认为是指向表中给定行的索引)接收到的比特为0和1的次数。
count=count+1if(count>=log2(N+1)){count=0window=0}window=window*2+bitFreqTbl[index].f0=FreqTbl[index].f0+(2*bit)FreqTbl[index].f1=FreqTbl[index].f1+(2-(2*bit))index=window mod Nsum=FreqTbl[index.f0+FreqTbl[index].f1prob=FreqTbl[index].f0*FracTbl[sum]210]]>if(sum>256){FreqTbl[index].f0=FreqTbl[index].f02]]>FreqTbl[index].f1=FreqTbl[index].f12+1]]>}在开始压缩时,所有变量(除了N,其以2为底的对数给出了窗口长度)被零填充。到达比特重写缓冲区(窗口)的最低有效位,并且根据新到达的比特更新了由先前缓冲区的值所寻址的频率表的元素。很快就会变得很明显,要求的重点在于应该将先前的缓冲区值与晚一步到达的比特相关联,就是说,当前正被处理的比特。正是这个特征使得在系统工作期间可能预测即将到达的比特的值。先前的缓冲值被存储在变量“index”中,N是该变量的上限。
在该方法的下一步中,为下一个比特计算了prob值(“prob”变量的值)。该计算的确切公式为prob=FreqTbl[index].f0sum]]>但是这个表达式没有被直接使用,因为结果是个分数。该计算(除法)将需要实数运算,实数运算对我们的目的而言太慢了。
相反,使用了一个512个元素的分数表(由变量“FracTbl[sum]”表示),由频率表对应行中的比特频率和为该表选择了适当的元素(参看上面算法中的“sum”变量)。为了确定probe值,频率表适当行中的f0值被乘以从上面分数表中获得的值,并且接着乘积被乘以一个常数,例如该乘积向右移10比特。这样,获得了prob值,该值将落在区间0..65535中,它反过来与区间0..1相类似。因为分数表包含512个元素(实际上是对1/sum适当放大后的值,其中“sum”变量同时被用作指向表的一个索引),应当确保“sum”变量不超过这个值。
通过测试“sum”的值,并且如果“sum”大于256则通过重新缩放f0和f1,实现这一点(因为“prob”值实际上是由f0和f1的比例而不是它们的绝对值确定的,所以可以重新缩放它们)。
正如该算法所显示的,该方法相当简单。因为除数是2的幂,可以由右移操作来代替除法。MOD操作也可以由逻辑AND代替。
VI.3.正如已经提到的,该方法在不同级别上执行编码。实际上,这仅仅影响prob变量。换言之,相同的编码模块可被用于所有的数据类型,只需要调整参数(N,窗口尺寸,编码区间的范围)。向每种数据类型赋予不同的级别,根据给定数据类型的需求,每个级别被划分成多个子级别。例如,为了对4×4离散余弦变换操作的结果进行编码,定义了一种特定的级别,其具有赋予AC和DC系数的编码的不同子级别。
常数N确定了窗口尺寸,换言之,与当前正接收的比特一起测试的先前已接收的比特数目。这个因子强烈影响编码效率,但也增加了所需的内存,因为如果增大N就需要更多的内存。
上面给出的方法是已知方法的一个快速整数运算变种。通过适当地调节参数,压缩效率要比MPEG系统中使用的VLC方法提高10%。到目前为止,只有使用特别复杂的probe算法的方法才比该方法有更好的表现。为了提高效率,也应该显著地扩大频率表。所选择的probe算法以及频率表尺寸一起影响该方法的执行时间。
为本发明中使用的数据结构确定probe值的最已知的方法是所谓的动态马尔可夫模型。然而,该方法需要使用一个至少64Kb的频率表才能有效工作。如果所有用于编码的子级别被设置为该尺寸(就是说,如果与不同块尺寸相对应的所有变量以及变量类型都以这种方式被编码),仅为频率表就需要分配超过16Mb的内存。
这些问题使得设计一种新的、更加有效的probe算法十分必要。
VI.4.使用神经probe的算术编码器VI.4.1.算术编码一个很重要的缺陷在于为了最优效率编码,应当知道待编码数据中出现的各个符号的出现概率。原则上,有可能考虑已经出现的多个符号。不仅观察单独的符号,而且观察不同符号组的出现频率将更加有效。然而,这需要存储大量的频率值。通过仅仅存储实际上已经出现的符号组合,而不是已经出现的所有可能的符号组合(上下文),在一定程度上可以缓解这种情况。
这意味着应当引入一个额外符号(转义符号)来指示出现了一个新的符号组合。
已知的编码方法,主要是PPM(部分匹配预测)方法,检查变长的符号组合。当编码一个接收到的符号时,首先测试允许的最长组合。新到达的符号被添加到存储的符号组,并且用当前的符号组长度执行一个搜索来确定当前的符号组是否已经出现。例如,如果组长度为4,那么新到达的符号与三个最近的符号一起被测试。如果该符号组合已经出现,使用赋予该给定符号组合的瞬时或恒定概率对其进行编码。在另一方面,如果该组合没有出现,编码一个转义符号来(对解码器)指示该组合是新的,并且使用较短的组合长度执行搜索。
如果接收到的符号没有被编码到任何先前的组合中,使用赋予各个符号的出现概率的平均值对其进行编码。在编码完成之后,如果需要的话使用添加的新组合来更新对符号组合出现次数进行测量的计数器(就是说,量化符号组合的出现概率)。
由于该方法很慢并且有相当高的内存负载,不适合直接用于对视频数据编码。
然而,根据本发明,检查变长符号组合的原理被转移到本发明使用的神经编码方法。必须注意到,应用神经网络来确定算术probe值的想法不是新的。1996年由Schmidhuber和Heil实现了一种利用神经网络的方法。他们的方法以与PPM类似的方式来观察先前接收到符号和新到达符号的共同出现,并且从而确定probe值。借助这种已知的解决方案,不需要为搜索使用不同的符号组长度,因为只有神经网络的那些输入是有效的,其中当前被测试的组合与早先被“训练”的组合之一之间有关联。通过这种方式,自动执行对这些符号组合的选择(识别)。然而,这种已知方法没多大实际用处,因为训练过程非常长。例如,在一个测试例中,训练网络去识别大概20kB数据的相关性大概需要两天时间。
Matthew V.Mahoney(Florida Institute of Technology)将神经网络技术的应用推广到二进制算术编码(其中只有0和1是要被编码的符号),使用从神经网络理论中获得的在线训练方法并且应用自适应学习速率而不是恒定学习速率。
然而,即使这种改进方法也不足以被直接用于视频编码,因为最优编码必须的内存需求太高。Mahoney的原始方法使用超过258kB内存来对单个级别进行编码。如果该方法被用于128级别(128种不同的数据结构,考虑预测、块尺寸、DC和AC系数,等等),总共所需的内存将大于32MB。然而,如果为视频编码仅仅定义一个级别,该方法将比使用多个级别的常规编码效率要低。
已经考虑了所有这些问题,设计了一种创新的方法来确定神经probe值。根据本发明的方法可以使用少至1-2kB的内存对熵最大化。已经发现仅仅值得将内存增加到大概16kB,高于这个数字,编码效率的提高可以被忽略。
VI.4.2.在下面几页中将对该方法进行详细解释。与上面给出的算术方法相比,唯一的区别在于probe值的计算(返回“probe”变量的值的函数)已经由一种神经probe所代替。
到达的待编码比特被提供给一个尺寸为32,64,甚至更多比特的移位寄存器(缓冲区)(下面给出了一个包括32位寄存器的例子)。寄存器的内容构成了所谓的窗口。现在,使用一个哈希函数将存储在寄存器中的值(作为32比特的整数对待)动态地划分成N部分。
考虑下面关于哈希函数的定义(仅仅作为例子提供)adr1=register mod H0adr2=H0-(H0*k)+((register/64)mod H1)adr3=(H0+H1)-(H1*k)+((register/16384)mod H2)adr4=(H0+H1+H2)-(H2*k)+((register/4194304)mod H3)H3是从先前的地址值计算得到的,因此范围长度H3,从(H0+H1+H2)-(H2*k)开始扩展到剩余内存的末尾(直到2048)。该哈希函数的结果显示在图18中。
“寄存器”变量是当前存储在寄存器150中的二进制值,H0-H2是预先确定的值。例如,H0-H2的值可以是256,512,1024,在一个具体的情况中,从这些值计算出H3的值为1536。因子k由神经网络的输出给出。因子k具有一个缺省值并且落在0和1之间的区间内。
上面给出的哈希函数将地址adr1-adr4映射到表155的数行,其中表155由2048行构成。更确切地,是映射到子范围151-154,这意味着地址1指向子范围151中的一个元素(表行),地址2指向子范围152中的一行,地址3指向子范围153中的一行,以及地址4指向子范围154中的一行。本发明解决方案的一个重要特征在于子范围可以重叠,因而构成了集合156-158,这个实施例包括三个集合156-158。从上面的表述可以理解,集合的尺寸由因子k确定。集合的重要性从最低有效位向最高有效位增加。集合在识别输入流中的重现比特序列的过程中扮演着重要的角色。因为集合可以使得两个地址可能指向表155的相同行,集合的作用因此也很重要。无需深入过多的数学细节,在这里注意到这点就足够了因为输入是被顺序处理的,如果第一个地址指向一个给定神经元,那么其权重在训练过程中将发生变化。在另一个地址选择了相同神经元的情况下,权重将再次与赋予它的比特频率函数的值一起发生变化。因而,与该神经元关联的比特频率函数的值也会被修改两次。在该系统的运行过程中,输入具有相同权重。
因为因子k被神经网络的输出赋予一个值,并且子域152-154的实际长度H1-H4由k确定(间接地,通过集合尺寸,因为集合尺寸影响子域的长度),在收到每个比特之后,表155被划分到子域151-154的分割根据神经网络的输出而动态变化。
由哈希函数定义的N个地址(在这个案例中N=4)选择了表155的N个元素(行)。表155的每一行包含两个权函数——量化权函数Wi,Q以及比例权函数Wi,s(或者,在比例因子S不需要被生成的情况下只有Wi,Q)以及一个频率对f(0)i,f(1)i,该频率对的定义方式与离散算法情况中的相同(就是说,根据每次收到一个比特时的比特值来更新频率值)。在训练过程当中,对所选择的权函数作如下修改Wi=Wi+(error*gain*eta*f(0)i+f(1)if(0)i*f(1)i)]]>其中i是表中被寻址行的索引,“error”是预测比特与实际接收到的比特之间的差,“gain”是增益因子,“eta”是学习速率,以及f(0)和f(1)是上面定义的比特频率。实际上,该方法使用的N-输入神经网络的知识库由权函数以及表155存储的频率值构成。
在工作过程中,根据本例的网络的输出由下面的公式给出outi=expΣWi]]>其中i是输出数量,下标i从1到N,即输出是对所有选择的权函数求和。可以定义网络的输出使得k和“prob”值本身出现在输出中。
再次跳过更加详细的数学分析,神经网络的工作可以概述如下当第一个比特到达时,prob值为0(对应于概率0.5)。接着网络计算误差(error=bit-probe),并且将该误差“教给”赋予上一个比特值的神经元。(在第一个步骤中这些值是不相关的。因为没有前导数据,所有地址为0,因此将第0个神经元赋予输入。)接着,系统从寄存器(缓冲区)的当前值生成新地址。将由这些地址选择的神经元的权函数(在第一个步骤中为零)相加,并且计算该和数的指数(第一个步骤中的结果也是零),其成为新的probe值。
下一个probe区间为-0.5..+0.5,因此映射在0..1区间上的当前probe值将是0.5。对于接下来到达的比特,重复上述过程,这次使用有效地址,在误差值的基础上对先前选择的神经元的权函数进行修改。该过程对于因子k相同。
如我们已经提到的,该系统的增益和学习速率可动态地调整。在一个优选实施例中,只有在选择神经元的地址指向集合内的地址范围时才会对增益作修改。
就是说,根据集合的优先级,向每个集合赋予一个增益因子。
学习速率是由因子k和许多外部因素决定。
学习速率为网络指定了学习曲线的斜率,就是说,在每个训练周期中误差被最小化的程度。
神经网络具有两个输出输出“probe”给出算术probe值,而另外一个输出指定了用来确定集合分割的因子k。图18b中示出了神经网络一个可能的结构,显示了输入层160的神经元,以及产生“prob”和因子k的输出169和168。图中显示的神经网络还有一个隐含层162,但是本发明方法使用结构较简单的网络也能够成功地工作。
以这种方式,向构成神经网络的知识库的表的每一行赋予了频率f(0)和f(1),这些频率可被当作计数器。这些计数器与上面看到的表FreqTbl[index]的元素类似,指定了当前待编码比特是0和1的次数,此时给定的表行由address1-4中的一个地址选择,所述地址指向表155的细分产生的子范围151-154。因而,频率f(0)和f(1)可被存储在N行的表中,并且,与上面描述的方式类似,如果它们的值超过给定范围则应该对它们进行重新缩放。
VI.5.接下来,反复地测试寄存器150的分割来选择最佳分割。神经网络基于下一个接收到的比特的值更新最近寻址的表行的频率数据f(0)和f(1),并且将k的最近值以及probe因子“教给”存储在这些行中的神经元权函数,probe因子是根据预测值和接收到的比特值之间的差(误差)从频率f(0),f(1)中导出的。
该系统的工作在许多方面都与上面描述的方法类似,但是动态寄存器分割以及动态增益和学习速率的使用根本上是创新元素。
让我们看一个该方法在实践中是多么有效的示例我们对20个8×8块的DCT系数编码,产生1280字节的数据。被编码的块在帧中是相邻的,并且实际上是相同的。我们主要的兴趣在于在不同块中存在DCT系数的重现数据序列而在各个块本身中不存在重现序列的情况下该方法的编码效率。
在下表中与其它方法比较了结果
*多级别方法对于其它数据类型,结果显示更广的分布,而我们的方法仍然要比其它解决方案表现得好很多。
VII.带宽(传输速率)控制以及压缩比调整VII.1.带宽(传输速率)控制是视频编码中最重要的问题之一。一个视频帧序列中帧的信息内容变化很大,因此在目标是保持相当平滑的图像质量的情况下,必须随着这些变化在很大范围上调整压缩比。
如果压缩数据存储在一个存储装置上,该装置的存储容量将会限制编码数据的总量。当数据必须在一个数据传输系统中实时传输时,最明显的情况是带宽成为一个限制。在那种情况下,传输视频的质量受到可用带宽(数据传输速率)的限制。因此,有必要将传输速率(一秒内传输的数据量)保持在一个近似恒定的值。这只可以通过调整压缩比来实现。下面,调整压缩比的意思是增加或减小量化因子。然而,不可能增加量化而不产生后果。更高的量化引起图像细节随着图像中可识别的空间频率的减少而消失,同时视觉上可观察到的误差增加。在某个点,图像不可避免地瓦解成块并且产生其它视觉上明显的图像失真。
根据可用带宽修改量化因子实质上是周知的。在常规的解决方案中,根据编码序列的预期长度和实际长度来计算新的量化因子,并且将新的量化因子应用到下一帧。代替一次仅仅考虑一个帧,更加成熟的解决方案使用在给定时间范围内所压缩的帧的平均长度和期望平均长度来计算新的量化因子。这些方法通常涉及一个反应延迟因子,该因子指定了控制系统应该获得计算的最大值的时间。
这种方法提供了恒定传输速率或恒定比特率(CBR方法)。
通过为传输速率控制设置最小和最大极限,总是将传输速率保持在这些极限中并且试图在长时间内获得一个等于上下限平均值的主导传输速率,可以极大地改善结果。
优选地,还应该将原始帧和重建帧之间的信噪比作为一个控制参数加以考虑,就是说,在SNR恶化时(在特定的范围内)提高传输速率,而当SNR提高时降低传输速率。这就是所谓的可变比特率(VBR)方法。这种解决方案的一个主要缺陷在于无法准确地预计总体期望数据长度。最小和最大值不能被设置得过高,因为那样的话,控制范围也会太宽并且总体编码数据长度将在一个过大尺度上变化。经常还会出现使用系统设置的最大传输速率不能维持期望的质量,使得有必要进一步提高传输速率的情况。
VII.2.根据本发明,对于带宽(传输速率)控制提供了两种解决方案。
这两种方法都是基于应用神经网络。
VII.3.1根据第一个解决方案,神经网络具有一个实质上已知的后向传播结构。在图18c中示出了该网络。该网络具有N个输入1801-180n,一个包含2N个神经元的隐含层185,以及至少一个输出。量化因子Q以及比例因子S(下面第VIII章中详细描述了该因子的作用)出现在输出188和189。
为了提供连续控制,该网络的输入是最后N个接收到的数据元素,它们按照其顺序被顺序地提供给N个输入。数据元素由期望帧长度和编码帧长度的比率构成,并且这些数据元素被当作一个时间序列。
ELi-1/CLi-1,ELi/CLi,ELi+1/CLi+1,等(其中E1期望长度,CL编码长度,i是对应于第i个数据(例如,一个编码帧)的索引)。
用于训练网络的测试数据是使用一个外部控制系统生成或在训练过程开始前手动生成的,并且所述数据通过复杂相关性计算减少到1000-4000个训练样本。设计训练样本以使得它们代表出现在普通视频记录中的每种帧类型。这些样本通过数个训练周期被“教给”系统,在一个具体实现中,是50000个周期。
训练完成之后,网络准备好接收并处理实际数据。应当注意在这个具体的实施例中,计算被设置为使得在网络输出中出现的不是因子Q,而是KQ系数,该系数反过来用于修改当前的Q。
与离散系统相比,神经网络的主要优点在于,借助神经网络几乎可以实现各种类型的控制特征。
在可变比特率控制系统中,控制特征远比在恒定比特率控制系统中重要。
VII.3.2.正如我们已经提到的,网络借助测量的训练工作。神经网络借助先前期望的帧和编码帧的长度值评估希望的映射,后者被当作数据序列。这种方法可被成功地用于恒定带宽(CBR)的情况,但它本身不是总适用于可变带宽(VBR)系统。原因在于VBR系统也要考虑图像质量。
在图像质量超过平均质量值的情况下,增加压缩比,而如果质量低于平均值,则减少压缩比。神经网络控制系统也必须对这点加以考虑。因此,为控制网络指定了一个最小和最大量化因子,控制系统不能超过该范围。这些值通过图18c中参考数字186和187指代的神经元起作用。
VII.3.3.用于VBR模式的神经网络的输入是用于CRR模式的网络输入的两倍之多,因为,除了期望长度/编码长度比,表示图像质量的数据也以期望质量/编码质量比的形式被提供给网络的输入EQi-1/CQi-1,EQi/CQi,EQi+1/CQi+1,等。
其中,EQ是期望质量,CQ是编码质量,i是数据索引。
如图18c中所见,除了确定量化因子的输出188,用于VBR模式的神经网络也包括表示比例因子S的另一个输出189(比例因子的作用后面描述)。与上面描述的情况类似,在训练过程中,网络处理一个时间序列中关于期望/编码质量和期望/编码长度的输入数据,并且根据指定的最小和最大值评估所找到的映射。选择控制数据使得其反映指定的控制特征和控制斜率。
在网络的实际编码过程中,即当处理实际数据时,不再进行训练,并且神经元的权函数保持不变。编码本身实际上是一项关联任务基于网络在训练过程中所“学习”到的东西,将接收到的包含在时隙中的输入数据映射到Q和S因子。因而,通过按照接收到的长度和质量数据确定Q和S的下一个值,网络执行与常规控制系统相同的任务。直观地,所述时隙可以被说成是描述了一种特定的情形。网络将在训练过程中它所遇到的这些情形中搜索一个与当前情形最匹配的情形,给出在该特定情形下学习到的最优响应。
神经网络的一种实现变种实际上使用仅仅一个公式,所谓的S形和。
out=1/exp(1+-Gain*Σi=0NW(i)*Input(i))]]>其中N是神经元的数量“gain”值可以是整数并可由最优搜索确定,因为它唯一的作用是确定输出值的大小顺序。首先,用上面表达式对隐藏层中神经元的权函数求和,接着同样为输出层的权函数执行该计算。
在它们的实际实现中,除了输入数据在VBR和CBR网络之间没有重大区别,这意味着执行VBR模式的网络也能够执行CBR模式的功能。对于CBR模式的操作是通过简单地在质量输入端提供一个常数值而实现的(该常数是最大可能值,在训练期间输入也保持不变)。在CBR模式中,最小和最大带宽极限输入被设置为相等并且保持不变,被设置成与期望的恒定带宽对应的值。
VII.4.在本节中,将描述由神经网络执行的改进的动态量化的又一个变种(所谓的地址分解方法)。
VII.4.1.这种网络模型是描述算术编码的一节中所给出网络模型的一个变种。它与上面网络唯一的区别在于对该网络某些选择的神经元的寻址不是由整个时间窗口/时隙确定的。这点被示意性地显示在图19中,该图显示时间窗口中检验的输入数据绕过了地址生成器。这里,输入数据序列的元素不是0和1,因此上面描述的地址生成过程不能被直接应用。相反地,神经网络的输入层包括两部分。对于在时间窗口中能够找到的每个数据值,由一个哈希函数(与前面示出的类似)指派一个神经元,该神经元是根据到达数据是否是期望/编码长度数据或期望/编码质量数据从适当数目(诸如2048或256)的神经元中选择出来的。实际上,这意味着两个神经元权重表,一个用于对期望/编码长度数据起作用的神经元(更确切地,用于其权函数),另一个用于对期望/编码质量数据起作用的神经元的权函数。
如果时间窗口尺寸为N=32,并且对于两种数据类型分别使用11比特和8比特来执行地址生成,存储神经元的输入数据所需的内存大小将为Mem=2048*16+256*16(用于从期望/编码长度生成的地址的16×11比特长的标准化数据,和用于从期望/编码质量数据生成的地址的16×8比特长的标准化数据)。
在所用地址的转换过程中,神经网络的输入是值在0和1之间的标准化数据,这些数据后来被转换成整数以便生成地址。
Cvk=VKn*211]]>Cm=Mn*28]]>方程III其中VKn是标准化的期望/编码长度比,Cvk是生成的地址,并且其中Mn是标准化质量,Cm是生成的地址。
基于这些表达式,根据位于时间序列各位置的数据生成了地址。这样生成的地址对存储在表中的神经元进行寻址。换言之,由生成的地址选择神经元,并且这些神经元在训练过程中接收期望/编码长度比和期望/编码质量比。该系统有两个其它的与时间序列无关的输入。与图18c中显示的网络类似,这些输入被用于确定最小和最大带宽。使用公式(1/Q-1/Qprev)来计算一个误差因子,即该误差因子是由当前训练的量化因子的倒数与先前计算的量化因子的倒数之差确定的,其中Qprev是先前的量化因子。
权函数作如下修改W=W+(1Q-1Qprev)*eta*]]>输入,其中eta是学习速率out=exp(Σi=0NW(i))]]>其中N是神经元数量在网络的有效控制工作中不再进行训练,即该系统也使用一种预先训练的网络。
控制工作过程与训练过程相同,除了权值修改未被激活之外。
以一种类似于上面已描述的方式,通过将最小/最大带宽以及质量数据分别固定为常数值,该系统可以被切换到CBR模式。
该系统也可以无错地以多步骤模式工作。这种工作模式的本质在于在第一步,该系统无控制地以一种恒定的量化因子(例如将Q设置为3)来对整个连续镜头进行编码。在后面的第二步中,在控制系统被激活的情况下执行编码。该解决方案提供了改进精度的编码,因为第一步指定了每一帧可被压缩的程度,所以不需要确定Q,而是可以直接根据步骤1调整Q。另外,可以应用本发明的神经网络而不作任何修改。在多步骤模式中,可以使用快速训练过程执行训练。同样,在这种模式中插值非常有效我们观察到神经控制系统在两个步骤中能够达到离散控制系统在4-6个步骤中获得的质量。
应当注意到,与单步骤模式相比,多步骤模式不一定提供更好的质量。这种模式的一个优点在于输出长度可被调整到一个预定值,例如与存储介质的能力相对应。
VIII.动态缩放VIII.1.正如已经指出的那样,经常可能发生不能维持期望长度的编码视频具有期望的视频质量。这可能由下面的原因造成,例如对于特定的序列,预置的压缩比太高了,因而使用当前设置的最小/最大压缩极限不能维持期望的视频质量。这种情况通常会发生在高度细节、动作丰富的胶片上。作为例子,可以提到故事片“木乃伊归来”的头5分钟。在这个特定序列的情况下,对于高质量的MPEG压缩,至少需要2.5Mbit/s的带宽。然而,如果可用带宽减少到1.5Mbit/s,为了消除错误,在压缩和解码时就需要非常复杂的前滤波和后滤波操作。这将将图像锐度锐减到编码视频的质量几乎不能达到“可以接受”水平的程度。
VIII.2.为了消除上面描述的问题,根据本发明,引入了动态缩放的概念。这本质上意味着如果控制系统由于固定的外部边界条件不能维持期望的图像质量,就按比例缩小(重定比例)。帧被缩小(调整大小)到提供满意结果的尺寸。系统对这个尺寸减小的帧进行压缩,并且,在解压时,将它恢复到其原始尺寸。可以理解,在这种情况下图像质量也会下降,然而,这主要表现为锐度降低。至少在压缩比未被设置得过高的情况下,不会出现压缩引起的斑点和其它典型错误。
我们已经检验了如果减少这种关键帧序列的输入数据量而压缩因子保持不变将会产生什么影响。换言之,帧被缩小到其原始尺寸的3/4或1/2。因为编码器试图尽可能地保持数据率恒定,考虑到图像质量,帧尺寸的减小将导致压缩程度降低。以这种方式,输出数据量与重定比例前保持一致。
例如,如果对整个数据流用例如0.5Mbit/s的带宽进行编码,并且关键序列中的帧被减小到原始尺寸的一半,实际传输速率保持在0.5Mbit/s,而压缩率和量化因子被显著地减小了。在上面例子中,后者的因子被减小到相当于以原始帧尺寸用2Mbit/s带宽编码的图像质量的程度。这导致错误减少。该方法的缺陷在于缩放降低了帧的解析度。因而,当在解码过程中帧被恢复到原始尺寸时,必须推断出丢失像素的值。然而,通过应用一种适当的缩放方法,这个问题可以被显著地降低。必须考虑到帧中存在空间频率分量,并且必须相应地执行变换。
VIII.3.因此,在根据本发明的动态缩放方法中,我们需要缩放的图像。测试了许多基于插值的帧缩放方法。Láncos方法产生了最佳结果(Láncos方法实质上是一个已知的重采样过程,它通过一个滤波器基于该图像的空间频率分量对丢失的像素进行插值)。如果对有缩放和无缩放的压缩进行比较,就会发现在无缩放的情况下,如果压缩流用于0.5Mbit/s的传输速率,可以容易地观察到关键序列中的质量损失。图像中的许多区域变得完全“扁平”,斑点和条纹将会出现,并且在某些区域中图像锐度急剧下降,就如同对该图像使用了擦除器一样。在另一方面,在用按照本发明的帧缩放来执行压缩的情况下,将不会出现这些错误。唯一可察觉到的错误是锐度的下降。然而,通过分析序列,可以发现在视频连续镜头中那些出现快速运动的点上通常需要缩放。因为快速运动的场景通常在一开始就已经被轻微地模糊了,由重定比例引起的信息丢失几乎观察不到。
本发明的动态缩放过程执行如下把每个到达的帧传送经过缩放模块,开始时缩放因子为0(无缩放)。压缩控制系统决定编码结果是否满足指定的范围。如果结果不满足,则将帧尺寸改变(减小)到即使解码后仍然能够提供可接受质量的程度。
应当注意到可以利用离散方法来解决缩放任务。但是,考虑到在本发明系统中已经把神经网络应用于带宽控制,也可以使用神经网络来更加有效地执行缩放。由于该问题与带宽控制问题密切相关,已证明向神经网络添加另一个输出就能得到满意结果(见图18c)。因而,该网络有两个输出,一个提供量化因子的Q系数,另一个提供缩放因子S。
在提供给带宽控制的第一个解决方案中(见VII.3节,以及图18c),可以直接插入一个新的神经元189,其输出提供缩放因子S。然而,对于提出的第二个解决方案(见VII.4节),实际上应该向每个表地址赋予两个权重向量。
实际上,这相当于两个独立的神经网络,具有相同输入但向输出发送不同的值。为了使得网络更加完善,建议向神经网络增加一个隐含层,该层的神经元被连接到输出层。在那种情况下,网络将具有一个所谓的后向传播结构。这里如同前一个解决方案,输入层的神经元也是由该系统生成的地址所指向的位置选择的。
缩放过程从一个I-帧(内部帧)开始,一直持续到下一个I-帧。对为其它类型的帧确定的缩放因子取平均值。这点显示在图20,21中,其中缩放从A开始并且在标记为B的点结束。
IX.关于本发明中应用的神经控制系统的一些一般性评论为了本发明控制系统的潜在应用,我们已经测试了大量不同的网络类型。考虑它们的计算负载和适当的控制行为,很惊讶地,最佳结果是由具有最简单的结构的网络产生的。所谓的反向传播类型网络也可以给出优秀的结果,在许多情况中提供了比上面描述的后向传播类型网络更好的近似,但只有应用地址分解方法(见上文)才会如此。概括起来,第二种方法比第一种方法执行的更好,这是由于它比对应方法使用更多的神经元,这提供了更大的知识库。转换到后向传播或反向传播,它提供优秀的控制。
本发明本质上基于这样一种想法提供一种能够实现不同控制特征的控制系统,并且确保最优压缩同时也考虑视觉上可以察觉的图像质量。学习到的不同特征可被分组成简档,这些简档使得能够选择最适用于任何给定视频序列的特征。我们已经测试了离散控制系统并且已经发现它们具有的控制动态性不足。例如,如果使用介质带宽在两个步骤中执行编码,经常能够发现那些需要更高压缩的序列,或那些能够使用较低压缩的场景。已知的离散编码系统是闭环系统,意思是它们通常使用恒定的函数执行编码。然而,神经系统能够考虑先前帧的信息并且使用所学习到的瞬时特征执行编码控制。
因为实质上已经知道不同的神经网络模型,在本文中没有对本发明神经网络的工作进行详细分析。我们仅仅提供了用于对视频帧序列进行编码的神经网络的多个具体实现。
X.1.实现本发明方法的混合视频编码系统的工作的概述整个系统的结构在图8以及图22-24中进行了描述。
在压缩过程中,帧首先经过缩放系统(重采样模块)61(图8)。该系统决定应该使用哪种方法继续编码,并且相应地选择编码模式(I,P,B)。在I-帧的情况下,为每个块执行了不同的预测,并且该系统基于方差分析的结果选择有希望给出最佳可压缩性的的预测。接着,使用DCT对块进行变换,并且在适当的水平对块量化和压缩。
在P帧的情况下,只有前导帧被用作参考帧,而对于B帧,前导帧和后继帧一起被用作参考帧,以便为当前待编码的块搜索一个匹配的参考块。接着根据块尺寸和位置对发现的块进行补偿(从参考块中减去该块,可选地使用1/2或1/4像素解析度的搜索和运动补偿),接着对该块进行预测、变换和编码。同时,发现的参考位置被转换成运动向量,并且从先前的运动向量中减去该运动向量,并且在适当的水平压缩该运动向量。根据期望的和编码的长度以及质量值,由控制系统调整压缩比。如果不能将期望的质量保持在当前范围内,则将该帧缩小到质量可被接受的尺寸。这里必须注意到在具体的实现中,该系统从未将帧减小到小于原始尺寸的一半。
令人惊讶地发现实现方法的执行要远远好于预期。在450kB/s的带宽之上,除了由重定比例引起的锐度降低,在关键序列中几乎没有任何视觉上可察觉到的错误。已经发现,对于380-450kB/s范围内的传输速率,本发明的混合编码系统能够提供普通录像机SP模式的质量,而在280-380kB/s的范围内,相当于普通录像机LP模式的质量。在带宽超过500kB/s的情况下,视频质量接近DVD质量。在高于750kB/s的极限时,实际上在视觉上无法和DVD进行区分。
本发明的编码系统的一个缺陷在于,由于算术编码,它对传输信道中数据丢失引起的错误非常敏感。然而,现代的数字传输网络(诸如互联网)支持高度安全、几乎无丢失的数据传输,即使对于极大的数据量也是如此,因此这个缺陷不太重要。为了让编码系统有效地工作,应该连续地更新频率表。如果在解码过程中某个地方出现传输错误,那么从该点开始,直到受影响帧结束,所有数据都将被损坏。X.2.1.结合图22,解释了本发明的混合视频解码器的工作,该解码器用于对使用本发明系统压缩的数据进行解码。通过向输入缓冲区121提供编码数据并且对流信息块133解码,开始帧重建。流信息块133包含帧的原始尺寸以及其它解码过程中不会改变的数据。因此,流信息块133只在解码过程开始时被解码一次。接着,对帧的头部信息解码(步骤122)。帧的头部信息块包含当前的帧尺寸、帧类型(I,P,B)、量化类型、以及只和给定帧唯一地有关的其它数据。
如果该帧是个内部帧,则对描述块分割的四杈树结构(步骤123)和DCT系数以及与各个块有关的特定信息(步骤126)一起进行编码。接着,在每个块上执行了反变换(步骤127,128,129),并且将反变换的结果块写入存储新帧的当前视频存储器131。
在内部帧中,每个块包含对其重建所需的所有数据(特别地,预测类型以及指示该块是否被分割成16×16块或四个4×4块的信息,等等)。
在帧间帧的情况下,在步骤123对第一个描述块分割的四杈树结构进行了编码,因为这个树结构包含重建该块所需的数据。这些数据被用于解码DCT系数、运动向量、以及与各个子块关联的预测码,以及用于对标识编码中使用的参考帧的代码进行解码。也执行了反变换(步骤127,128,129),并且接着,在步骤130中将存储在参考存储器125中的参考帧的那些块添加到反变换块,所述参考帧的块是在步骤124中使用运动向量选择的。
如果使用线性插值对该帧编码,那么首先基于在步骤124中通过重建的运动向量选择的块和参考存储器125中存储的参考帧生成插值块,并且接着将这个插值块添加到反变换块。将每个重建块写入存储新帧的当前视频存储器131。
内部和帧间解码的重建帧都被写入参考存储器125。参考存储器125可以包含不止一个帧,数量取决于编码过程中使用的最远参考帧。参考存储器125是一个循环缓冲区,意思是每次存储一个新帧时,将最老的帧删除。
下一步是在步骤132中将帧尺寸恢复到原始值。优选地,使用Láncos方法来恢复帧尺寸。由一个适当的子例程在编码和解码过程中都执行缩放。在有可用的支持缩放的硬件视频源或输出装置的情况下,编码器或解码器只需要指定帧尺寸。
X.2.2.神经解码器神经算术解码器在很大程度上与神经算术编码模块以相同的方式工作,因为,如已经知道的,在算术编码中,编码器的工作与解码器的工作相同。由于该方法是自适应的,在开始时对单个比特解码,并且使用解码的比特计算了一个新的预测器。为了计算预测器,可以不作任何修改地使用用于编码的神经网络。编码器/解码器之间的差异仅仅表现在已知的数学计算的差异上,其它功能元素完全相同。
最后,给出了一个完整的视频编码/编码转换系统(见图23)。
本发明的视频编码系统支持数字化,能够有效地编码和存储视频信号。同时,它还能够对已经编码的数字视频数据进行转换来提高存储效率。例如,可以应用这种编码转换将DVB广播的MPEG传输分组的带宽从大约20M比特/s减少到大约600K比特/s,例如用于录制卫星或电视广播。以一种类似的方式,本发明的高效编码方法也可用于存储用数字摄像机录制的视频序列,即使在不使用机械装置的情况下。
编码系统的输入由模拟视频输入93,组合的解码MPEG数字视频/音频分组输入94,以及模拟音频输入105构成。
该编码系统可在下面的模式中工作a,对从模拟视频输入93和模拟音频输入105输入的信号在数字化转换后进行编码。
b,对数字视频信号94和音频信号进行编码变换,音频信号是由解复用器109从组合的数字视频/音频信号分组中分离的。
由选择器96选择的数字视频数据被通过输入97提供给编码系统98(上面结合图8做了解释)。编码的视频数据99与数字音频数据被多路复用器100复用到一个组合分组101中。数字分组,经由PSC102(外围系统控制器)路由,可被存储到硬盘103、光存储装置或半导体存储器104上。由选择器107选择的数字音频信号由编码器108编码并且如上面解释的那样被存储。
X.2.3.对存储的视频和音频数据的解码在图24中示出。
解复用器110将存储在半导体存储器104或硬盘103中的数据分组分离成编码的数字视频数据111和编码的数字音频数据112。数字视频数据111由解码系统113解码,该解码系统在上面结合图22已经作了描述。解码的视频数据114可选地被提供给滤波和缩放模块115,接着被D/A转换器116转换成模拟视频信号117。由解复用器110分离的数字音频数据112由解码器118解码,并且最后被D/A转换器119转换回模拟音频信号120。
本发明不局限于上面给出的实施例,而是也可以设想到其它变化或实现。
权利要求
1.用于对数字编码的视频帧序列进行压缩的方法,包括如下步骤a.将一个给定的帧划分成块,b.可选地,将各个块进一步划分成更小的块,c.根据包含在一个或多个邻接块中的信息修改所选择块的信息内容(预测),d.通过在所选择的块上执行一个将空间表示转换为频率表示的变换(DCT)生成变换块,以及最后e.用熵编码对变换块的信息内容进行编码,其特色征于i.在执行步骤d中指定的变换之前,在所述的所选择的块上执行可压缩性分析,并且根据分析结果ii.在该块上执行步骤c(预测)和d(DCT)或者iii.可选地,将该块进一步分割成子块,并且再次在这些从各个分割产生的块上执行步骤i中指定的可压缩性分析,以及iv.根据步骤i和iii给出的结果,选择那个可能产生最佳结果的块分割,并且最后v.根据步骤c中执行的预测,使用具有最佳可能结果的块分割执行步骤d中指定的变换。
2.按照权利要求1的方法,其特征在于对属于各个块分割的块执行可压缩性分析时考虑了块的内容和/或各个块类型的出现频率。
3.按照权利要求1的方法,其特征在于在可压缩性分析过程中所述块的内容要经历直接的方差分析或借助于哈达马滤波器的方差分析。
4.按照权利要求3的方法,其特征在于使用下面的公式执行方差分析 其中,M是给定块或子块中元素的数量,pixel(j)是未压缩块(原始块)的一个元素,并且通过把计算得到的方差值与一个给定的阈值进行比较来确定该方差是否超过所述的给定阈值。
5.按照权利要求1-4中任何一条权利要求的方法,其特征在于用熵编码对赋予一个给定帧中具有最大允许块尺寸的块的特定数据进行编码,所述特定数据表示其被赋予的块的块分割(四杈树)。
6.按照权利要求1-5中任何一条权利要求的方法,其特征在于应用离散余弦变换(DCT)作为将空间域表示转换成频率域表示的变换。
7.按照权利要求6的方法,其特征在于DCT被用在小于16×16的块上,并且哈达马变换被用在尺寸为16×16像素的块上。
8.按照权利要求1-7中任何一条权利要求的方法,其特征在于在可压缩性分析过程中,用下面的公式来量化修改(预测)块的信息内容sum(i)=Σj=0Mabs(pixel(i))2]]>其中M是预测块中元素个数,以及pixel(i)是预测块中的一个元素,计算得到的“sum”值与一个给定的阈值或前一个“sum”值进行比较来确定计算得到的“sum”值是否超过所述的给定阈值或所述的前一个“sum”值。
9.按照权利要求8中任何一条的方法,其特征在于在各个块的预测过程中,使用多种预测模式来执行预测,其中产生最低“sum”值的预测模式被用于所述的给定块。
10.按照权利要求1-9中任何一条权利要求的方法,其特征在于如果各个块尺寸的出现次数确认两个最常出现的块尺寸的出现频率超过一个给定值,则将所有块都用具有两个最常出现之块尺寸的块来代替。
11.按照权利要求1-10中任何一条的方法,其特征在于在对块进行可压缩性分析的过程中计算出来一个误差,考虑所计算的误差,将对该误差的贡献超过一个阈值的块进一步划分成子块。
12.按照权利要求11的方法,其特征在于在一个给定子块的情况下,如果误差超过一个预定值,则将该子块进一步划分成更小的子块并且对包括该较小子块的结果的块分割执行可压缩性分析。
13.按照权利要求1-12中任何一条权利要求的方法,其特征在于使用尺寸为16×16,8×8,4×4,或2×2的块或子块。
14.用于对数字编码的视频帧序列进行压缩的方法,包括如下步骤a.将一个给定的帧划分成二维块,b.建立该帧的一个块分割,在特定情况下,通过将各个块进一步划分成子块,c.在所述块的信息内容上执行一个变换(DCT),该变换将空间表示转换成频率表示,因而产生了多元素二维变换块(DCT系数矩阵)以及d.根据外部边界条件修改变换块的元素(量化),并且最后e.用熵编码对包含在变换块中的信息进行编码。该方法的特色在于在步骤d中,对多元素二维变换块中的数据的修改是基于所述块的尺寸和可用于传输编码数据的带宽而修改的。
15.按照权利要求14的方法,其特征在于对变换块的修改是量化。
16.按照权利要求15的方法,其特征在于量化是按照下面的函数的MPEG量化qcoeff(j)=((data(j)*16)+(matrix(j)*0.5)matrix(j)*(217QP*2+1))/217]]>其中qcoeff(j)是多元素二维变换块的一个元素,matrix(j)是在尺寸上与多元素二维变换块相对应的矩阵的一个元素,QP是量化因子。
17.按照权利要求16的方法,其特征在于matrix(j)的值是从根据经验建立的一个矩阵表中得到的,其中该表的各个元素是整个matrix(j)矩阵,根据步骤d中指定的外部边界条件从所述表中进行选择。
18.按照权利要求16或17的方法,其特征在于根据QP量化因子的值从所述表中进行选择。
19.按照权利要求16-18中任何一条权利要求的方法,其特征在于将整个QP域划分成N个子域,并且向各个子域赋予矩阵表,其中所述矩阵表的尺寸对应于块尺寸,并且将每个子域赋予一个先前指定的带宽范围。
20.按照权利要求16-19中任何一条权利要求的方法,其特征在于步骤d的外部边界条件由可用的存储容量和/或可用的带宽所代替。
21.按照权利要求14-20中任何一条权利要求的方法,其特征在于在特定情况中,在步骤c中执行变换前,基于一个或多个邻接块(预测)的先前选择的图像元素中包含的信息或被包括在参考帧中的参考块的信息内容,对所选择的块的信息内容作修改。
22.按照权利要求14-21中任何一条权利要求的方法,其特征在于为了编码内部帧,也执行按照权利要求1-13中任何一条所描述之方法的步骤。
23.用于对数字编码的视频帧序列进行压缩的方法,其中某些帧的信息内容根据前导或后继帧(参考帧)的内容进行编码,该方法进一步包括如下步骤a.将所述的待编码帧划分成块,b.在包含所述待编码块的帧之前或后续的参考图像中为给定的待编码块搜索一个匹配的参考块,c.通过将匹配的参考块与待编码块进行比较来执行一个可压缩性分析,d.根据可压缩性分析的结果选择最佳参考块,以及e.使用刚刚选择的最佳参考块对所述的块进行编码,其特征在于,在步骤b中,在搜索参考块的过程中i)将待编码块划分成子块,ii)分析子块的内容,iii)根据预定义的标准,选择预定数量的子块,优选地,至少为两块,iv)使用所选择的子块执行参考块搜索,所述的搜索是在所选择的参考帧中的特定搜索范围内执行的,以便搜索包含与所选择的子块区别最小的子块的参考块,在所述的搜索过程中,所选择块的相对位置保持不变,以及v)使用所选择的子块来选择最佳参考块作为搜索结果。
24.按照权利要求23的方法,其特征在于在步骤v)中,最佳参考块是以这样一种方式选择的每次当该搜索发现一个比当前参考块更好的块时,将新发现块的位置数据写入多元素循环缓冲区,该缓冲区的最后一个元素包含最佳子块的位置。
25.按照权利要求23或24的方法,其特征在于使用整个待编码块来执行参考搜索,并且该搜索是在被认为是最佳参考块的参考块附近执行的,并且根据所述的使用整个待编码块执行的搜索的结果来选择最终的参考块。
26.按照权利要求23-25中任何一条权利要求的方法,其特征在于确定待编码块和参考块的绝对平方差,并且基于确定的差来决定所述参考块的可接受性。
27.按照权利要求23-26中任何一条权利要求的方法,其特征在于在已滤波的参考帧中执行参考块搜索。
28.按照权利要求23-27中任何一条权利要求的方法,其特征在于在搜索结果仍然不满意的情况下,在位于更多参考帧中的搜索范围内执行参考块搜索。
29.按照权利要求23-28中任何一条权利要求的方法,其特征在于当搜索在所有参考帧中都不成功的情况下,将待编码块划分成子块,并且为每个子块搜索一个匹配的参考子块,所述的搜索是在迄今为止产生最佳结果的参考帧中被认为最好的位置附近进行的。
30.按照权利要求29的方法,其特征在于在将待编码块划分成子块未能产生满意结果的情况下,在其它参考帧的最佳位置附近执行参考子块搜索。
31.按照权利要求29或30的方法,其特征在于在子块仍然错误的情况下,将错误的子块进一步划分成更小的子块,并且重复该搜索。
32.按照权利要求23-31中任何一条权利要求的方法,其特征在于从参考块中减去待编码块,并且在步骤e中对该差分块进行编码。
33.按照权利要求23-32中任何一条权利要求的方法,其特征在于在差分块的信息内容上执行一个将空间表示转换成频率表示的变换(DCT或哈达马变换),从而产生多元素的二维变换块(DCT或哈达马系数矩阵),并且用熵编码对变换块的信息内容进行编码。
34.按照权利要求23-32中任何一条权利要求的方法,其特征在于在编码过程中,也执行按照权利要求1-13中任何一条所描述之方法的步骤。
35.用于对数字编码的视频帧序列进行压缩的方法,包括如下步骤a.将每个帧划分成将被单独编码的块,b.在这些块的信息内容上执行一个将空间表示转换成频率表示的变换(DCT),从而产生变换块,并且最后e.用熵编码对包含在变换块中的信息进行编码,并且应用算术编码作为熵编码,在该过程中-通过修改一个区间的下限和上限来对一个比特序列进行编码,该区间是该比特序列之连续比特值的一个函数,以及-在该修改所述区间范围的函数中考虑了该序列已经到达的比特的分布,其特征在于-从该比特序列已经到达的比特值中生成地址,-所述地址被用于对包括多个处理元素的神经网络之各个处理元素进行寻址,和-修改处理元素的参数,使得各个寻址操作的频率以及该比特序列之当前到达的比特值被用作输入数据,并且神经网络的输出被用于确定一个对所述区间的下限或上限进行修改的参数,-经过涉及多比特处理的初始学习阶段之后,在对到达比特进行编码的过程中,将所述区间的上限或下限确定为神经网络的输出的一个函数。
36.按照权利要求35的方法,其特征在于将到达的待编码比特序列提供给一个缓冲区,并且划分成多个较短的比特序列。
37.按照权利要求36的方法,其特征在于把由较短比特序列之比特表示的二进制值当作为一个地址。
38.按照权利要求35-37中任何一条权利要求的方法,其特征在于该地址被用于选择一个表的行,其中所述的表包含表示当前待编码比特之可能值的出现频率的函数值以及至少一个权函数。
39.按照权利要求38的方法,其特征在于各个神经元的权函数被修改为一个表示待编码比特的可能值之出现频率的函数值的函数。
40.按照权利要求35的方法,其特征在于所述地址的可能地址范围彼此形成集合(至少部分重叠)。
41.按照权利要求35-40中任何一条的方法,其特征在于根据边界条件动态调整神经网络的增益和学习速率。
42.按照权利要求35-41中任何一条权利要求的方法,其特征在于编码器可以以不同的级别使用,其中每个级别的参数可被单独地调整,向每个级别赋予一个使用专用参数工作的神经网络。
43.按照权利要求35-42中任何一条权利要求的方法,其特征在于在编码过程中,也执行了按照权利要求1-34中任何一条所描述之方法的步骤。
44.用于对数字编码的视频帧序列进行压缩的方法,包括如下步骤a.将一个给定帧划分成二维块,b.在所述块的信息内容上执行一个变换(DCT),该变换将空间表示转换成频率表示,从而产生多元素二维变换块(DCT系数矩阵),并且c.根据外部边界条件修改变换块的元素(量化),并且最后d.用熵编码对包含在变换块中的信息进行编码,其特征在于对多元素二维变换块之数据的修改在步骤c中作为神经网络的输出的函数而执行。
45.按照权利要求44的方法,其特征在于神经网络具有后向传播或反向传播结构,或者是一个由多个神经元构成的简单网络,其中-将期望/编码的长度以及期望/编码的质量的标准化值用作输入数据,-将特定数量的先前接收到的输入数据和当前输入数据存储在一个时间窗口(时隙)中,包含在时间窗口(时隙)中的数据被赋予神经网络的输入神经元。
46.按照权利要求45的方法,其特征在于所述网络输入层中神经元的数量等于存储在时间窗口中的数据元素的数量。
47.按照权利要求46的方法,其特征在于所述网络包括一个隐含层。
48.按照权利要求47的方法,其特征在于隐含层中神经元的数量大于输入层中神经元的数量。
49.按照权利要求44的方法,其特征在于将标准化的期望/编码的长度值以及期望/编码的质量值作为输入数据使用,-将预定数量(N)的先前接收到的输入数据元素(优选地N=31或N=63)与当前输入数据一起存储在时间窗口中,并且基于包含在时隙中的数据生成地址,-将输入数据舍入到用于地址生成过程的一个给定的比特长度,-通过哈希函数从时间窗口中的每个元素生成一个地址,所述的地址指向与该网络的其中一个处理元素对应的表的元素。
50.按照权利要求49的方法,其特征在于在将期望/编码的长度和质量数据舍入以用于地址生成之前,利用它们的原始形式对所述网络进行预先训练。
51.按照权利要求49或50的方法,其特征在于通过哈希函数根据包含在时间窗口中的数据生成地址。
52.按照权利要求44-51中任意一条权利要求的方法,其特征在于将允许的最小和最大带宽值用作两个处理元素的输入数据,所述两个处理元素与所述网络的其它部分相独立。
53.按照权利要求52的方法,其特征在于由所述网络的处理元素以及两个独立的处理元素生成的结果出现在两个输出上。
54.按照权利要求52的方法,其特征在于所述神经网络的输出是一个帧尺寸缩放因子和/或一个量化因子。
55.按照权利要求52的方法,其特征在于所述神经网络的输出是一个帧尺寸缩放因子和/或一个量化因子。
56.按照权利要求44-55中任意一条权利要求的方法,其特征在于在编码过程中也执行按照权利要求1-43中任意一条所描述的方法的步骤。
57.用于对数字视频数据进行编码的装置,其特征在于它包括适用于执行按照权利要求1-55中任意一条所描述的方法的步骤的装置。
58.包含用于执行按照权利要求1-55中任意一条所描述的方法的步骤的指令的软件。
59.由按照权利要求1-55中任意一条所描述的压缩方法产生的编码序列。
60.用于从编码序列中解压编码的视频数据的方法,所述编码序列是由按照权利要求1-55中任意一条所描述的压缩方法产生的。
全文摘要
本发明涉及一种用于压缩数字编码的视频帧序列的方法。在该方法中,将一个给定的帧划分成块,并且根据相邻的一块或多块中包含的信息修改了所选块的信息内容(预测),并且将所选块从空间表示转换成了频率表示。通过算术编码对转换块的信息内容进行编码。通过各种方法来提高编码效率,诸如动态地将所述的块分割成子块,或者在执行进一步的变换前在所述块中执行一个可压缩性分析。熵编码使用一个神经网络来确定算术编码的参数。根据可用的带宽以及编码图像的质量,将这些帧动态地重新缩放。
文档编号H04N7/46GK1857001SQ200480020907
公开日2006年11月1日 申请日期2004年5月20日 优先权日2003年5月20日
发明者P·托思, J·卡罗利 申请人:Amt 先进多媒体科技公司