数据阵列的位平面编码的制作方法

文档序号:26013146发布日期:2021-07-23 21:34阅读:146来源:国知局
数据阵列的位平面编码的制作方法



背景技术:

本文所述的技术涉及用于在数据处理系统中对数据进行编码(例如,用于存储器中的存储)的方法和装置,并且具体地涉及用于在图形处理系统中压缩和存储图像数据诸如纹理或帧缓冲区数据的方法。还描述了一种对应的解码方法和装置。

数据处理系统通常将生成的图像数据存储在帧缓冲区内。帧缓冲区通常包含例如要显示的帧(图像)的完整数据集合,包括例如该帧内的每个(例如)像素的颜色值。然后,合适的显示驱动器能够读取帧缓冲区的内容并使用存储在其中的图像数据来驱动显示器以显示期望的帧(图像)。

然而,图像数据在帧缓冲区中的存储和访问(“帧缓冲区数据”)可对例如数据处理系统的存储和/或带宽资源提出相对高的需求(或相反地,在不满足此类需求时导致性能降低)。为了减少施加在数据处理系统上的负担,因此希望能够以“压缩”格式存储此类帧缓冲区数据。这在例如便携式设备(其中处理资源和功率可能比较有限)诸如数字相机或包括此类相机的移动设备的数据处理装置中是特别需要的。

类似的考虑适用于期望减少存储和/或传输某条信息所需的数据量的各种其他情况。同样在图形处理的上下文中,另一个示例将是当存储纹理数据时,例如以纹理元素(或“纹素”)阵列的形式存储纹理数据,每个纹理元素表示给定纹理数据(诸如颜色、亮度等),然后可将给定纹理数据映射到所生成的渲染输出的相应采样位置(像素)上。同样,该纹理数据的存储和访问可对数据处理系统提出相对高的存储和/或带宽要求。

因此,常见的是对数据元素阵列(诸如图像数据值阵列)进行编码,以便压缩数据,从而减少带宽和存储器消耗。为此,已开发出各种数据压缩方案。

然而,申请人认为,在对数据进行编码(压缩)方面仍有更有效布置的空间。

附图说明

现在将仅以举例的方式并参考附图来描述本文所述的技术的各种实施方案,其中:

图1示意性地示出了可以在其中实现本文所述技术的实施方案的数据处理系统的示例。

图2示意性地示出了根据本文所述技术的实施方案的固定速率编码过程;

图3a示出了用于根据本文所述技术的实施方案进行编码的(例如,如可以在频域变换之后获得的)典型的4×4数据值块的示例,并且图3b示出了该数据值块可以如何分解成二进制位平面集合;

图4是示出根据本文所述技术的实施方案的编码过程的概览的流程图;

图5是示出根据本文所述技术的实施方案的可以如何对位平面序列中的每个位平面阵列进行编码的流程图;

图6示出了根据本文所述技术的实施方案的编码图3b所示的位平面表示的数据值的示例;

图7示意性地示出了根据本文所述技术的实施方案的编码8×8块的示例;

图8示意性地示出了根据本文所述技术的实施方案的多平面编码过程;

图9为根据本文所述技术的实施方案的编码过程的流程图;

图10示意性地示出了根据本文所述技术的实施方案的解码过程;

图11示出了根据本文所述技术的实施方案的解码过程的示例;

图12示意性地示出了根据本文所述技术的实施方案的对编码方案的无损扩展的示例;

图13示出了有损变换的示例;并且

图14示意性地示出了如何实现无损变换以与本文所述技术的实施方案一起使用的示例。

附图示出了与本文所述技术的实施方案相关的数据处理装置和系统的元件。如本领域的技术人员将理解的,可存在数据处理装置的在附图中未示出的其他元件。此处还应当指出的是,附图仅是示意性的,并且例如,在实践中,所示的元件可共享重要的硬件电路,即使它们在附图中被示意性地示出为独立的元件(或者相反地,在元件被示出为共享重要的硬件电路,这些元件在实践中可包括独立的元件)。

具体实施方式

本文所述技术的第一实施方案包括一种对表示值的空间分布的数据元素阵列进行编码的方法,所述方法包括:

对数据元素阵列执行频率变换操作以生成相应的频域系数集合;

将频域系数集合表示为多个位平面阵列,每个位平面阵列表示频域系数值的特定位位置,其中每个位平面阵列包括与位平面阵列表示的位位置处的频域系数中的每个频域系数的位值相对应的位阵列;以及

通过在位平面序列中编码位平面阵列来将频域系数集合编码为具有固定大小的数据分组,编码从表示最高有效位的位平面阵列向下工作直到数据分组已满;

其中每个位平面阵列通过将位平面阵列细分成相应区段来编码,并且在数据分组中存在可用空间的情况下,在数据分组中包括指示在位平面序列中首次包含具有非零位值的一个或多个系数的位平面阵列中的任何区段的位置的数据,然后将位平面阵列中的任何此类新活动区段以及位平面序列中的先前位平面阵列中第一非零位值出现的任何区段递归地细分成相应子区段,并且在数据分组中包括指示位平面序列中第一非零位值出现在位平面阵列中的任何子区段的位置的数据,直到第一非零位值出现在位平面阵列中的系数的位置被指示。

本文所述技术的第二实施方案包括一种用于对表示值的空间分布的数据元素阵列进行编码的装置,该装置包括编码器,该编码器包括:

变换电路,该变换电路用于对数据元素阵列执行频率变换操作以生成相应的频域系数集合;

位平面编码电路,该位平面编码电路用于将频域系数集合表示为多个位平面阵列,每个位平面阵列表示频域系数值的特定位位置,其中每个位平面阵列包括与位平面阵列表示的位位置处的频域系数中的每个频域系数的位值相对应的位阵列;和

编码电路,该编码电路被配置为通过在位平面序列中编码位平面阵列来将表示频域系数的位平面阵列集合编码为具有固定大小的数据分组,编码从表示最高有效位的位平面阵列向下工作直到数据分组已满;

其中编码电路被配置为通过将每个位平面阵列细分成相应区段来对位平面阵列进行编码,并且在数据分组中存在可用空间的情况下,在数据分组中包括指示在位平面序列中首次包含具有非零位值的一个或多个系数的位平面阵列中的任何区段的位置的数据,然后将位平面阵列中的任何此类新活动区段以及位平面序列中的先前位平面阵列中第一非零位值出现的任何区段递归地细分成相应子区段,并且在数据分组中包括指示位平面序列中第一非零位值出现在位平面阵列中的任何子区段的位置的数据,直到第一非零位值出现在位平面阵列中的系数的位置被指示。

在本文所述的技术中,当对数据元素阵列诸如图像数据块等进行编码时,首先对数据元素阵列应用频率变换操作以将数据阵列的空间表示变换到频域中。频域系数可使用符号量值格式来存储(并且在一个实施方案中存储),即,其中单个位用于指示符号值(例如,“1”表示正且“0”表示负,或反之亦然),并且其中量值是系数的绝对值(并且因此最高有效位也是最高非零位)。然后对频域系数执行位平面编码,以将频域系数的(绝对)量值分解成包含频域系数中的每个频域系数的每个位位置处的相应(二进制)位值的位平面阵列集合。然后通过将位从最高有效(顶部)位平面向下打包到固定大小的数据分组中来对位平面表示的数据进行编码,直到数据分组已满。

因此,当数据分组已满时,编码停止。这样,可确保可生成具有所需固定大小的数据分组。

因此,本文所述的技术能够提供固定速率压缩(固定比特率),其中可将数据元素阵列诸如图像数据块等编码(压缩)成固定大小的数据分组。

自然地,因为本文所述的技术编码到固定比特率,所以对固定大小的数据分组的压缩本质上是“有损”的(因为一旦固定大小的数据分组已满,任何剩余位就不被包括在数据分组中)。然而,对于许多应用,失去一些输出(图像)保真性是可以接受的,并且更期望能够保证给定带宽(比特率)(本文所述的技术可提供该带宽)。

(相比之下,尽管现有的无损压缩格式可减小平均带宽,但是所得的数据分组大小是可变的,使得无损压缩格式不能保证固定速率压缩,并且因此即使典型带宽较低,使用无损压缩的存储器系统通常也必须提供“最坏情况”带宽。)

此外,在本文所述的技术中,以依赖于上下文的方式对每个位平面阵列内的信息进行编码,其中基于位平面序列中的先前位平面(层)中的信息来对位平面信息进行编码。这样,可以特别有效的方式对信息进行编码。例如,与通常寻求实现更高压缩质量的其他有损压缩格式(诸如jpeg或mpeg)相比,本文所述的技术可提供更有效的压缩,例如以促进更高的吞吐量。这对于较高带宽(例如,媒体)应用可能是特别令人期望的。

具体地讲,为了对位平面信息进行编码,本文所述的技术通过将位平面阵列细分成相应区段(例如,象限)来对递归地出现在每个位平面中的系数的位置进行编码。该位置指示哪个区段(象限)在该位平面中具有新的“活动”频域系数(即,其在位平面序列中的第一非零位值出现在该位平面中的频域系数),并且然后针对在该位平面中包括新活动频域系数的任何区段,以及对于在位平面序列中的前一个(较高)位平面的编码期间被指示为(新)活动的任何区段或多个子区段,将那些区段细分成另外的子区段,并且指示这些子区段中的哪个(哪些)子区段在该位平面中包括任何新活动系数,等等,根据需要,下降到所考虑的位平面内的各个频域系数的位置(即,位平面阵列中的各个系数的位置)。

另外,一个实施方案中的每个连续位平面的编码对新活动区段相对于位平面序列中的前一个(较高)位平面(层级)的位置进行编码(指示),使得例如,如果区段先前已被指示为在较高位平面中包括新活动系数,对于下一位平面向下,活动的“子区段”指示指示剩余的(例如,三个,就象限而言)“子区段”中的哪一个(如果有的话)“新”包括活动系数(即,用于频域系数的位平面序列中的第一个非零位值)。

因此,当对给定位平面进行编码时,指示该位平面中的任何“新活动”区段,即该位平面中在位平面序列中首次出现该区段内包括的频域系数中的至少一个的非零位值的那些区段。然而,一旦以这种方式使区段活动(“激活”),则在一个实施方案中,其在位平面序列中的下一个(较低)位平面(以及位平面序列中的所有后续位平面)的编码期间保持“活动”。任何新活动子区段的位置,以及最终任何新活动系数在每个当前活动区段(即,在当前位平面中新活动的任何区段,以及在位平面序列中的先前位平面中新活动的任何区段)可以在特定位平面的编码期间被编码,在使用可变长度编码方案的一个实施方案中,例如,如稍后所述。

因此,每个位平面的编码在上下文上依赖于位平面序列中的先前位平面(层)(并且指示相对于先前位平面的变化)。

只要在数据分组中仍然存在可用空间,则本文所述的技术在一个实施方案中然后将另外的数据添加到数据分组,例如该数据指示被编码的位平面阵列中新活动系数的符号值和/或所谓的位平面阵列的“细化位值”。(“细化位值”表示所考虑的位平面中对于第一非零位值出现在位平面序列中的先前位平面中的任何系数的位值,即对于那些系数的第一非零位位置之后的较不有效位位置的位值。因此,给定位平面阵列的细化位值是该位平面阵列中先前在位平面序列中的较高位平面中“激活”的系数的位值)。在用于对位平面阵列进行编码的数据分组中,这些符号和细化位值在一个实施方案中被原始编码(包括作为其实际值)。

以这种方式,可以生成指示位平面中(以及位平面中的每个位平面中)的位位置(以及在一个实施方案中的符号和细化位值)的代码,至少直到达到固定数据分组大小。

申请人相信,本文所述的技术可提供特别有效的固定速率压缩方案。例如,通常,特别是在数据元素阵列表示图像数据的情况下,频域系数的位平面表示将包含多个前导“零”。通过根据本文所述技术的方法对位平面阵列进行编码,其中对于被编码的每个位平面(层),任何新活动区段被发信号通知,并且其相对于先前编码的一个或多个位平面(一个或多个层)被改变,然后被发信号通知,本文所述的技术能够以更高的实施效率压缩该信息(例如,通过与相对密集的算术或运行长度编码方案形成对比,其中位平面将必须以特定顺序被扫描)。

数据元素阵列表示值的空间分布。也就是说,数据元素阵列表示分布在空域中的数据值集合。因此,每个数据元素可表示空间分布内某个位置处的数据值。因此,在实施方案中,数据元素阵列可(各自)对应于数据位置阵列。在实施方案中,数据元素或位置的阵列可对应于期望(例如,图像)输出的全部或部分,诸如静止图像或视频帧(例如,用于显示)。也就是说,实施方案中的数据元素阵列包括图像数据阵列,即可用于生成图像以进行显示的数据。因此,在实施方案中,数据阵列可对应于要编码的单个静止图像。在其他实施方案中,数据阵列可对应于要编码的视频帧流的视频帧。

虽然实施方案涉及包括图像和/或视频数据的数据阵列,但如果需要,数据阵列布置的其他示例将是可能的,并且一般来讲,数据元素阵列可包括可根据本文所述的技术适当地或期望地进行编码的任何数据阵列。

实际上,在本文所述的任何实施方案中,数据元素阵列可采用任何期望和合适的形式。

例如,一般来讲,在数据元素或位置与期望输出之间可存在任何期望且合适的对应关系。例如,阵列的数据元素或位置可各自对应于期望输出的一个或多个像素。数据元素阵列在数据元素或位置方面可以是任何期望和合适的尺寸或形状,但在一个实施方案中为矩形(包括正方形)。数据元素还可具有任何期望和合适的格式,例如表示图像数据值(例如,颜色值)的格式。

在本文所述的任何实施方案中,可以任何期望和合适的方式提供数据元素阵列。实施方案可包括生成阵列的数据元素(的至少一些或全部)。实施方案还可包括或替代地包括例如从存储器读取阵列的数据元素(的至少一些或全部)。

阵列的数据元素可以任何期望和合适的方式生成。在实施方案中,阵列的数据元素可由相机诸如摄像机生成。在其他实施方案中,生成阵列的数据元素可包括渲染过程。渲染过程可包括导出由阵列的数据元素表示的数据值(例如,通过对基元进行栅格化以生成图形片段和/或通过渲染图形片段)。可使用图形处理器(图形处理流水线)以便生成阵列的数据元素。图形处理流水线可包含图形流水线和处理器可包含的任何合适和期望的处理级,诸如顶点着色器、栅格化级(栅格化器)、渲染级(渲染器)等,以便生成阵列的数据元素。

通常,数据阵列的数据元素可例如在逐块基础上编码为数据元素的“块”。例如,数据元素阵列可以被划分成要逐块地编码的多个源块(例如,使用数据阵列中的其他块,或者使用数据阵列序列中的相邻数据阵列中的块)。因此,本文对数据阵列或数据阵列的数据元素的处理或编码的任何引用应被认为包括并且通常涉及数据元素的此类块的处理或编码。“块”通常可包括n×n的数据元素阵列。

因此,在一个实施方案中,当对(总体)数据元素阵列进行编码时,例如表示整个帧(图像),将(总体)数据元素阵列分成多个块,然后根据本文所述技术的编码方案对每个块进行编码,以提供相应的数据分组集合,每个数据分组具有固定的大小。即,在一个实施方案中,较大数据元素阵列内的数据元素的每个块被编码(压缩)成固定大小的数据分组。因此,在一个实施方案中,正在编码为固定大小的数据分组的数据阵列包括来自较大的总体数据阵列的数据元素块(并且在一个实施方案中,对于构成总体数据阵列的多个块中的每一个,这是重复的)。然后可将每个块的数据分组以特定顺序适当地组合成表示总体数据元素阵列的数据的编码数据流。

因此,本文所述的技术在一个实施方案中是基于块的方案,其中一个实施方案中的每个块被独立地编码,使得块然后可以被独立地解码。这可有利于随机访问已使用本文所述的技术编码的帧内的块。例如,通常将知道每个数据分组(块)存在多少字节,因此可以容易地识别各个块在存储器内的位置,使得它们容易加载和随机访问。

数据元素可包括例如与参考帧或块相比的差值。然而,更常见的是,编码方案用于对原始数据进行编码,并且因此数据元素可表示(原始)像素值。

基本上,本文所述的技术采用适当的数据元素阵列(诸如n×n块),该数据元素阵列在其原始形式中将具有给定大小,并且在期望大小的数据分组中对该阵列(块)进行编码,例如以满足所需的压缩率。

因此,本文所述的技术能够将给定数据阵列压缩成具有固定大小的数据分组。例如,本文所述的技术可压缩到固定(所选择的)比特率,诸如原始尺寸的一半或三分之一。例如,其原始形式为64字节的块可被压缩到例如每个块32字节的固定速率(半速率压缩)。类似地,具有96字节的原始块(例如,对于8×8yuv420块可能是这种情况)可被压缩到48字节(半速率)或32字节(三分之一速率)。

当对数据元素阵列进行编码时,本文所述的技术对数据元素阵列执行频率变换操作以生成相应的频域系数集合。因此,在实施方案中,本文所述的技术可采用来自帧的数据元素的连续阵列(块),并且然后使它们经受到频域的适当变换。例如,在实施方案中,可使用离散余弦变换(dct)。然而,一般来讲,可根据需要使用任何合适的空域到频域变换。

可将频率变换应用于作为整体的数据元素阵列(作为二维频率变换),或者可将数据元素阵列分成多个子阵列(其可为一维(例如单行)或多维),其中每个子阵列被单独地变换。例如,阵列的每行可使用一维频率变换单独变换。另选地,阵列可被分成多个较小的(例如,2×2)子阵列,然后将这些子阵列单独地变换。然而,其他布置当然也是可能的(并且下文进一步描述了对变换的修改)。

应当理解,频率变换操作可有助于压缩(图像)数据。例如,对于给定图像,每个数据元素可能在空域中携带相同量的信息,使得移除一半的位将潜在地从原始图像丢失一半的信息。然而,在频域中,较低频率分量通常比较高频率分量更重要(携带更多信息)。因此,可以移除更多的更高频率分量,而不会从原始图像丢失如此多的信息。

然后使用位平面编码对(变换的)频域系数进行编码。也就是说,原始(变换的)频域系数值然后被分解为二进制位平面集合,然后可以使用多个位平面阵列来表示该二进制位平面集合,每个位平面阵列表示频域系数(量值)值的特定位位置,其中每个位平面阵列包括位阵列,该位阵列对应于位平面阵列表示的位位置处的频域系数中的每个频域系数的位值。

例如,对于6位数据表示,则将存在六个位平面,其中最高有效位(msb)包括在较高(顶部)位平面中,因此其包含最粗糙但最关键的信息,并且使得将位平面朝向最低有效位平面向下移动,对最终输出(图像)的有效贡献逐渐减小。例如,具有值“1”的m位数据集合上的第n位平面上的位将向最终输出(图像)贡献值2(m-n)。也就是说,给定位平面可以有效地贡献前一个(更高)位平面的值的一半。换句话讲,向下通过位平面序列工作,因此添加下一位平面提供了最终输出(例如,图像)的逐渐更好的近似值。

然后将频域系数的位平面编码表示(即,位平面阵列)按顺序从最高有效位平面工作向下放入数据分组中,直到数据分组已满(直到达到期望的固定大小)。因此,为了生成固定大小的数据分组,本文所述的技术从表示最高有效位的位平面阵列开始,并且向下朝向最低有效位平面工作,继而对位平面序列中的每个位平面进行编码,直到数据分组已满。这样,可以确保将最关键的信息放入数据分组中,并且(仅)丢弃不太有效的较低位平面信息(当达到期望的固定大小时)。

因此,应当理解,执行下文所述的编码,直到数据分组已满,此时停止编码(其中尚未编码的任何剩余位(和位平面)然后不包括在数据分组中)。

如上所述,通常,频域系数的位平面表示将包含多个前导的“零”,使得最高位平面可以是“空的”(即,位平面阵列包含“零”的阵列)。在最高位平面为空并且不包含活动频域系数(在该位平面中具有非零位值的系数)的情况下,这可在编码开始时适当地指示,例如,通过在位平面序列中的每个空位平面的数据分组的开始处包括“0”,直到达到包括频域系数的非零位值的第一个位平面(第一个“活动”位平面),例如使得数据分组将包括前导零序列。

然而,用于指示第一活动位平面的其他合适的布置当然是可能的。

一旦达到包括一个或多个非零位值的位平面序列中的第一个位平面阵列(从表示最高有效位的位平面向下工作),则可以根据本文描述的技术的特定编码方案对该(第一个)位平面阵列进行编码。然后根据本文所述技术的编码方案依次对位平面序列中的每个后续位平面阵列进行编码,直到数据分组已满(此时编码停止)。

具体地讲,为了对每个位平面的信息进行编码,本文所述的技术使用一种技术,该技术通过将每个位平面阵列细分成相应区段来对(新)出现在该位平面阵列中的系数的位置进行递归编码,该位置指示哪个(哪些)区段具有新活动频域系数(即,由该位平面表示第一非零位位置的频域系数),然后,对于在该位平面中包括新活动频域系数的任何区段,以及第一非零位值出现在位平面序列中的前一个(更高)位平面中的任何区段,将该区段细分成多个区段,并且根据需要指示哪个子区段包括任何新活动系数,依此类推,直到所考虑的位平面内的各个频域系数位置。

在一个实施方案中,例如使用递归四叉树分割数据结构将位平面阵列细分成象限。因此,在实施方案中任何细分成区段或子区段包括细分成象限或子象限。因此,本文对“区段”的任何引用在实施方案中可被理解为是指“象限”。然而,用于将位平面阵列细分成“区段”的其他布置也是可能的。

因此,每个位平面阵列通过以下方式来编码:将位平面阵列细分成相应区段,并且将该位平面中第一次在位平面序列中包含具有非零位值的一个或多个系数的任何区段指示为新活动的,然后将每个当前活动的区段递归地细分为相应的子区段,并且指示在该位平面中新活动的任何子区段,直到指示在该位平面中新活动的系数的位置。

因此,每个位平面的编码递归地进行,其中每个位平面阵列在多个不同层级上被划分和细分,直到各个系数的层级。

例如,在对给定位平面进行编码的第一(最高)层级期间,位平面被划分为第一区段(象限)集合,并且确定并指示这些区段中的任一个是否新包含针对该区段内的频域系数中的至少一个频域系数的非零位值。在下一层级处,编码然后进一步将那些区段细分为子区段,并且指示这些子区段中的哪个包括任何新活动系数,依此类推,降至各个系数的层级。这样,指示了在该位平面中新活动各个系数的位置。

一旦以这种方式对一个(例如,第一个)位平面阵列进行了编码,就以相同的方式对位平面序列中的下一位平面阵列进行编码,以此类推,直到数据分组已满。对于下一位平面,编码的第一个(最高)层级再次查找任何新活动区段。然而,在下一个层级,编码现在不仅考虑该位平面中的新活动区段,而且还考虑在前一位平面的编码期间“激活”的任何区段。对于所有当前活动区段,随后向下指示包括新活动系数的任何子区段的位置,依此类推,直到各个系数的层级。

例如,对于n×n位平面阵列,阵列在一个实施方案中首先被细分为四个n/2×n/2象限,然后指示这些象限中的哪些(如果有的话)是新活动的(与先前的一个或多个位平面相比)。然后可将当前活动的n/2×n/2象限中的任一个(因此,当前数据平面中的任何新活动象限以及在较高位平面中被指示为新活动的任何象限)进一步细分为n/4×n/4象限,并且提供关于这些象限中的哪个是新活动的指示,等等,直到指示在该位平面中新活动的系数的位置。因此,应当理解,对于4×4位平面阵列,每个位平面阵列将仅存在两级细分(将位平面阵列初始划分成四个2×2象限,然后将这些象限划分成相应的1×1系数)。另一方面,2n×2n位平面阵列通常可被细分n次。

因此,每个连续的位平面层级编码(指示)活动象限相对于位平面序列中的前一个(较高)位平面的位置,使得例如,如果象限先前已经被指示为在较高位平面中包括新活动系数,对于位平面序列中向下的下一位平面,活动象限指示指示剩余三个象限中的哪一个(如果有的话)新包括活动系数(频域系数的非零位值)。因此,每个位平面编码在上下文上依赖于上面的层(并且告知您相对于上面的层的任何改变)。

因此,应当理解,在本文所述技术的编码方案中,对于位平面序列中的每个位平面,指示新活动区段,即在较高位平面的编码期间先前未被指示为活动的那些。

一般来讲,可使用任何合适的代码来指示新活动象限在给定位平面(层)中的位置。然而,应当理解,因为代码仅需要指示新活动区段,以及当前活动区段内的任何系数的位置和值,所以代码可有利地保持相对简单。例如,本文所述技术的递归编码方案可以允许使用相对低成本(低复杂度)可变长度代码表来编码相对复杂的有效位依赖性。

具体地讲,这都具有以有效方式压缩频域系数的位平面表示中的前导“零”的效果。

以及以上述方式对给定位平面的新活动频域系数的位置进行编码,只要在数据分组中剩余足够的空间即可,在包括在数据分组中的实施方案中,在所考虑的位平面的“位置”数据之后,另外的数据在一个实施方案中还指示符号位,该符号位指示所考虑的位平面的新活动系数的符号(正或负)。在一个实施方案中,以及针对所考虑的位平面的新活动系数的符号位,数据也被包括在数据分组中,指示该位平面中的任何系数的位值,该系数的第一个非零位值出现在序列中的较高位平面中(所谓的针对所考虑的位平面的“细化位值”,表示任何频域系数的位值,该频域系数的第一非零位值出现在较高位平面中,并且使得在较高位平面的编码期间先前被“激活”,并且因此指示其位置。因此,细化位值是在给定系数的前导非零位位置之后的位位置的位值)。

这些符号和细化位值在一个实施方案中被编码为其原始形式(即,指示这些位的真值)(对于符号位,其可为指定值,例如,“1”为正值,“0”为负值,或反之亦然)。

在一个实施方案中,符号位刚好在任何新活动系数(的位置)已被编码(指示)之后被编码。即,在指示新活动系数的位置的数据之后,立即在数据分组中对新活动系数的相应符号位进行编码(指示)。

另一方面,在一个实施方案中,仅在该位平面阵列的所有新活动系数(并且在实施方案中连同其相应符号)已被编码(指示)之后,对给定位平面阵列的细化位值进行编码(指示)。例如,在指示该位平面的新活动系数的位置(并且在一个实施方案中的符号)的数据之后,可以在数据分组中将特定位平面的细化位值编码(指示)为该位平面的代码的最终区段。这意味着如果由于在位平面已被完全编码之前到达数据分组的末端而停止对位平面的编码,则用于位平面的新有效位将在细化位值之前被优先编码。

因此,在一个实施方案中,对于每个位平面(只要在数据分组中存在可用空间),编码首先指示该位平面中的任何新活动区段(的位置),然后指示该位置和在一个实施方案中,在当前在该位平面内活动的任何区段(和子区段)内的任何新活动系数的符号,然后最终添加在先前位平面中“激活”的任何系数的细化位值。

因此,在实施方案中,对每个位平面阵列的编码还包括,只要在数据分组中存在可用空间,在指示新活动系数的位置的数据之后,在数据分组中包括指示该新活动系数的符号的数据。

附加地(或另选地),在实施方案中,对每个位平面阵列的编码可以进一步包括:只要在数据分组中存在可用空间,在数据分组中,包括指示位平面序列中的先前位平面阵列中出现第一个非零位值的任何系数的原始位值的数据。指示在位平面序列中的先前位平面阵列中出现第一个非零位值的任何系数的位值的该数据在一个实施方案中在已经指示该位平面中的所有新活动系数的位置之后包括在数据分组中。

在被编码的数据分组含多个数据信道(例如,yuv或rgb数据)的情况下,每个信道在一个实施方案中被单独编码,并且编码在一个实施方案中,以便首先一个接一个地(以交错方式)对每个数据通道(颜色平面)的新活动系数的位置进行编码,然后在位平面内对每个数据信道的细化位值进行编码。这意味着,如果位平面编码由于数据分组的结束而停止,则每个颜色通道的新有效位将在细化位值之前优先被编码。

申请人还意识到,这种编码布置可能不适用于特定形式的输入数据。例如,如上所述,该编码技术可特别适用于有效地编码已经变换到频域中的图像数据,并且其中预期存在“0”的前导序列。然而,对于其他形式的输入数据,诸如随机输入数据,该技术可能不太有效。

在这种情况下,编码器可在实施方案中识别当使用根据本文所述技术描述的特定编码方案可能不太合适时的情况。并且在这种情况下,在一个实施方案中,以不同方式例如以原始格式(无需通过执行频率变换和位平面编码来对输入数据进行编码)对输入数据进行编码,并且向解码器指示已完成的内容。因此,编码器可能能够基于输入数据在多个不同的可用编码方案之间进行选择。编码器可以各种合适的方式(例如,基于合适的度量)基于输入数据来选择编码方案。例如,在实施方案中,编码器可对数据元素阵列执行频率变换操作,例如如本文所述,然后基于合适的度量(诸如变换系数的绝对值的总和)或类似的度量来选择编码方案。

也就是说,编码器可执行频率变换操作,然后分析频率变换系数以检查根据本文所述技术描述的编码方案是否合适(可能提供改进)。当变换系数的绝对值之和指示根据本文所述技术描述的编码方案是有利的时(例如,之和小于原始输入数据的绝对值之和),然后可以对变换系数进行位平面编码,然后根据本文所述技术的特定编码方案对位平面表示的数据进行递归编码,如上所述。另一方面,在检查指示根据本文所述技术描述的编码方案不(或不太合适)的情况下,输入数据可以以其原始形式编码(例如)。

本文所述技术生成具有固定大小的数据分组。因此,一旦数据分组已满,就有效地丢弃任何剩余的位。因此,对固定大小的数据分组的编码本质上是有损的。然而,该技术还可以扩展以通过提供有损编码的固定大小的数据分组来提供无损压缩,并且还(单独地)以“无损补偿”层的形式提供另一数据集合,该另一数据集合包括指示重建原始输入数据所需的任何(和全部)剩余位值的信息。

因此,无损补偿层包含补偿在编码成固定大小的数据分组时丢失的信息所需的信息。然后可将无损补偿层与固定大小的数据分组结合使用,以在没有任何损失的情况下再现原始(图像)数据。

因此,在实施方案中,当数据分组已满时,该方法还包括(编码电路)生成无损补偿层,该无损补偿层包括指示数据不是针对其的任何位(和位平面)的位值和位置的信息包括在固定大小的数据分组中,使得无损补偿层与固定大小的数据分组一起包含再现原始输入数据而不丢失所需的所有信息。

因此,无损补偿层通常包括与未包括在固定大小数据分组中的任何(和全部)位有关的信息,并且因此需要哪些信息以便能够完全再现原始输入数据。例如,无损补偿层可包括未编码成固定大小数据分组的任何位(所谓的“补偿位”)的原始位值,以及指示这些位的位置的信息。例如,补偿位的位值可以一定顺序(从不包括在固定大小的数据分组中的第一个位值开始)打包到无损补偿层中,并且/或者无损补偿层可以明确地包括补偿位的位置信息(例如,无损补偿层可将补偿位存储在阵列或其他适当排序的数据结构中)。

无损补偿层与固定大小的数据分组分开,使得固定大小的数据分组可与无损补偿层分开且独立地提供。因此,在期望保证固定比特率的情况下,并且在丢失一些原始信息是可接受的情况下,可以提供固定大小的数据分组(而不提供无损补偿层)。然而,在一些情况下,可能期望还(单独地)提供无损补偿层,以允许原始数据的完全无损再现。

这在例如视频帧正被编码,并且已被错误编码的一些帧将需要用作参考帧(在这种情况下,它们将需要由编码器以无损方式重建)的情况下可能是期望的。

因此,对于参考帧,编码器可提供额外的无损补偿层以允许无损重建那些帧。(在这种情况下,解码器将在一个实施方案中仍然简单地接收帧的有损编码版本,因为它不需要再现帧的无损版本)。

在这种情况下,为了能够在进行无损编码时完全准确地重构帧(例如,用作编码器中的参考帧),空域到频域变换可能需要是完全可逆的。

然而,由于四舍五入过程,这可能不是所有形式的频域变换的情况。例如,一个实施方案中的频率变换操作包括将数据元素阵列(或其子阵列)乘以整数矩阵,然后例如通过执行四舍五入右移来四舍五入值。然而,即使在整数乘法矩阵将区域映射到相同体积的区域的情况下,由四舍五入阶段引入的误差也可意味着矩阵通常不是可逆的。

因此,在实施方案中,至少在执行无损编码时,可使用经修改的频域变换过程,该经修改的频域变换过程具体地根据被四舍五入的值来修改四舍五入操作,以便提供可逆(逆转)的变换过程以产生原始唯一输入。具体地讲,四舍五入操作被配置为避免映射到同一变换输出的频域变换的两个(或更多个)输入(使得当逆变换时,您于是具有可逆转回对应的唯一输入的唯一输出)。

因此,在实施方案中,频率变换操作被配置为将每个数据元素变换为唯一频域系数输出,使得频率变换操作是可逆的。

例如,当识别出四舍五入可导致两个输入变换为相同的输出值时,可将不同的四舍五入值用于这些输入,以便迫使输出分开并确保每个输入被唯一地变换。

因此,在使用其中四舍五入值被选择使得变换的每个输入映射到唯一输出使得变换是完全可逆的实施方案中,而不是必须四舍五入到最接近的值(通常将是这样的情况,例如当实施有损变换时)。

可基于输入值来选择四舍五入值。例如,可基于值的“类”来选择四舍五入值,例如,其可由值的最低有效位来确定。四舍五入值可存储在例如合适的查找表中。

还据信,使用包括四舍五入操作的该无损频率变换的无损编码是新颖的并且独自具有创造性,该四舍五入操作被配置成选择四舍五入值以确保被变换的每个数据元素被唯一地映射。

因此,本文所述技术的另一个实施方案包括一种对表示值的空间分布的数据元素阵列进行编码的方法,所述方法包括:

对所述数据元素阵列执行频率变换操作以生成相应的频域系数集合,频率变换操作包括四舍五入操作,其中四舍五入操作被配置成针对被四舍五入的值选择四舍五入值,以确保被变换的每个数据元素被映射到唯一频域系数输出;以及

对频域系数集合进行编码以提供数据元素阵列的编码表示。

本文所述技术的又一个实施方案包括一种用于对表示值的空间分布的数据元素阵列进行编码的装置,该装置包括编码器,该编码器包括:

变换电路,该变换电路被配置为对数据元素阵列执行频率变换操作以生成相应的频域系数集合,频率变换操作包括四舍五入操作,其中四舍五入操作被配置成针对被四舍五入的值选择四舍五入值,以确保被变换的每个数据元素被映射到唯一频域系数输出;以及

编码电路,该编码电路用于对频域系数集合进行编码以提供数据元素阵列的编码表示。

这样,可以确保频率变换操作是可逆转的(可逆的)。因此,当使用无损压缩技术对频域系数进行编码时,然后可以使整个编码过程无损。

可使用任何合适的频率变换操作。例如,在一个实施方案中,频率变换操作可包括将数据元素阵列乘以整数矩阵,然后执行四舍五入操作。

在一个实施方案中,频域系数集合以本文所述技术的无损扩展的方式编码,如上所述,即,其中频域系数被编码为多个位平面阵列,并且然后通过从最高有效位平面向下工作直到数据分组已满对位平面阵列进行编码,将该频域系数集合编码为具有固定大小的数据分组,并且其中然后生成“无损补偿”层,例如包含未编码到固定大小数据分组中的任何位的原始值。然而,当然可使用其他合适的(无损)压缩方案。

在实施方案中,如上所述,根据应用,例如根据是否需要提供无损补偿层,可将四舍五入操作选择为自然“四舍五入至最接近”操作或“可逆”四舍五入操作。例如,这可以在比特流内发信号通知,使得解码器能够确定已经应用了哪个变换操作。

因此,本文所述技术的编码生成数据流,该数据流在一个实施方案中包括固定大小数据分组的序列(例如,每个数据分组表示数据元素阵列(或块))。由编码器生成的编码数据流可被输出到存储器以用于存储(例如,用于后续解码和/或传输),或者可被输出到外部设备(例如,用于后续解码和任选地显示)。

本文所述技术还扩展到用于解码对数据阵列进行编码(例如,根据本文所述的技术进行编码)的数据流的对应方法和装置。

本文所述技术的另一个实施方案包括一种用于解码数据流的方法,数据流包括固定大小的数据分组,该固定大小的数据分组将频域系数集合编码为位平面阵列的序列,位平面序列中的每个位平面阵列表示频域系数值的特定位位置,其中每个位平面阵列包括对应于位平面阵列表示的位位置处的频域系数中的每个频域系数的位值的位阵列,并且其中固定大小的数据分组包括:针对在固定大小的数据分组中编码的位平面序列中的每个位平面阵列,指示在位平面序列中首次包含具有非零位值的一个或多个系数的位平面阵列中的任何区段的位置的数据,以及指示位平面阵列中的任何此类新活动区段的任何递归定义的子区段的位置,和第一非零位值在位平面序列中的先前位平面阵列中出现的任何区段的任何子区段的数据,对于那些子区段,位平面序列中的第一非零位值出现在位平面阵列中,等等,直到第一非零位值出现在位平面阵列中的频域系数的位置被指示,方法包括:

针对在固定大小的数据分组中编码的位平面序列中的每个位平面阵列,从固定大小的数据分组确定在位平面阵列中首先出现非零位值的频域系数的位置;

使用所识别的位置来生成多个位平面阵列,位平面序列中的每个位平面阵列表示频域系数值的特定位位置,其中每个位平面阵列包括位阵列,位阵列对应于位平面阵列表示的位位置处的频域系数中的每个频域系数的位值;

组合所生成的位平面阵列以生成频域系数集合;以及

使用频域系数集合来获得解码输出。

本文所述技术的另一个实施方案包括一种用于解码数据流的装置,数据流包括固定大小的数据分组,固定大小的数据分组将频域系数集合编码为位平面阵列的序列,位平面序列中的每个位平面阵列表示频域系数值的特定位位置,其中每个位平面阵列包括对应于位平面阵列表示的位位置处的频域系数中的每个频域系数的位值的位阵列,并且其中固定大小的数据分组包括:针对在固定大小的数据分组中编码的位平面序列中的每个位平面阵列,指示在位平面序列中首次包含具有非零位值的一个或多个系数的位平面阵列中的任何区段的位置的数据,以及指示位平面阵列中的任何此类新活动区段的任何递归定义的子区段的位置,和第一非零位值在位平面序列中的先前位平面阵列中出现的任何区段的任何子区段的数据,对于那些子区段,位平面序列中的第一非零位值出现在位平面阵列中,等等,直到第一非零位值出现在位平面阵列中的频域系数的位置被指示,装置包括解码器,该解码器包括:

输入电路,该输入电路被配置用于从固定大小的数据分组确定在频域系数的固定大小的数据分组中编码的位平面序列中的每个位平面阵列的位置,对于该位置,在位平面阵列中首先出现非零位值;

位平面解码电路,该位平面解码电路被配置用于使用每个位平面阵列的频域系数的所识别的位置来生成多个位平面阵列,位平面序列中的每个位平面阵列表示频域系数值的特定位位置,其中每个位平面阵列包括位阵列,位阵列对应于位平面阵列表示的位位置处的频域系数中的每个频域系数的位值;以及用于组合所生成的位平面阵列以生成频域系数集合;和

输出电路,该输出电路被配置用于使用频域系数集合来获得解码输出。

因此,解码过程基本上与本文所述技术的编码方案相反,方法是首先从固定大小的数据分组中识别已经在固定大小的数据分组内编码的位平面序列中的每个位平面内的活动系数的位置(即,在达到固定数据分组大小之前)生成位平面阵列集合,然后从多个位平面阵列重建系数集合(表示初始编码的输入数据的频变系数),然后可以使用该系数集合来获得解码的输出。例如,当系数表示频率变换系数集合时,一个实施方案中的解码方法包括对频率变换系数执行反频率变换操作以(重新)构建被编码的原始数据阵列的步骤。

在一个实施方案中,编码数据流还包括指示出现在每个位平面阵列中的频域系数(新)的符号值的数据,并且还包括所考虑的位平面中的每个位平面的细化位值的数据,如上所述。因此,一个实施方案中的解码包括以及从固定大小的分组确定非零位值首次出现在给定位平面阵列中的频域系数的位置,确定这些频域系数的符号值。在一个实施方案中,解码还包括针对在固定大小的数据分组中编码的位平面序列中的每个位平面确定所考虑的位平面的细化值(即,首先出现在位平面序列中的先前位平面中的任何频域系数的位值)。

由于对固定大小数据分组的编码是有损的,因此可能存在一些系数,其中固定大小数据分组中不包括至少一些信息。

对于符号是已知的但位值未知的任何系数(因为该信息在编码期间被丢弃),在实施方案中,解码方案在位平面序列中向下的下一位平面中(其中存在可用的较低位平面)的该位置中引入“1”(这有效地添加了未知位值的“1/2”的贡献)。也就是说,在实施方案中,对于给定位平面阵列中未包括在固定大小的数据分组中但符号已知的任何位值,解码包括(当生成位平面阵列时)在位平面阵列中的该位置处包括零,并且在位平面序列中向下的下一位平面中的对应位置处包括一。

已发现这提供更好的质量再现(例如,与简单地将值默认为“0”相比)。然后可以通过例如根据预先确定的解码模式引入序列中的其他位平面的合适值,通过位平面序列中的较低位平面(其中位值通常也是未知的,因为本文所述技术的编码通过位平面序列向下工作)携带这一点。例如,解码可以将“1”引入序列中的每隔一个位平面中(例如,使得值1xxxx(其中x表示未知的位值)被解码为10101)。另选地,在将未知位值的“1”引入到下一位平面中的对应位置中之后,然后可以针对所有较低位平面引入“0”(例如,使得1xxxx被解码为10100)。又如,解码可将“1”引入n-1位平面、n-2位平面和n-4位平面(在存在的情况下)(例如,使得1xxxxxxx将被解码为10110100),并且已发现这给出良好的结果。然而,应当理解,各种其他合适的模式可用于该解码。

另一方面,对于符号值未知的任何系数,该系数的值在一个实施方案中被解码为零,即,对于位平面序列中的每个位平面,该系数的位值在一个实施方案中被设置为“0”。在这种情况下,可能更好的是将系数值设置为“0”(例如,而不是试图猜测或以某种方式确定符号值)。也就是说,在实施方案中,给定位平面中未包括在固定大小的数据分组中并且符号未知的任何位值被解码为零。因此,例如位值(量值)为1xxxx但符号值未知的系数刚好被解码为“0”。

一般来讲,解码器可操作以对数据流进行解码以便恢复被编码的原始源数据(例如,图像),并且然后根据需要使用(例如,显示)该数据。因此,一旦数据流已被解码,解码器就可被配置为显示使用解码独立片段来获得的数据或输出该数据以用于显示。

上述编码和解码装置通常可作为数据处理系统的一部分提供。例如,装置可以包括图像和/或视频处理系统的部分,该图像和/或视频处理系统的部分包括相机,例如数字相机、手机或平板电脑。

一般来讲,在任何实施方案中,本文所述的方法可通过任何期望的和合适的装置来执行。例如,在任何实施方案中,本文所述的过程可由图像或视频处理器(编解码器)执行。因此,在任何实施方案中,本文所述的数据处理装置可包括或可为视频处理器。因此,本文所述的处理(编码/解码)电路(circuit)/电路(circuitry)、输出电路/电路、标头发生电路/电路、标头读取电路/电路或输入电路/电路等可形成视频处理器的一部分。在任何实施方案中,本文所述的数据处理装置可包括片上系统(soc),或者可以是soc,或者可形成soc的一部分。

如本领域技术人员将理解的,本文所述技术的编码/解码装置可以是包括例如主机(例如,中央)处理器的整体数据处理系统的一部分。主机处理器可以例如执行需要由编码/解码装置进行的数据处理的应用程序。主机处理器可将适当的命令和数据发送到编码/解码装置,以控制该编码/解码装置来执行数据编码/解码操作并且生成和/或使用在主机处理器上执行的应用程序所需的输出。为了有利于这一点,主机处理器可执行用于编码/解码装置的驱动器。

在实施方案中,装置或系统可以包括和/或可与一个或多个存储器和/或存储器设备通信,该存储器和/或存储器设备存储本文所述的数据,和/或存储用于执行本文所述的过程的软件。设备或系统可包括显示器和/或可与显示器通信,以用于基于阵列的数据元素来显示图像。装置或系统可包括生成数据元素阵列的相机和/或可与生成数据元素阵列的相机通信。

本文提及的存储器可以是数据处理装置的或用于数据处理装置的任何期望和合适的存储器。存储器可在数据处理装置(例如,视频处理器和/或片上系统(soc))外部。存储器可以是例如主系统存储器。

本文所述的技术可用于数据处理装置可提供和/或使用的所有形式的数据阵列,诸如用于显示的图像或帧。因此,如上所述,数据元素阵列可包括图像数据和/或可对应于图像或图像数据帧。

在一个实施方案中,本文所述的技术的各种功能在提供和/或使用数据元素阵列的单个数据(例如,图像)处理平台上执行。

本文所述的技术可在任何合适的系统(诸如适当配置的计算机或基于微处理器的系统)中实现。在一个实施方案中,本文所述的技术在基于计算机和/或微处理器的系统中实现。

本文所述技术的各种功能可以任何期望且合适的方式执行。例如,本文所述技术的步骤和功能可根据需要以硬件或软件实现。因此,例如,除非另外指明,本文所述的技术的各种电路/电路、功能元件、级和装置可包括可操作以执行各种步骤或功能等的一个或多个合适的处理器、一个或多个控制器、功能单元、电路/电路、处理逻辑、微处理器布置等,诸如可被编程为以期望方式操作的适当专用硬件元件(处理电路)和/或可编程硬件元件(处理电路)。

具体地讲,可以设想,编码器可根据需要在硬件或软件中实现。因此,例如,编码器可包括合适的一个或多个处理器、一个或多个控制器、功能单元、(编码)电路/电路、处理逻辑、微处理器布置等,其可操作以执行各种编码步骤或功能等,如本文所述,例如,可被编程为以期望方式操作的适当的专用硬件元件(处理电路/电路)和/或可编程硬件元件(处理电路/电路)。

类似地,解码器可根据需要在硬件或软件中实现。因此,例如,解码器可以包括合适的一个或多个处理器、一个或多个控制器、功能单元、(解码)电路/电路、处理逻辑、微处理器布置等,其可操作以执行各种编码步骤或功能等,如本文所述,例如,可被编程为以期望方式操作的适当的专用硬件元件(处理电路/电路)和/或可编程硬件元件(处理电路/电路)。

本文所述的技术的各种步骤或功能等可在给定处理器上重复和/或并行执行。同样,如果需要,各种处理阶段可共享处理电路/电路等。

根据执行上述具体步骤或功能等所需的任何硬件,系统可以其他方式包括数据处理装置和/或系统所包括的任何一个或多个或所有通常的功能单元等。

因此,各种数据处理阶段可根据需要并以任何合适的方式实现,并且可分别执行任何期望的和合适的功能。类似地,可以任何合适和期望的方式定义和存储各种数据。

本领域的技术人员还应当理解,本文所述的技术的全部所述实施方案可视情况在一个实施方案中包括本文所述特征中的任何一者或多者或全部。

根据本文所述技术的方法可至少部分地使用软件例如计算机程序来实现。因此,本文所述技术的另外实施方案包括:计算机软件,该计算机软件特别适于在安装在数据处理器上时执行本文所述的方法;计算机程序元件,该计算机程序元件包括用于当该程序元件在数据处理器上运行时执行本文所述方法的计算机软件代码部分;和计算机程序,该计算机程序包括适于当该程序在数据处理系统上运行时执行本文所述的一个或多个方法的所有步骤的代码。该数据处理器可以是微处理器系统、可编程fpga(现场可编程门阵列)等。

本文所述的技术还扩展到包括此类软件的计算机软件载体,该软件在用于操作包括数据处理器的数据处理装置或系统时,使得装置或系统结合数据处理器以执行本文所述技术的方法的步骤。此类计算机软件载体可以是物理存储介质,诸如rom芯片、cdrom、ram、闪存存储器或磁盘,或者可以是信号,诸如通过导线的电子信号、光信号或无线电信号,诸如到卫星的信号等。

还应当理解,并非本文所述技术的方法的所有步骤都需要由计算机软件执行,因此在另外的的实施方案中,本文所述的技术包括计算机软件和安装在计算机软件载体上的用于执行本文所述方法的步骤中的至少一个步骤的此类软件。

因此,本文所述的技术可适当地体现为与计算机系统一起使用的计算机程序产品。此类具体实施可包括固定在有形非暂态介质上的一系列计算机可读指令,诸如计算机可读介质,例如磁盘、cd、dvd、rom、ram、闪存存储器或硬盘。其还可包括可经由调制解调器或其他接口设备、通过有形介质(包括但不限于光通信线路或模拟通信线路)、或者使用无线技术(包括但不限于微波、红外或其他传输技术)无形地传输到计算机系统的一系列计算机可读指令。该系列计算机可读指令体现了本文先前所述的功能的全部或部分。

本领域的技术人员将会理解,此类计算机可读指令可以多种编程语言编写,以与许多计算机架构或操作系统一起使用。此外,此类指令可使用目前或将来的任何存储器技术(包括但不限于半导体、磁性或光学技术)来存储,或者使用本文所述、目前或将来的任何通信技术(包括但不限于光学、红外或微波技术)来传输。可以设想的是,此类计算机程序产品可以作为带有附随的印刷或电子文档(例如收缩包装软件)的可移动介质分发,可以预加载计算机系统(例如系统rom或固定磁盘),或者可以通过网络(例如互联网或万维网)从服务器或电子公告板分发。

图1示意性地示出了数据处理系统200的实施方案,该数据处理系统可提供和使用已经以本文所述技术的方式编码的数据阵列,诸如图像或视频帧以用于显示。应当理解,图1仅示出了适合与本文所述的技术一起使用的系统的一个示例,并且各种其他布置是可能的。

在该实施方案中,系统2000包括片上系统(soc)2020形式的数据处理装置。系统2000还包括片外(主)存储器2160、显示设备2180和摄像机2200。

soc2020包括中央处理单元(cpu)2040、图形处理单元(gpu)2060、图像/视频处理器2080、显示控制器2100、互连器2120和存储器控制器2140。

如图1所示,cpu2040、gpu2060、图像/视频处理器2080和显示控制器2100经由互连器2120彼此通信,并且经由互连器2120和存储器控制器2140与存储器2160通信。显示控制器2100还与显示设备2180通信。摄像机2200还经由互连器2120与soc2020通信。

在实施方案中,图像/视频处理器2080从存储器2160读取图像数据,对图像数据进行编码(例如,以本文所述的技术的方式),然后输出该编码的图像数据,例如用于存储在存储器2160中或用于流传输到另一设备。编码的图像数据稍后可例如由图像/视频处理器2080检索和解码,或者由另一设备接收和解码。然后,经解码的图像数据可例如由显示控制器2100输出到显示设备2180或由另一设备输出以用于显示。

因此,在此类数据处理系统内,可能期望能够在各个点处压缩正被处理的图像数据。此外,为了能够促进更高的吞吐量,例如对于更高带宽的媒体应用,可能期望能够保证给定带宽(比特率)。

因此,本文所述的技术在实施方案中涉及一种编码方案,该编码方案能够将图像数据编码成具有固定大小的数据分组,从而保证期望的比特率。例如,图2示意性地示出了根据本文所述技术的实施方案的固定速率编码方案。具体地讲,在图2所示的示例中,输入是要编码的8×8像素块10(例如,64字节)。这可表示例如图像数据的单个块,使得像素的布置因此表示图像数据在该块内的空间分布。

为了提供一些初始压缩,将诸如离散余弦变换(dct)或类似的空间到频率变换应用于该块10(步骤101),以生成带符号的频率变换系数12的对应8×8块。然后使用基于位平面的熵编码将频率变换系数块12编码成固定大小的数据分组14(例如,32字节,用于半速率编码)(步骤102)。如下文将进一步解释的,这以这样的方式执行:图像数据被有效地压缩,同时仍然确保数据分组14的期望的固定大小。

尽管图2示出了8×8像素块10,但应当理解,本文所述的技术可应用于任何合适的数据元素阵列。例如,为了示出本文所述的技术的编码方案,现在将相对于图3a所示的系数块4×4来描述工作示例。然而,尽管选择了4×4系数块(例如,为了便于说明),但应当理解,本文所述的技术不限于数据阵列的任何特定尺寸或形式。

图3a示出了典型频域系数块(即,从图2中的步骤101获得)的示例,其包括-63至+63范围内的4×4带符号的值阵列(使得使用6位来存储绝对值)。然后,本文所述的技术可将这些系数编码为固定大小的数据分组。

为此,系数首先被表示为一系列位平面阵列,其中每个位平面阵列表示该位平面阵列表示的相应位位置处的频域系数中的每个频域系数的位值(即“1”或“0”)。也就是说,绝对值被分解为六个二进制位平面的集合,如图3b所示。

然后以从顶部位平面向下起工作的顺序对该位平面阵列集合进行编码,直到达到期望的数据分组大小。也就是说,本文所述的技术继而继续对位平面中的每个位平面进行编码,使得如果在数据分组中存在可用空间,则给定位平面在移动到下一位平面之前被完全编码,等等。然而,当数据分组已满时,停止编码,其中尚未编码的任何位(和位平面)则不被包括在数据分组中。这样,可确保数据分组不超过期望的固定大小。此外,因为编码方案从顶部位平面向下工作,这确保了在表示较低有效位的位平面之前优先对较高有效位平面进行编码,使得如果信息丢失(由于在该信息已被包括到数据分组中之前停止编码),则较高位平面中的信息仍然被编码。

通常,最高位平面可以是空的(仅包含“0”)。例如,对于两个最高位平面,这是图3b中的情况。该信息可通过简单地在数据分组中包括位平面序列中的每个此类“非活动”(空)层的“0”来有效地编码,该位平面序列通向到达包含非零值的第一个位平面(第一个“活动”位平面)。当到达第一个此类“活动”位平面时,这可例如通过包括“1”来指示。一旦以这种方式识别了位平面序列中的第一个活动位平面的位置,则可以根据本文描述的技术的特定编码方案(例如,如下所述)对从第一个活动位平面开始的位平面中的每个位平面进行编码。

因此,如图4所示,编码从发信号通知第一个活动层开始(步骤401)。例如,通过从最高位平面向下的位平面序列工作,为每个非活动层发送‘0’,然后为第一个活动层发送‘1’。例如,对于图3b所示的位平面集合,前两个位平面(‘位平面5’和‘位平面4’)为空,并且第一个活动层为‘位平面3’,其包含左上值的最高有效位(其绝对值为‘13’,因此在二进制表示中为‘001101’)。因此,可以通过在代码的开始处包括值‘001’(即,指示前两个位平面为空并且位平面序列中的第三个位平面为第一个活动位平面)来对该信息进行编码。

图4所示的编码方案然后通过依次从第一个活动位平面向下编码每个位平面(层)来继续进行,直到数据分组已满(直到达到期望的固定数据分组大小)(步骤402)。因此,对于图3b所示的示例,在发信号通知‘位平面3’是第一个活动位平面之后,编码方案然后继续对该位平面的位值进行编码,然后向下移动到下一位平面(“位平面2”),以此类推,对位平面中的每一个位平面进行编码,直到数据分组已满(或者如果此时未达到期望的固定数据分组大小,则直到所有位平面都已被编码)。

本文所述技术的特定编码方案通过将位平面重复细分为区段(例如,象限)来以递归方式对位平面内的任何新的“活动”系数的位置进行编码,并识别新包含系数的最高有效位的任何区段,依此类推,直到系数的各个位置。另外,每个位平面中的信息相对于序列中的前一位平面中的信息进行编码。申请人相信,该编码方案能够以特别有效的方式压缩数据,同时仍然保证固定的比特率。具体地讲,该编码方案能够有效地压缩在处理频域中的图像数据时经常发现的大量前导“零”。

图5示出了用于包括4×4位平面阵列(例如,具有图3b所示的类型)的特定位平面的编码方案。如图5所示,对于正在编码的每个位平面阵列,首先将位平面阵列分成四个2×2象限,然后用信号通知在该位平面中“新活动”的任何象限(步骤501)。(如果位平面序列中象限第一次包括非零位值,则该象限在位平面中是“新活动的”。)一旦象限被激活,则它然后保持活动以用于对位平面序列中的后续位平面进行编码。

因此,对于位平面阵列中的每个当前活动象限(包括在该位平面中新活动的任何象限以及在位平面序列中的先前位平面阵列的编码期间先前“激活”的任何象限)(步骤502),并且只要在数据分组中仍然存在可用空间(否则一旦达到期望的固定大小,则停止编码),就用信号通知该象限中的任何新活动系数的位置(步骤502a),以及任何此类新活动系数的相应符号位(步骤502b)。(可使用适当分配的值来指示符号位,例如,通过在符号≥0的情况下发送“0”,并且在符号为<0(或类似)的情况下发送“1”。)最后,一旦针对每个活动象限已经发送了任何新活动系数的位置和符号位,则发送表示已经在较高位平面中激活的任何系数的原始(绝对)位值的所谓“细化位”(步骤503)。

因此,对于每个位平面,只要在数据分组中存在可用空间,指示在位平面(即,其前导位(“1”)出现在由位平面表示的位位置处)中新活动的任何系数的位置的数据、其符号值、和其前导位出现在前一平面中的任何系数的原始(绝对)位值(因此出现在前导位之后的值)就被包括在数据分组中。

可在实施方案中用于发信号通知新活动象限和系数的一个或多个位置的示例性可变长度代码呈现在下表1中。该代码是上下文依赖的,使得对于包含任何新活动系数的每个象限(或子象限或单独的数据元素),可以基于已知在上面的层中包含有效位的位置的数量来发信号通知该信息。因此,可以相对简单的方式,使用相对低成本(低复杂度)可变长度代码表(如下表1所示)对相对复杂的位依赖性进行编码。同样,这通常具有更有效地压缩数据值的效果。

表1-用于对位位置进行编码的示例性代码

图6是示出如何使用表1中呈现的可变长度编码方案对图3b中所示的位平面阵列集合进行编码的工作示例。

例如,如上所述,编码从第一个活动位平面开始,该第一个活动位平面在该示例中是‘位平面3’。从左上角顺时针工作,可以看出‘位平面3’的前2×2象限(左上)包含非零系数,而其他象限全部为空。因此,第一个(左上)系数被发信号通知为“活动的”(步骤501),例如通过发送“0”,如上表1所示(因为在前一层中没有活动象限)。

然后编码方案如上所述继续进行,以将该第一个活动象限再次细分为其四个单独的数据元素(每个数据元素表示单个系数)。这里,可以看出,在第一个活动象限内,第一个(左上)系数是活动的(而其他系数是空的),因此将另外的‘0’添加到代码(步骤502a)。

该系数的符号为正,因此添加另一个‘0’以指示符号值(步骤502b)。

然而,在这一阶段不存在细化位(因为‘位平面3’是第一个活动位平面,因此不存在来自上面的层的值),因此在这一阶段处的代码是:

‘001’(发信号通知‘位平面3’是第一个活动层)

‘000’(发信号通知在该位平面内,第一个系数是活动的,并且具有正号)。

然后,编码方案移动到下一位平面(‘位平面2’),并且继续以相同方式对其进行编码。例如,对于‘位平面2’,可以看出第二象限(左下)现在是活动的,因此这被相应地发信号通知,例如‘1100’。在第一象限中不存在新系数(其已经是活动的),因此然后发送‘0’以指示这一点。然而,第二象限的第四系数是活动的,并且这可以发信号通知为‘111000’。该新系数的符号为负,因此添加‘1’作为符号值,并且最终添加用于第一系数的细化位‘1’(步骤503)。这一阶段的代码现在是:

‘001’‘000’(来自‘位平面3’的编码)

‘1100’‘0’‘111000’‘1’‘1’(来自‘位平面2’的编码)。

然后可针对最后两个位平面重复编码(或至少直到数据分组已满)。

因此,对于‘位平面1’,新块是活动的,并且‘10’被添加到代码。在第一象限(左上)中不存在新活动系数,因此发送‘0’,但是第二象限(右上)中的前两个系数现在是活动的,因此‘101’被添加到代码。然后添加这些系数的符号值(‘00’,因为这些都是正的),然后发送另外的‘0’,指示在第三象限(左下)中没有新活动系数。发送两个已活动系数的细化位值(‘00’)。

最后,对于‘位平面0’,剩余块(右下)现在是活动的,并且这通过将‘1’添加到代码来发信号通知。然后添加第一象限中的两个新活动系数的位置和符号值(‘1101’‘10’),之后是第二象限没有变化的指示(‘0’),然后是第三象限中的新系数的位置和符号值(‘10’‘0’),以及最后象限中的新系数的位置(‘11000’)。然后添加在先前位平面中激活的四个系数的细化位(‘1011’)。

因此,以这种方式,通过以依赖于上下文的方式对每个位平面的信息进行编码,其中基于来自前一层的信息对每个位平面的信息进行编码,可以有效地对相对复杂的有效位依赖性进行编码,并且使用相对简单的可变长度代码。还可以看出,表1中所示的代码偏向于首先出现在左上角的新系数,这通常是频率变换之后的情况。然而,当然可以使用其他合适的编码方案。

上述示例用于编码4×4阵列。然而,应当理解,编码方案当然也可用于其他(较大)阵列。例如,图7示出了对8×8数据元素阵列进行编码的示例。在这种情况下,对于要编码的每个位平面阵列,代码首先发信号通知4×4块(象限)是新活动的,并且对于每个4×4块,然后继续对4×4块(从左上开始顺时针工作)的系数的位置和符号进行编码(即,步骤501和502)。最后,针对4×4块中的每一者按顺序编码细化位(步骤503)。然后,编码向下移动到下一位平面,依此类推,直到数据分组已满。

还应当理解,编码方案可用于多平面编码。例如,这可能是每个数据元素与多个通道相关联的情况(例如,yuv值)。在这种情况下,如图8所示,可存在三个位平面阵列集合,每个通道一个集合。在这种情况下,三个平面的位平面阵列在一个实施方案中以交错方式编码,使得每个通道的新活动位的位置在一个实施方案中在编码每个数据通道的细化位之前一个接一个地编码。

图9是示出编码过程期间的数据流的流程图。输入是将被压缩成m位数据分组的n位平面集合(编号(n-1)、(n-2)、…、1、0)。在顶部层级处,编码过程从顶部位平面(n-1)开始向下工作,并且依次对每个位平面进行编码,直到数据分组已满。每个位平面的编码通过以与上述相同的方式将位平面细分成多个象限并指示任何新活动系数以及它们的符号位和先前活动系数的细化位来工作。

因此,本文所述技术的编码生成数据流,该数据流在一个实施方案中包括固定大小数据分组的序列(例如,每个数据分组表示数据元素阵列(或块))。由编码器生成的编码数据流可被输出到存储器以用于存储(例如,用于后续解码和/或传输),或者可被输出到外部设备(例如,用于后续解码和任选地显示)。

例如,编码数据流随后可基本上通过上述编码方案的反向过程进行解码。例如,图10示意性地示出了根据本文所述技术的实施方案的解码过程,其中固定大小的数据分组24(例如,32字节)被熵解码(步骤201),其中插入四舍五入,以(重新)构建8×8带符号的频域系数块22,然后将反向频率应用于该8×8带符号的频域系数块(步骤202),以便重建8×8像素块20(即,编码成固定大小数据分组的原始输入数据)。图10基本上示出了图2所示的编码方案的反向过程。因此,尽管图10示出了以8×8像素块的形式生成解码输出的示例,但应当理解,解码方案可根据需要应用于任何其他适当编码的数据流。

因此,解码过程开始于读取固定大小的数据分组以识别每个位平面中新活动系数的位置和符号,然后将位平面组合在一起以生成系数集合,然后可以将该系数集合变换回空域中以获得原始输入。当然,因为编码方案是有损的(并且在达到期望的固定大小时停止),所以并非每个位平面的所有信息都将在固定大小的数据分组中存在。

例如,图11示出了根据图10中针对4×4块呈现的方案的解码过程的示例。具体地讲,图11示出了已经从例如如上所述的固定大小的数据分组解码的六个位平面的集合1100。然而,对于‘位平面1’和‘位平面0’,存在未在固定大小的数据分组中编码的一些信息。这些系数由‘x’指示。

为了重建系数集合1102,而不是简单地将未知值(‘x’)设置为零,至少在符号值已知的情况下,将‘1’插入下面的层中。因此,对于编码为‘11xx’的左上系数,这被赋值‘13’(即‘1100’+‘0001’)。类似地,系数‘1xx’被赋值为绝对值‘5’(‘101’)。系数‘1x’被赋值为值‘2’(‘10’),因为不存在下层。这具有引入“1/2”值的效果,并且已发现提供更准确的再现(例如,与将未知值设置为“0”或“1”相比)。

上述示例整体涉及有损压缩,其中为了保证固定比特率,当达到期望的固定尺寸时停止编码,使得一些原始信息丢失(并且原始数据例如图像不能完全(无损地)再现)。有损帧缓冲区压缩对于视频和图像处理非常重要,以为高分辨率图片缓冲区提供保证的减小的存储器带宽。然而,存在一些可能需要无损扩展到有损编码图像的情况。例如,考虑视频解码器中重建的视频帧的情况,如图12所示,其中将来自图像信号处理器(isp)1200(例如相机)的信息提供给视频处理器(vpu)1202,并最终提供给显示处理器(dpu)1204。vpu1202和dpu1204通常可受益于该帧的有损和固定带宽格式。然而,视频解码器可能需要使用帧作为用于未来解码的参考画面。在这种情况下,需要无损(但压缩)版本的帧。

因此,根据本文所述技术的实施方案,可以使用附加的“无损补偿”层,其允许将有损编码解析成无损编码。例如,无损补偿层提供不拟合到固定大小的有损输出分组中的位平面编码值,以确保熵编码是无损的。因此,无损补偿层可以与固定大小的数据分组一起生成,并且无损补偿层和固定大小的数据分组一起包含再现原始输入数据而不丢失所需的所有信息。因此,在有损编码是可接受的(和期望的)情况下,可(单独地)提供固定大小的数据分组。然而,在需要无损编码的情况下,可以与无损补偿层一起提供固定大小的数据分组。

然而,为了使整个编码无损,还要求频率变换操作无损。可从一系列“提升”阶段中构建无损耗变换,这些阶段乘以在对角线上具有单位的三角形2×2矩阵。然而,该迭代方法可与相对高的延迟相关联,并且在用于有损编码时将引入多个阶段的四舍五入误差。希望具有可有效地用于有损和无损编码的变换。

有损变换通常被实现为整数矩阵乘法,之后是四舍五入的右移,例如如图13所示。例如,可将四点dct近似为以下矩阵,然后是5的四舍五入的右移:

即使矩阵c/32具有决定因素1并且因此将区域映射到相同体积的区域,由于由四舍五入阶段引入的误差,其也是不可逆的。

因此,在实施方案中,可使用偏置四舍五入方案来确保变换是无损的。例如,不是四舍五入至最接近,而是四舍五入操作可四舍五入至可能并不总是最接近但生成可逆映射的值,使得变换的每个输入映射至唯一输出。该无损变换的示例在图14中示出。

四舍五入基于移位操作丢弃的位的值。例如,在整数矩阵乘法之后,msb值可四舍五入到最近值。然而,对于lsb值,可使用偏置的四舍五入表来确保存在一一对应。由于lsb位通常比msb位更早可用,因此可例如就硬件时序而言有效地实现该方法。

例如,给定具有决定因素±1的变换t(x)=(c.x)/n(使得变换保留体积),其中c为k×k整数矩阵,x为k个整数的向量,并且n为整数除数(通常为2的幂),期望找到近似于变换t(x)的函数f(x)以给出整数值输出(即,通过执行合适的四舍五入操作),并且该函数也是完全可逆的。

这可如下完成:

1)定义c’=cmodn。c'因此具有有限的范围,例如包含r个元素:c’(u1),…,c’(ur);

2)将t的倒数写为d/m,其中d为整数矩阵,并且m为整数;

3)找到最小四舍五入向量r1,…,rr,使得:

a.对于每个i值,c(ui)+ri为n的倍数;以及

b.d(vi)modm对于每个i值是不同的,其中vi=(ci+ri)/n。

4)然后,为了实现前向函数f(x),可在给定输入x的情况下执行以下步骤:

a.计算整数矩阵倍数c.x;

b.设置i,使得c.xmodn=c’(ui);(如果n为2的幂,则这涉及查看c.x的底部log2(n)位);以及

c.设置输出f(x)=(c.x+ri)/n。

5)若要实现相应的反函数g(y),可以在给定输入y的情况下执行以下步骤:

a.计算整数矩阵乘以d.y;

b.设置i,使得d.ymodm=d(vi)modm;(如果m为2的幂,则这涉及查看d.yd的底部log2(m)位);以及

c.设置输出g(y)=(d.y+si)/m,其中si=m.ui-d.vi,其可以预先计算。

以下代码给出了c中的示例性具体实施:

上述具体实施方式是为了举例说明和描述的目的而呈现的。其并非旨在穷举或将本文所述的技术限制为所公开的精确形式。按照上述教导内容,许多修改形式和变型形式是可能的。选择所述实施方案以便最好地解释本文所述的技术及其实际应用的原理,从而使得本领域的其他技术人员能够在各种实施方案中并且通过适合于所设想的特定用途的各种修改最好地利用本文所述的技术。本发明的范围旨在由所附权利要求限定。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1