2.相关技术描述
将数据从一个域(例如取样数据)到另一个域(如频率空间)的变换被用于许多信号和/或图像处理应用。这些变换被用于多种应用,包括(但不限于)数据分析、特征识别和/或提取、信号相关、数据压缩以及数据嵌入/生成水印。
在数据处理中,通常数据被表示为取样离散函数。这种离散表达式或者是确定性地构成或者是统计性地构成。在确定性表示中考虑数据的点特性,而在统计性表示中指定数据的平均特性。例如,本领域公知的使用离散余弦变换进行数据压缩。在这里引用的一些特定实例中将使用术语“图像”和“图像处理”。然而,本领域技术人员将会理解,本发明并不是要局限于处理图像,而是可应用于处理不同的数据,如音频数据、科学数据、图像数据等。
在数字图像处理***中,数字图像信号首先是通过把二维图像分割成网格来构成的。在该网格中每个图像素素,或者说像素,有与其相关联的若干视觉特征,如亮度和色彩。这些特征被转换成数值形式。于是,通过把图像中与每个像素关联的数值组合成能由数字图像信号接收器进行解释的序列,形成数字图像信号。
在许多数据处理过程中希望数据压缩,因为对于使用该数据的实际应用,存在太多的数据。通常,压缩用于通信链路以减少传输时间或所需的带宽。类似地,在包括数字打印机和复印机的图像存储***中希望进行压缩,在那里,要被打印的文件“页面”可以暂时存储在存储器中。这里,存储图像数据的介质空间量能由于压缩而显著地减少。一般地说,扫描的图像,即硬拷贝文件的电子表示,常常是大的,因此其成为所希望的压缩对象。
信号和图像处理经常要求把输入数据转换成变换系数供用于分析。往往只需要这些系数的量化版本(例如JPEG/MPEG数据压缩或音频/语音压缩)。许多这类应用需要实时地快速完成,如产生用于高速打印机的JPEG数据。许多这样的变换需要实时地有效实现和/或快速执行,不管是否使用压缩作为数据处理的一部分。
对数据信号处理业界的压力是找出最快的方法用于最有效地和快速地进行数字信号处理。如通常在压缩领域,在快速变换的实现领域研究工作高度活跃而且富有竞争性。研究者们已经做出广泛多样的努力,试图通过利用在变换和逆变换中发现的特性来利用要实现这些变换的硬件的作用。
一种这样的技术是ISO 10918-1 JPEG国际标准/ITU-T推荐T.81。在Pannebaker和Mitchell的“JPEG:静止图像数据压缩标准”Newyork,Van Nostrand Reinhold,1993(这里被纳入作为参考)再现了JPEG标准草案。在JPEG标准以及其他正在出现的压缩标准中定义的一种压缩方法是离散余弦变换(DCT)编码。使用DCT编码压缩的图像用称作逆DCT(IDCT)的一种逆变换解压缩。对DCT的一个极好的一般性参考是Rao和Yip的《离散余弦变换》,New York,Academic Press,1990,这里被纳入作为参考。将假定本领域技术人员熟悉上文引用的书中的内容。
不难看出,对计算机用户和其他人而言,如果静止图像存在存储问题的话,那么运动图像存储问题则严重得多,因为对于被显示的运动图像的每一秒钟,其完全运动的视频可能需要多达60幅图像。所以,运动图像压缩技术一直是要进一步发展和标准化活动的主题。两个重要的标准是ISO11172MPEG国际标准和ITU-T推荐H.261。这两个标准都部分地依赖DCT编码和IDCT编码。
二维离散余弦变换是一对数学方程,它们把一个N1xN2数值矩阵变换成另一个N1xN2数值矩阵或由另一个N1xN2数值矩阵变换成这个N1xN2数值矩阵。第一个矩阵通常代表一个构成数字图像的空间确定的分量值的NxN方阵。由于每个像素可能有若干分量与之关联,为了简单起见,在下文中考虑单分量像素。然而,对于本领域的专业人员而言,扩展到多分量像素是显然的。第二个矩阵是代表频率域中该图像的离散余弦变换系数矩阵。这种曲其频率分量的系数代表图像的方法是离散傅里叶(Fourier)变换的一个特例。离散傅里叶变换是经典的数学傅里叶变换的离散版本,在经典的数学傅里叶变换中,任何周期性波形都可以表示为不同频率和振幅的正弦和余弦波之和。与傅里叶变换类似,离散余弦变换是这样的一种变换,它把一个信号从时间域变换到频率域以及相反的变换。与离散傅里叶变换相比,全部DCT乘法都是实运算,这减少了所需乘法的次数。对于大多数图像,信号的大部分能量处于低频,这出现在DCT的左上角。右下角的值代表较高频率,它们往往小到足可以被忽略而几乎没有什么可以看得出的畸变。
有两个基本的离散余弦变换方程。第一个基本方程是正向离散余弦变换,它把像素值变换成离散余弦变换系数。第二个基本方程是逆离散余弦变换,它把离散余弦变换系数变换回到像素值。对图像进行离散余弦变换多数应用使用8×8矩阵,所以这里的N值为8。于是,假定进行变换时N值为8,f(i,j)是像素矩阵值,F(u,v)是离散余弦变换系数值,则2D(二维)离散余弦变换由下式给出: 这里x,y=空间域中的空间坐标(0,1,2,…7);u,v=变换域(0,1,2,…7)中的系数;对于u=0,有
否则为1;对于V=0,
否则为1。通过对8列进行1D(一维)DCT,然后对所得结果的8行进行1D DCT,从而利用了2D DCT的可分离特性。对于计算8点1D DCT,可得到若干快速算法。
如上所述,压缩器的DCT部分主要包含两部分。第一部分使用DCT变换把高度相关的图像数据变换成弱相关的系数,第二部分进行对系数的量化以降低传输或存储的比特率。然而,为进行DCT需要大量的计算。例如,在当前已知的快速算法中,处理长度为8个像素的一维DCT需要13次乘法和29次加法。(在文章“图像的快速DCT-SQ算法”(Trans.IEICE,Vol.E-71,No.11 pp1095-1097,1988年11月)中,Y.Arai、T.Agui和M.Nakajima建议,许多DCT乘法能被公式化为对DCT系数的比例因子(scaling multiplier)。提取出这些因子后的DCT称作求比例后的DCT(scaled DCT)。求比例后的DCT仍是正交的但不再是归一化的,然而可以在其后的量化过程中恢复比例因子。Arai等在他们的文章中表明,在处理8点求比例后DCT时只需要5次乘法和29次加法。如前所述,图像被分成大小为8×8像素、16×16像素或32×32像素的块。每块往往由逐行方式的一维DCT后跟逐列方式的一维DCT来处理。另一方面,由于不同输入类型和对压缩后数据的不同质量要求,选择不同的块大小供压缩。
可以以最小量的加法/减法用比例项(Scaled term)代替离散余弦变换(DCT)中的余弦项之类的倍增常数。然而,比例项只是近似于变换公式中的常数。这样,接受某种误差以使精度限定的固定的比特数或使操作次数达到最少。如果得到的数比最大可能误差更远离判定边界(例如一个阈值或量化边界),则结果将不受这些近似的影响。然而,在增量计算过程中,可能确定其结果数需要额外的精度。然而,原始的输入值在寄存器中不再能得到,从存储器中再次取出原始输入值能引起与高速缓存丢失和存储器延迟相关联的周期。强力(brute-force)选择是对数值进行一种逆变换(例如IDCT),然后以较高精度再运行正变换(例如FDCT,有时只称作DCT)。强力方法的缺点是一些操作被浪费。
然而,通常研究集中于特定的技术,如上述使用DCT编码以提供所希望压缩度的技术。虽然如此,其他变换可用于在某些条件下提供某些好处。例如,在上文讨论的DCT压缩编码方法中,输入图像被分成许多均匀的块,并对每块应用二维离散余弦变换函数,以把数据样本变换成一组变换系数,从而去掉空间冗余。然而,尽管得到了高压缩率,但产生了分块效应,这可能是细微的或明显的。再有,可由压缩***利用的矢量量化方法是有好处的,这是由于它们对高压缩率的贡献。另一方面,子带(Sub-band)方法可以减小在高数据压缩率时发生的分块效应。离散小波变换(DWT)或予带编码(SBC)方法基于例如时间和频率分量对信号编码。这样,这些变换方法对于分析非平稳信号会是有用的,而且它们的优点是可以被设计成考虑人类视觉***(HVS)的特性供图像分析。
于是,可以看出,需要提供一种能提供更快的变换计算的方法和装置,它使用早期中止和精度细算以节省处理周期,从而减少软件执行时间并降低对硬件的要求。
发明内容
为克服现有技术中的上述限制,并为了克服在阅读和理解本说明之后将清楚看出的其他限制,本发明公开一种使用多重比例项、早期中止和精度细算的快速变换。
本发明通过把离散变换分割成多个子变换来解决上述问题,这些子变换是通过对变换常数使用比例项独立计算出来的。再有,找到了用于二进制算术的比例项的优化表达式。得到的计算成为快速变换计算,减少了软件执行时间并降低了对硬件的要求。再有,本领域技术人员将会理解,往往能使用同样的方法实现逆变换,因而通常使用同样数量的操作。本发明还通过对变换常数使用比例项来减少乘法次数,从而解决上述问题。再有,在进行比例运算之后,这些常数项由一系列较少量线性移位和加法所取代,因为可以在仅少量加法后由2的幂次之和近似这些常数。本领域技术人员将会理解,本说明从头至尾使用“矩阵”这一术语,即在它的传统数学意义上使用,还用它涵盖全部硬件和软件***,当用于分析时它们能等效地表示为数学矩阵。本发明还通过根据对变换常数增量计算的测试来检测何时应该采取校正并采取下列校正以解决上述问题:细算增量计算以得到额外的精度和/或当得到的数变得太小时中止增量计算。
根据本发明原理的一种方法包括把变换方程安排成至少一个集群(collection),它有至少两个变换常数,并使用一个比例项对每个集群独立地对这至少两个变换常数进行比例运算,以在这至少一个集群内的这至少两个变换常数之间保持基本上均一的比值。本发明还涉及用2的幂次之和近似得到的比例离散余弦变换常数估计值来代表每个比例离散余弦变换常数,
根据本发明原理的方法的另一些实施例包括替代的或可任选的附加方面。本发明的一个这样的方面是该方法进一步包括把数据分成至少一块并通过比例变换方程变换成变换数据。
本发明的另一方面是基于二进制运算对离散余弦变换方程进行矩阵乘法以把数据块变换成变换后的数据,该二进制运算使用估计的求比例后的离散余弦变换常数并进行线性移位和加法。
本发明的另一方面是根据预定的成本(cost)函数选择比例项。
本发明的另一方面是该预定成本函数包含选择比例项,从而使任何变换系数的最大误差不大于预定的误差百分数。
本发明的另一方面是该预定成本函数包含选择比例项,从而使每个所涉及的变换系数的最大误差不大于其预定的误差百分数。
本发明的另一方面是该预定成本函数包含选择比例项,从而使预定的变换常数具有的误差小于或等于一个预定的误差百分数。
本发明的另一方面是该预定成本函数包含选择比例项,从而使每个所涉及的预定变换常数具有的误差小于或等于其预定误差百分数。
本发明的另一方面是该预定成本函数包含选择比例项和变换常数表达式,从而使一个集群的全部变换常数具有的联立二进制表达式带有预定特性。
本发明的另一方面是该成本函数使加法操作的次数减至最小。
本发明的另一方面是该成本函数使最坏情况下的加法次数减至最少。
本发明的另一方面是预定特性包含最少数量的公共2的幂次项。
本发明的另一方面是当二进制算术移位可以比乘法操作更有效时,实现选择比例项和变换常数表达式,从而使一个集群的全部变换常数所具有的联立二进制表达式带有最小数量的公共2的幂次项。
本发明的另一方面是预定特性包含非零2的幂次项的最大化群集。
本发明的另一方面是实现比例项的选择,使得当更希望利用较小整数而不希望利用较大数进行乘法操作时,一个集群的所有变换常数具有联立二进制表达式,这些表达式带有非零2的幂次项的最大的群集。
本发明的另一方面是对表示常数的2的幂次多项式的系数是否非零进行跟踪。
本发明的另一方面是比特位的位置值确定2的幂次项。
本发明的另一方面是对非零2的幂次项的群集实现最大化包括采取下列步骤找出比例常数的全部表达式:a)把第一变量设为块中的第i个元素,b)把第二变量初始化为值2,c)把一个位掩码(bitmask)初始化为二进制3,d)分析这些位以确定由第一变量指定的第i个元素是否是使用2n+2n-1=2n+1-2n-1进行项重排序所需要的候选表达式,e)通过把第二变量加到第一变量对第i个元素编码,以进行由2n+2n-1=2n+1-2n-1给出的有效的2的幂次改变,f)得到新的表达式,并使第一变量增量为第i+1个元素,g)将位掩码和第二变量向左移一位,以及h)重复d-g。
本发明的另一方面是该方法进一步包括:在检验是否设定了与掩码位匹配的第一变量之后,使位掩码向左移位从而在右侧放一个零并增大用于按2n+2n-1=2n+1-2n-1重排序的2的幂。
本发明的另一方面是这些集群代表进行部分计算的不相交变换方程组。
本发明的另一方面是这些集群不代表进行部分计算的不相交变换方程组。
本发明的另一方面是该方法进一步包括在至少一个集群中的每个集群中为变换常数选择一个独立的比例项。
根据本发明原理的一种方法包括:在变换过程中测试由变换系数的增量计算得到的至少一个数,根据该测试确定是否进行校正,并且当确定需要校正时进行校正。
根据本发明原理的方法的另一些实施例包括其它的或可任选的附加方面。本发明的一个这样的方面是该确定过程包含检测变换系数的增量计算是否将造成变换系数具有不可接收的精度,而进行校正包含细算(refine)至少一个数。
本发明的另一方面是该变换包含一个变换矩阵,而且其中细算包含应用一个细算矩阵以提高变换常数增量计算的精度。
本发明的另一方面是细算矩阵包含I+dDm+1Dm -1。
本发明的另一方面是该方法进一步包括根据近似计算的变换常数产生至少一个细算矩阵。
本发明的另一方面是产生至少一个细算矩阵是离线进行的或在初始化时进行的。
本发明的另一方面是产生至少一个细算矩阵包含:承认一个近似变换是可逆的,产生由I+dDm+1Dm -1给出的细算矩阵以及构成用于有效计算的变换。
本发明的另一方面是产生细算矩阵包括承认为产生一个变换而恢复该变换矩阵的第n列是不可能的,为该变换矩阵的一部分计算伪逆(pseudo inverse)并使用该换矩阵的伪逆产生细算矩阵的近似。
本发明的另一方面是该确定过程进一步包含确定由终止增量计算造成的误差是否是可接受的,而进行的校正包含中止变换系数的增量计算。
本发明的另一方面是当确定增量计算将得到一个预计落入预定范围的数时终止增量计算。
本发明的另一方面是预计落入预定范围的数包含满足精度要求的变换系数。
本发明的另一方面是当确定对变换系数的细算不改变其结果时终止增量计算。
本发明的另一方面是:在检验增量计算结果的相对大小之后,当对至少一个变换系数的中间计算与另一变换系数的中间计算相比为较小时,确定对变换系数的细算没有改变结果。
本发明的另一方面是:在检验至少一个增量计算结果的大小之后,当变换系数的至少一个中间计算结果小于一预定阈值时,便确定对变换系数的细算没有改变其结果。
本发明的另一方面是该确定过程进一步包含确定一个变换系数要在零的预定范围内,而进行校正包含中止变换系数的增量计算。
在本发明的另一实施例中,提供了一种数据压缩***。该数据压缩***包括一个变换器和一个量化器:变换器应用线性变换,使用变换方程使数据解除相关性,成为变换系数,这些变换方程的构成是通过把变换方程安排成有至少两个变换常数的至少一个集群并以一个比例项对每个集群的这至少两个变换常数进行独立的比例运算,以使这至少一个集群内的这至少两个变换常数之间保持基本均一的比值,这里的比例项是根据预定的成本函数选定的;量化器用于通过减少表示变换系数所需的位数使变换后的数据量化为量化数据。
在本发明的另一实施例中提供了一台打印机。该打印机包括用于存储图像数据的存储器、用于处理该图像数据以提供压缩打印流输出的处理器以及用于控制打印头以产生图像数据打印输出的打印头控制电路,其中该处理器应用线性变换,使用变换方程使数据解除相关性,成为变换系数,这些变换方程的构成是通过把变换方程安排成有至少两个变换常数的至少一个集群并以一个比例项对每个集群的这至少两个变换常数进行独立的比例运算,以使这至少一个集群内的这至少两个变换常数之间保持基本均一的比值,其中比例项是根据预定的成本函数选定的。
在本发明的另一实施例中,提供了一种生产产品。该生产产品包括一个计算机可读的程序存储介质,该介质有形地包含一个或多个可由计算机执行的指令程序,以实现一种方法,该方法把变换方程安排成有至少两个变换常数的至少一个集群并以一个比例项对每个集群的这至少两个变换常数进行独立的比例运算,以使这至少一个集群内的这至少两个变换常数之间保持基本均一的比值,其中比例项是根据预定的成本函数选定的。
在本发明的另一实施例中,提供了一种数据分析***。该数据分析***包括变换方程和变换器,这些变换方程的构成是通过把变换方程安排成有至少两个变换常数的至少一个集群并以一个比例项对每个集群的这至少两个变换常数进行独立的比例运算,以使这至少一个集群内的这至少两个变换常数之间保持基本均一的比值,其中比例项是根据预定的成本函数选定的,变换器应用变换方程进行线性变换,对数据去相关,变换成变换系数。
表征本发明创新处的这些和其他优点和特点由这里所附作为本申请一部分的权利要求具体指出。然而,为了更好地理解本发明,它的优点以及由使用它而达到的目的,应该参考附图,附图进一步构成本申请的一部分,并附在描述性内容之后,在这些附图中示出和描述了根据本发明的装置的具体实例。
具体实施方式
在下文中对实施示例的描述中将参考附图,这些附图构成本申请的一部分,其中以举例方式示出可以实现本发明的具体实施例。应该理解,可以实现其他实施例,因为可以对结构进行改变而不脱离本发明的范围。
本发明提供使用多重比例项的快速变换。这些变换被分割成子变换,使用变换常数的比例项对它们独立地进行计算。找到了用于二进制运算的比例项的优化表达式。这一方法使变换计算变快、减少了软件执行时间以及降低了硬件要求。根据本发明,在信号和图像处理中使用的离散变换利用了所谓基函数(basis function),这些基函数设定变换的结构并为允许在两个或更多个子集群中计算该变换打下基础。然后使用快速实现变换的成本函数来找出计算中的基系数的优化表达式。
图1显示典型的图像压缩***100。该数据压缩***可以包括三个密切联系的部件,即(a)变换120,(b)量化器130以及(c)可选的熵编码器140。通过应用线性变换解除图像数据110的相关性,对得到的变换系数量化以及如果希望的话对量化的值进行熵编码实现压缩。已经开发了多种线性变换,包括离散傅里叶变换(DFT)、离散余弦变换(DCT)、离散小波变换(DWT),还有更多,每种变换有其自已的优点和缺点。
量化器130仅通过降低那些值的精度来减少为存储变换后的系数所需要的位数。由于这是“多到1”的映射,所以它是一个有损过程而且是编码器中的显著的压缩源。可对每个单个系数进行量化,称作标量量化(SQ)。也能对系数的集群一起进行量化,这称作矢量量化(VQ)。根据要解决的问题,均一的和非均一的量化器都可使用。
可选的熵编码器140进一步无损地压缩量化后的值,以给出更好的总压缩。它使用一个模型精确地确定每个量化值的概率并根据这些概率产生适当的编码,从而使得到的输出代码流将小于输入流。最常用的熵编码器是Huffman编码器和算术编码器,当然,对于需要快速执行的应用,简单的游程长度编码(RLE)被证明是很有效的。
术语“图像变换”通常是指用于代表图像的一类酉矩阵。这意味着能使用这些矩阵把图像转换成替代的表达式。这些变换构成变换编码的基础。变换编码是对变换的系数进行编码以供传输的一个过程。
信号(x)是一个函数,它把从0到n-1的每个整数映射到一个复数中。一行取样的或像素化的图像给出这样一个实例。这里的样本或像素是等间隔的。这个(x)的集群的“正交基”是函数
的集合,其中对y1z,
(X)的“变换”,表示为F(y),由 给出。这类变换用于很多信号和图像处理应用中,以从原始信号中提取信息。变换的一个示例是离散傅里叶变换(DFT),这里by(x)=exp(2pixy/n)。与此关联的的一个例子是离散余弦变换(DCT),这里by(x)=cos(2pxy/n)。另一个例子是小波变换,这里by(x)是母小波函数的特定比例和偏移后的版本。(见Ingrid Daubechies的《小波十讲》,工业与应用数字协会,1992年5月)。
现在将通过显示能进行比例运算而不破坏变换结构的数字基础,来说明独立的比例运算操作的理论基础。定义一个变换
考虑这样一些情况(下文描述),此时by(x)使得这一变换能被分割成两个或更多个不相交的和,而不管(x)的结构如何。(当在这里针对方程组使用术语“不相交(disjoint)”时,是指两个不相交的方程组中的方程之间没有共同的变换系数。)例如,如果b2y(x)有偶对称性,b2y+1(x)有奇对称性,则由数学可知,任何(x)能被唯一地写做(x)=e(x)+o(x),这里e(x)是偶数(关于零对称),而o(x)是奇数(关于零反对称),并且
这使该变换能被等效地写做:
图2显示JPEG编码器100的方框图。在图2中,数字图像数据116被分割成多达8×8的像素块112。然后,对每块计算离散余弦变换(DCT)(120)。离散等弦变换(DCT)有助于把数据分成有不同重要性(例如关于图像的视觉质量)的若干部分(或子频带)。DCT与离散傅里叶变换相似:它把信号从空间域变换到频率域。
量化器130根据量化矩阵对DCT系数进行舍入。这一步骤产生了JPEG的“有损”特性,但使得能够有大的压缩比。这是在图像质量和量化程度之间的折衷。大的量化步长能产生不可接受的大的图像畸变。这种效应类似于太稀疏地量化傅里叶级数系数,这会造成大的畸变。可惜的是,较精细的量化导致较低的压缩比。问题是如何最有效地量化DCT系数。由于人类视觉的自然高频滚降,这些频率所起的作用小于低频。这使JPEG对高频系数使用高得多的步长,而几乎没有可觉察的图像质量下降。然后,量化器系数输出可由可选的熵编码器140编码,以向输出文件中产生压缩后的数据流150。请注意,对于JPEG,熵编码器不是任选的,但其他类似的数据压缩***能被设计成没有由熵编码器所需要的CPU周期。
然而,如下文所述,需要提供一种方法和装置用于以较小的乘法步骤完成离散余弦变换,从而增大编码器100的吞吐量。如下文所述,根据本发明的方法通过对系数矩阵进行比例运算可节省强力方程中的乘法运算。每个可分离的子组被独立于其他集群进行比例计算。在每个集群中,其余的乘法运算由简单的移位和相加代替。根据各种成本函数选择比例项。该最佳实施例使用的成本函数使相加数量最少并使最坏情况的相加数量最少。然而,本领域技术人员将会理解,其他成本函数能选择每个系数允许有多大误差。再有,本领域技术人员将会理解,使用相同的方法能实现逆DCT(IDCT),从而使用与其相同数量的操作。
图3显示本发明的流程图200,在图3中,变换方程被分割成具有至少两个变换常数的至少一个子变换(210)。在这里使用的术语“子变换”是指用于产生变换后项的子集的方程集群,这里的子集可以包含全部变换后的项或者少于变换后的项的总数。接下来,用比例项对每个集群的变换常数独立地进行比例运算,以在集群内变换常数之间保持基本均一的比值,其中根据预定的成本函数选择比例项(220)。其结果是得到用于变换该块的变换方程。数据被分成至少一块(230)。然后使用变换方程把该块变换成变换后的数据(240)。传统的***将离线完成块210和220。然而,对于诸如JPEG 2000等在运行时指定的算法,会在程序初始化阶段自动完成这些块。参考图1的量化器130,然后可通过把比例运算纳入量化使变换后的数据被量化。这与整数余弦变换(ICT)不同(例如见Pang等人的”图像编码用的自计时芯片”,IEEE Trans。“视频技术用的电路和***”,Vol.9,no6,1999,pp856-860),其中在每个方程中用同一值对每个系数进行比例运算,这种方法不具有这里描述的方法的计算优点。
对常数的比例项的选择可以用代表目标***需求的成本函数来选择。对这一成本函数识别出若干参数供快速变换使用。所使用的实际成本函数可以包括下述成本函数之一或它们的组合:
第一成本函数是:任何变换系数(即F(x))的最大误差不大于P%,这里P由算法设计者选择。在下面的例子中P=1。
第二成本函数是:由算法设计者选定的某些更重要的变换常数的误差不大于P重要%。在下面的例子中低频项的误差小于0.1%。
第三成本函数被分成两个判据:C1和C2,它们应用于不同的***,即一般性地选择满足判据C1或判据C2。判据C1可应用于移位比乘法更有效的那些实现(例如软件或固件)。判据C2可应用于与利用较大数的乘法相比更希望利用较小整数乘法的那些实现(例如超过一定比特位数的乘法使用更多周期或关心总精度的那些软件实现)。将给出具体实例来说明这两个判据。这两个判据能在一起使用。
根据第一判据C1,在同一个和中出现的所有求比例后的整数基因子(在FDCT的情况中,常数C1至C7,这里Ck=cos(kp/16))应该具有联立二进制表达式(simultanous binary representation),这些表达式有最少数量的共同2的幂次项,即在一个集群内全部表达式的2的幂次项集合应尽可能小。实数常数可由有理数(即整数的比)近似。这里针对求比例之后的变换常数所使用的词“表达式”是指这一整数比的分子可以作为2的幂的和/或差计算出来所采用的方式。
例如,在FDCT中,变换能被分成三个方程组:
2S(0)=C4(s0734+s1625) (1)
2S(4)=C4(s0734-s1625)
2S(2)=C2d0734+C6d1625 (2)
2S(6)=C6d0734-C2d1625
2S=C1d07+C3d16+C5d25+C7d34 (3)
2S(3)=C3d07-C7d16-C1d25-C5d34
2S(5)=C5d07-C1d16+C7d25+C5d34
2S(7)=C7d07-C5d16+C3d25-C1d34
这些方程中使用的符号取自Pennebaker的书。请注意,Ss与
成正比。这样,在方程组3中的常数应该有联立二进制表达式,它们具有最少数量的2的幂次项,但它们的联立表达式与方程组2中的常数所使用的表达式无关。方程组3的具体实例示于下面:
41C1≈40=25+23
41C3≈34=25+21
41C5≈23=25-23-21+20
41C7≈23
所有这些表达式对每个系数的误差小于1%。在此例中,公用2的幂次项集合是{25,23,21,20},这可从这些方程中看出,这些表达式可以看做是2的多项式,以+1或0乘2的每个方幂,即
41C1≈1·25+1·23+0·21+0·20 (4)
使得这些项的个数有效地减至最少的原因在于:方程组3能通过组合这些2的幂次计算出来。在使用这一判据C1的结构中,在占用周期方面加法和移位比乘法廉价,所以我们可以把方程组3看作计算矩阵操作
计数加法和移位,它使用总共28次操作。如果我们预先计算出A=d2s-d34和B=d07+d16,则方程变成:
利用预先计算,它成为24个周期。再有,消去20项,它对C5提高误差3%左右,把操作总数减为20。应该指出,上面讨论的快速DCT的奇数号系数的计算除了初始的加、减计算还使用11次加法和4次乘法,这里乘法占用的周期对许多微处理器而言是大于1的,往往在4和11个周期之间。
根据第二判据C2,在同一个和(例如上文中的同一组1、2或3)中出现的所有求比例后的整数基因子(例如FDCT情况中的C1至C7)应该具有联立二进制表达式,这些表达式有尽可能群集(clustered)的非零2的幂次项;即2的最大幂次项和最小2的幂次项之差尽可能小。群集的表述式的实例示于下式:28=25-22和28=24+23+22。在第一个表达式中,2的幂次分散为5-2=3,而在第二个表达式中,2的幂次分散为4-2=2。这使28的第二个表达式比第一个更为“群集”。其优点是:假设在一组中的所有常数的表达式中2的最小幂次是22。这意味着在计算中能在量化中取得两位精度和有效地求比例,我们将以22除所有的常数,从而不必对尾部的那些零移位。
如果需要的话,可以在量化之前把这些尾部的零所代表的附加量级再引入到数中,例如,如果在表达式之一中的尾部1需要“舍取出来”作为精度以做量化判定的话。(见上文中在C1下的例子,其中我们建议可能舍掉20项。)
图4显示一方法的流程图300,该方法使用条件
2n+2n-1=2n+1-2n-1 (5)找出用于第二判据C2的联立表达式。首先,把“num”设定为“repcount”(310),这是数组“reps”的第i个元素。对于一个给定数的表示式的当前计数是“repcount”。变量“add”被初始化为2(312)。位掩码(bitmask)被初始化为二进制0…011(314)。
对各位进行检验,以确定与掩码位匹配的“num”中的两个位是否都被设定(340)。如果不是(342),则掩码向左移一位(350),有效地在右边放一个零,“add”向左移一位,从而增大2的幂次,这用于上述方程(5)中重新排序。如果与掩码位匹配的“num”中的两个位都被设定(344),则这个位模式“num”是候选表达式,用于使用上述条件(5)进行项重新排序。然后,通过把“add”加到“num”上,“num”对该表达式编码,以进行由上述条件(5)中所示方程给出的2的幂次改变(346)。这提供了比强力方法更快的速度和更高的存储效率;例如,进行对各表达式的穷尽搜索并分别存储全部零、+1和-1值。一个新的表达式得到了,“repcoumt”被设置为“repcount”+1(348)。掩码向左移动一位(350)。
移位将进行下去,直至达到预定的最大值“maxmask”(370)。如果尚未达到预定的最大值,则以新的“repcount”重复该例程,于是“num”被设定为新的表达式(372)。否则进入374,于是该例程结束。
利用程序中表达式被编码的方式,程序只保持跟踪2的幂次多项式中的系数(例如见方程(4))是否非零;即+1作为“1”位存储,而0作为“0”位存储。多项式中的2的幂次项以其位的位置编码;例如,位零(最右侧)对应于20。程序不能把+1区分开,所以人们可能会对程序如何跟踪表达式提出凝问。由于掩码在整数表达式中向左扫描,还由于表达式从2n+2n-1变化为2n+1-2n-1只是在多项式表达式中把2的幂向有效地左移(即它只增加表达式中使用的2的幂),所以没有机会移动一个2的幂使得具有因子a+1的2的幂与具有因子a-1的相同2的幂相加。这样,只跟踪这些因子是否非零便足够了,因为与上述“reps”中存储的整数耦合的原始整数的知识足以唯一地确定该表达式。
如前所述,本发明还致力于不能把各项很好地分成不相交方程组的那些变换,那些变换不像FDCT(以及IDCT)能被分成上述组1、2和3。如前所述,术语“不相交(disjoint)”当在这里针对方程组使用时是指在两个不相交的方程组中各方程之间没有共同的变换常数。如果使用这些常数的2的幂联立表达式,通过在变换中任意地或根据某种成本函数选择方程组,通过为每组中的常数选择独立的比例项,并对变换常数表达式以2的幂分组,仍可能实现加速,所以人们仍想要造成判据用于找出任意方程组中系数的表达式。当变换分离成不相交方程组时,恰能将特别好地做到这一点,因为变换常数被组合到这些方程组中。
下面是FDCT的一个例子,这里我们使用不同的组合:
2S(0)=C4(s0734+s1625) (6)
2S(3)=C3d07-C7d16-C1d25-C5d34
2S(5)=C5d07-C1d16+C7d25+C3d34
2S(2)=C2d0734+C6d1625 (7)
2S(6)=C6d0734-C2d1625
2S(4)=C4(s0734-s1625)
2S(1)=C1d07+C3d16+C5d25+C7d34 (8)
2S(7)=C7d07-C5d16+C3d25-C1d34
现在对组6能得到一个比例项,并能找出C1、C3、C4、C5、C7的联立表达式,以进行该组中的三次计算。然后,可以找出组8的一个不同的比例项和这些方程的C1、C3、C5、C7的联立表达式,这些表达式可能与组6的计算中使用的那些表达式很不同。
图5显示流程图300用于使用校正提供更快的变换计算和减少执行次数,从而提供更快的变换。使用变换中的变换常数进行的增量计算所得到的至少一个数被测试(310)。然后,根据该测试,确定何时进行校正(320)。一旦确定要进行校正,则进行校正(330)。
细算的第一个例子发生于当每个dDk把至少一个额外的精度位加到由D进行的变换时,第二个例子发生于当变换矢量
的至少一个元素被假定为很小,从而dDk的整个一行可以近似为零之时,使得我们能跳过F的那个至少一个元素的计算。
在第一例中,常常所有Dk都是可逆的;即存在矩阵Dk -1,使DkDk -1=Dk -1Dk=I,I是单位矩阵,它在从左上到右下的对角线上有1,而在其他地方为零。在这种情况中,可以写成 (这里I是单位矩阵);即通过对变换后的系数再进行一次变换步骤来提供附加的提高精度步骤。使用这一附加的变换步骤来提高精度是本发明提供的细算的第一实施例,因为它省去了进行IDCT和其后的DCT:矩阵(I+dDm+1Dm -1)能事先作为矩阵Rm+1计算出来,于是
这是对Fm的单步变换。
细算的第二例要求不同的做法。考虑一个具体实例,这里已在第一维中以高精度完成了2-D变换FD’,
dD
0第8个行为零,而且
dD
1=D-
dD
0。然后,
dD
0是不可逆的,即无法从
dD
0FD’恢复FD’的原始8列(这来自这样的事实:从
dD
0FD’中找出FD’可被看做含有8个未知数的7个方程)。然而,如果对FD’的8列中的一个进行假定,则根据对第8列的假定,能从
dD
0FD’中估计出其他7列。一个合理的假定是第8列含有小元素,它们可以近似为零,因为较高编号的变换值趋向于在实际图像中不如较低编号的变换值那样重要。于是,
dD
0可作为8×7矩阵对待(忽略零行),以第8行为零***假定的第8行系数,由
可以找出伪逆
(如在文献中公知的那样)。这给出对
d的8×8近似D
0 -1,于是我们能近似
这一近似细算是本发明细算的第二实施例,它如第一例中那样节省由DCT跟随的IDCT的周期。
中止过程用于确定在计算完成之前何时能终止计算以节省周期,此时的计算结果预计是太小的值,故将被量化为零。应用中止过程的一个例子出现在上述例子中,其中至少一个低量级变换系数未被计算,基本上等效于把变换矩阵的相应一行或多行设定为零。另一例子是以有限精度停止计算,此时预计额外的变换精度对变换后的值提供的信息是可以忽略的,例如预计其计算结果小时。另一种方法涉及测试变换的某些输入之和和/或差的大小。例如,对于FDCT,下列方程计算第二变换系数:
2S(2)=C2d0734+C6d162这里d0734=S07-S34,d1625=S16-S25,符号取自Pennebaker和Mitchell的JPEG文本。可以测试这些值的大小对其后处理变换系数造成的影响。在这个例子中,如果S(2)小于Q/2的大小(其中Q是S(2)的量化值),则S(2)将被量化为零.这转换为测试d073的大小是否小于Q/(2C2)和d162的大小是否小于Q/(2C6)。如果满足这一测试,则对S(2)的计算可被中止,于是S(2)被设置为它的量化值零。这种测试输入值的和和/或差的方法能扩展到FDCT的全部方程。
如何把诸如
的比较(对矢量或矩阵
的逐项范围的检验)(这里
的元素全为非负)转换成F的元素的逐项比较,-T<F<T(这里T的元素全为非负),而且满足对F的测试便足以满足对
的测试,这并不是显然的事。困难来自于DCT既利用正操作也利用负操作这一事实,这破坏了方程中的逐项排序。具体地说,它不能说如果
便意味着
这样,中止涉及在预计额外的变换精度对其后的处理操作(例如量化或比较)结果有可接受的或可忽略的影响时便终止一个操作的精度。例如,DCT的系数能由一个整数进行比例运算并近似为2的幂次之和。对于奇数项,这些近似之一如下所示: 我们把它写做(使用上文中的符号)。
41D≈25 dD0+23 dD1+21 dD2+20 dD3
同样,如上所述,所有上述矩阵以及它们的顺序和都是可逆的。现在,如果
即
的第j个元素的大小很小,则j(32dD0F)应该是小的。如果不是,则j((8dD1+2dD2+dD3)F)将不能消去它以使最后结果小,可以检验这些计算结果的相对大小。如果对于一个中等精度而言这些变换值之一与其他值相比是小的,或者与某个预定阈值相比是小的,则可以中止其后对那个变换值的细算。
图6显示根据本发明的一种中止方法的流程图400,它显示中止进一步迭代变换系数计算过程。在图6中,至少一个增量计算的数被测试(410)。如果满足某些判据,则进一步的计算被中止(420)。当由于终止增量计算所造成的误差可以接受时,对变换系数的增量计算可以被中止。例如,当确定增量计算将得到预计落入预定范围的一个数时,例如一个满足精度要求的变换系数,此时增量计算可被终止。另一种作法是,当一变换系数要落入零的预定范围内时,该变换系数的增量计算可被中止。
图7显示测试至少一个增量计算出的数的流程图500。在图7中,增量计算被测试,以确定何时对变换系数的细算将不改变结果(510),如用7中所示,这一测试可以以至少两种方式进行。在检验增量计算结果的相对大小之后,当这至少一个变换系数的中间计算结果与另一变换系数的中间计算结果相比为较小时,可以确定该变换系数的细算将不改变结果(520)。另一种作法是,在检验至少一个增量计算结果的大小之后,当该变换系数的至少一个中间计算结果小于预定阈值时,可以确定该变换系数的细算将不改变结果(530)。
图8是根据本发明的细算方法的流程图600。首先,确定该变换是否要求更高精度(610)。该变换是一个变换矩阵,其中细算矩阵可以用于提高变换系数增量计算的精度。当要求更高精度时,一个细算矩阵应用于该变换(620)。细算矩阵是离线产生的或在初始化时产生,它以近似计算的变换常数为基础。
图9显示产生细算矩阵的第一种方法的流程图(700)。首先,承认一个近似变换是可逆的(710)。产生由I+dDm+1D-1 m给出的细算矩阵(720)。然后构成用于有效计算的变换(730)。
然而,如前所述,当dD0不可逆时,没法从dD0FD’中恢复FD’的原始8列。图10的流程图800显示当dD0不可逆时产生细算矩阵的第二种方法。首先承认为产生变换而恢复变换矩阵的第n列是不可能的(810)。计算该变换矩阵一部分的伪逆(820)。然后,使用该变换矩阵的伪逆产生细算矩阵的近似(830)。该细算矩阵的近似包含I+dD1dD0。
图11显示根据本发明的打印机420的方框图400。在图11中,打印机420从主处理器410接收图像数据412。图像数据412被提供给存储器430,在那里图像数据可被安排成8×8的块样本。然后8×8的块样本由处理器440处理,如栅格图像处理器。栅格图像处理器440向打印头驱动电路450提供代表图像数据的压缩的打印流。然后打印头驱动电路450控制打印头460产生图像数据的打印输出470。
参考图1-4所显示的过程可以在计算可读介质或载体490中有形地实现,例如如图11中所示一个或多个固定的和/或可卸的数据存储装置或其他数据存储或数据通信装置。计算机程序可被加载到存储器492中以配置图11中的处理器440供执行。该计算机程序包含指令,当图11的处理器440读出和执行时,这些指令使处理器440进行为执行本发明的步骤或元素所必须的步骤。
图12显示根据本发明的数据分析***500。在图12中,变换510接收要被分析的数据块512。变换510使用变换方程520产生变换后的数据524。变换方程520被分成具有至少两个变换常数的至少一个的子变换。对每个集群这至两个变换常数被一个比例项独立地进行比例运算,以保持这至少一个集群内的这至少两个变换常数之间保持基本均一的比值,其中比例项可以根据预定的成本函数来选择。然后,变换后的数据524可以任选地由量化器530进行量化。在量化器530中的量化值可以调整,以反映为每个集群所使用的比例项。
图13显示根据本发明的另一个数据分析***600。在图13中,变换610接收要被分析的数据块612。变换610使用变换方程620产生变换后的数据624。变换方程624被分成具有至少两个变换常数的至少一个子变换。对每个集群这至少两个变换常数被一个比例项独立地进行比例运算,以保持这至少一个集群内的这至少两个变换常数之间保持基本均一的比值,其中比例项可以根据预定的成本函数来选择。然后,变换后的数据624可以与比较器630中的比例比较值进行比较。
上文中已经对本发明的实施示例进行了描述,其目的是为了举例说明和描述。而不是穷尽或把本发明局限于所公开的准确形式。根据上述教导,许多修改和变化是可能的。本发明的范围不限定于这一详细描述,相反,要由这里所附权利要求来限定。