具体实施方案
在一种实施方案中,MRC代表如图1所示利用三层(背景130、前景120和掩码140)的复合文档110。背景和前景是图象层而掩码层是二进制的(即,每个象素1位)。一旦表示为层,文档就可以压缩了。背景和前景层可以比原文低的分辨率压缩,但掩码总是以全分辨率按无损方式编码。通过成对地(图象,掩码)增加层,这种3层模型可以扩展到N层。
为了重建原文档,背景和前景层从其对应的压缩层数据重建。掩码确定重建文档的象素是由重建的背景还是由重建的前景层提供的。
这种标准对前景和背景图象层支持JPEG-1(联合图象专家组)或JBIG(联合双态成像专家组)压缩的使用。这种标准对掩码层支持组3(G3)、组4(G4)和JBIG压缩。对该标准需要的最小修改包括对JBIG2和JPEG 2000压缩的支持,其中JBIG2和JPEG 2000分别比JBIG和JPEG-1更有效。
MRC支持将文档编码成一系列的条。图2说明了对复合文档210的条形分解。将文档分成条是为了分析。在块230中对条形文档220的条进行分析和分解。每一条的背景236、前景238、掩码234数据及条参数232作为条数据242封装在MRC位流240中。MRC标准不针对由块230提供的分析或分解的细节。
关于在保持合理复杂度约束的条件下编码位流的紧密性和重建图象的质量,分解处理的一个目的是获得新的最优分解。编码位流的优化需要考虑应用到单独层数据的编码器的特征。在所说明的实施方来中,块230利用JBIG2编码掩码并利用JPEG 2000编码前景和背景层,因而当确定条应当如何分解成用于压缩的单独层时必须考虑JPEG 2000编码器的细节。在一种可选的实施方案中,块230对掩码利用JBIG,对背景和前景层利用JPEG。
最初的JPEG标准在“Digital compression and coding ofcontinuous-tone stil images:Requirements and guidel ines”(ISO/IEC 10918-1:1994)中进行了描述,有时候称为JPEG-1。关于JPEG2000基本编码***的信息可以在所采用的标准“JPEG 2000 imagecoding system-Part1:Core coding system”(ISO/IEC 15444-1:2001)中找到。
MRC语法允许为每一条传递一组参数。这些参数包括定义编码前景和背景层大小及位置的空间偏移量和大小。前景和背景层可以比条小。但是,掩码层总是全分辨率、足尺寸。
图3说明了具有编码的前景320和背景330层的条310,其中前景和背景层比条小。有两个参数表示分别用于在部分322和332填满前景和背景层的前景和背景基色,其中部分322和332处于由偏移量和大小参数指定的编码区域的外面。
一旦得到了掩码,前景和背景层就都有了与属于由掩码确定的另一层的象素对应的“洞”或“自由象素(don’t care pixel)”。因此,在掩码表示特定象素源自前景层的任何时候,在背景层的相同位置都有一个对应的“洞”。这种洞或自由象素是与重建无关的,但是对依赖其值的压缩有显著的影响。假定这些值与重建无关,那么就可以修改它们以实现对那一层更有效的压缩。
块230必须分析一条,以确定以下信息:1)编码的前景和背景层的偏移量和大小,2)前景和背景基色,3)全分辨率掩码,4)前景和背景层中用于自由象素的插值(即,JPEG 2000或JPEG-1匹配的插值),5)用于前景和背景层的JPEG 2000/JPEG-1参数,及6)用于掩码层的JBIG/JBIG2参数。
图4说明了一种包括条分析过程的MRC编码处理的实施方案。MRC编码处理是对条形复合文档的条进行操作的。步骤410确定是否还有更多的条需要处理。如果没有,则处理在步骤490结束。否则步骤420获得一条进行分析。条分析部分430从概念上讲可以再分成三部分。在步骤440中确定层的偏移量、大小和基色。步骤450执行编码匹配层的分离。在一种实施方案中,这是JPEG 2000匹配层的分离。在一种可选的实施方案中,这是JPEG-1匹配层的分离。
然后,步骤460***无关的自由象素以方便压缩。在一种实施方案中,步骤460***用于JPEG 2000压缩的无关象素,在这种情况下,在步骤470中对图象(前景和背景)层进行JPEG 2000编码,而对掩码层进行JBIG2编码。在一种可选的实施方案中,步骤460***无关象素以方便JPEG-1压缩,在这种情况下前景和背景图象层是JPEG-1编码的,而掩码层是在步骤470中JBIG编码的。处理继续进行,直到所有的条都处理完。
条分析过程第一步的目的是通过基色和层大小及偏移量的适当选择来减小图象层的编码大小。例如,如果复合文档有恒定颜色的边缘,那么通过使用与JPEG 2000或JPEG-1编码相对的偏移量和基色参数,这种信息可以更经济地传送。这第一步可以进一步再分成用界寻找和公共区域减小函数。这两个函数可以基本同时执行。
周界寻找函数试图找出沿只包括两种颜色的一条的边中最厚的边缘,从而使图象层中剩余的编码区域最小化。为此,对条的行和列执行***的分析。
图5说明了周界寻找函数。步骤510从给定的集合{顶、底、左、右}中选择一条边开始。由于所有四条边最终都要处理,因此最初可以选择任意一条边。为了示例,假定顶边是最初选定的边。
如步骤520所示,以选定的边开始对条执行扫描,向与选定边相对的一边前进。扫描继续进行,直到遇到多于两种截然不同的颜色。最开始的两种截然不同的颜色成为候选的基色对。例如,如果顶边是最初选定的,则行扫描从顶边开始执行,然后向底边方向前进,直到遇到第三种颜色。这标志着第一条边界。
按逆时针方向前进,在步骤522中选择另一条边。在一种实施方案中,如果最初选的是顶边,则下一条边是左边。在步骤530中,以新的边开始执行扫描并向与其相对的边前进。如果选了左边,则扫描按列进行,直到遇到一种不是候选基色对中成员的颜色。这标志着第二条边界。
按逆时针方向前进,在步骤532中选择第三条边。在一种实施方案中,如果最初选的是顶边,则第三条边是底边。在步骤540中,以第三条边开始执行扫描并向与其相对的边前进,直到遇到一种不是候选基色对中成员的颜色。这标志着第三条边界。
按逆时针方向前进,在步骤542中选择第四条边。在一种实施方案中,如果最初选的是顶边,则第四条边是右边。在步骤550中,以第四条边开始执行扫描并向与其相对的边前进,直到遇到一种不是候选基色对中成员的颜色。这标志着第四条边界。
根据通过扫描所获得的边界,前景和背景层的偏移量和大小可以在步骤552中确定。候选基色对的两种颜色中的一种分配给前景基色,而该对中另一成员分配给背景基色。
到目前为止所获得的信息只能表示一个候选基色对及相关的偏移量。这个解可能不是最优的。例如,不同的初始扫描边有可能导致会产生较小编码区域的另一个候选基色对及相关的偏移量。因此,步骤560确保处理重复进行,直到为每条可能的起始边都确定了候选基色对及相关的偏移量。
在条的每条边都成为起始边后,将有四个候选的基色对及相关的偏移量。因此,就象步骤560确定的那样,在所有可能的起始边都处理完以后,步骤570选择产生最小编码区域的候选基色对(及相关的偏移量)。
在这个时候,前景和背景层大小相同并有相同的偏移量,从而产生前景和背景层的公共区域。公共区域减小函数试图减小公共区域之外编码的前景或背景层的大小。
通常,公共区域是从一边到其对边按列进行扫描的。对每一列,将具有选定层基色的象素部分列成表格。将这个值与一般设为0.75的阈值TF进行比较。变量NF是文档分辨率的函数。在一种实施方案中,NF选为与0.25英寸宽度所需的列数对应。一旦存在连续的NF列序列,其中具有选定层基色的象素比例低于TF,则扫描停止,而且背景层被调整到从该列序列的起点处开始。
图6说明了一种公共区域减小函数的实施方案。在步骤610中,初始化阈值变量TF和NF。TF是象素阈值,在一种实施方案中设为0.75。NF代表多个相邻行或列的阈值,是文档分辨率的函数。在一种实施方案中,NF初始化为与大约0.25英寸对应的值。
在步骤612中,选择一层进行公共区域减小。在一种实施方案中,公共区域减小函数从背景层开始。在步骤614中,选择条的起始边。在一种实施方案中,起始边是从左边和右边中选出来的。
在步骤620中,多个列变量,NCOL,设为0。步骤630扫描一列以确定具有与选定层相关的基色的象素比例,PF。如果PF<TF(例如,不到75%的象素与背景基色相关),则在步骤640中NCOL增加,否则在步骤634中NCOL设为0。步骤642确定是否NCOL=NF,从而确定是否有至少NF个相邻的列,对这些列有PF<TF。
如果NCOL<>NF,则步骤660检查是否还有列需要处理。如果还有列需要处理,则步骤662选择下一列,利用步骤620对新列进行处理。
如果NCOL=NF,则步骤650将选定层的编码区域减少NF列。这有效地减少了编码选定层所需的公共区域的量。因此,在步骤652中,公共区域废弃部分中的掩码值设为与选定层相关的值。对于0-背景和1-前景的掩码习惯,在背景层的废弃区域中,对所有具有背景色的象素掩码值指定为0(背景),否则指定为1。然后,步骤660确定是否还有列要处理。
如果步骤660确定在公共区域中没有列要处理了,则步骤670确定是否还有其它的起始边要处理。如果没有其它的起始边要处理了,则处理在步骤690完成。否则,在步骤672中选择下一条边进行处理,对新边重复从步骤620开始的处理。
一旦图6的公共区域减小已经对一层(例如,背景)执行完了,则处理可以对另一层(例如,前景)重复。但是,前景和背景层不能都从同一侧减小。因此,如果背景层已经从公共区域的左边减小了,则前景不能从左边减小。但是,如果先前没有对背景层从右边减小,则前景可以从右边减小。因此,对一层的一边或两边的扫描可以完全跳过。所以对于选定层必须识别出已经减小成功的边,以消除对下一层同一边进行这种减小的企图。
在一种实施方案中,周界寻找和公共区域减小函数是基本上同时执行的。即使第一候选基色对产生比第二基色对大的公共区域,在公共区域减小后也有可能第一候选基色对产生较小的前景和背景层尺寸和。同时执行周界寻找和公共区域减小函数使得一个人可以在识别出一对候选颜色后立即看出是否有任何一层或两层能够进一步减小。在四个可能的候选对中,选择产生最小的背景和前景层面积总和的那个。
现在掩码值是根据分析结果分配的。在一种实施方案中,基色对中较亮的(即,较高亮度的)颜色被看作是背景基色,而较暗的颜色被看作是前景基色。然后,依赖于象素的颜色是背景基色还是前景基色,分别为掩码分配0或1。此外,如果在公共区域之外层被减小了,则可以相应地分配掩码值(见步骤652)。例如,如果前景层已经减小了,则分配废弃区域中的掩码,从而为具有前景基色的象素分配1,而为所有其它象素都分配0。因此,在这两层都处理完以后,就确定了除包括前景与背景层相交部分以外的所有象素的掩码值。其结果是除了由重叠的公共减小区域表示的部分之外,条约所有区域的前景、背景和掩码值都确定了。
图7说明了在公共区域减小之前具有公共区域712的条710。条被分解成具有减小的公共区域722的前景层720和具有减小的公共区域732的背景层730。前景减小的公共区域与减小之前的公共区域712大小相同。但是,背景减小的公共区域7 32尺寸变小了,表示对背景层公共区域的减小执行成功了。现在,掩码值分配给除前景与背景公共减小区域相交部分以外的所有区域。在所示例子中,这两层的相交部分实际上是背景公共区域732。
在一种实施方案中,调整减小的公共区域的边界以确保它方便有效的编码操作。对于JPEG-1编码器,调整减小的公共区域的边界以确保它离减小前的公共区域712的左边是8N个象素,其中N是整数(即,0、1、2、…)。因此,这两个区域的相交部分设计成离要编码区域的左边是8N的倍数个象素。在这种情况下,调整背景公共减小区域的左边以确保它离前景公共减小区域的左边是8N的倍数个象素。这种调整对JPEG 2000编码是不必要的。
参考图4,在条分析块430识别出基色和偏移量后(步骤440),执行编码匹配层的分离(步骤450),然后执行插值(步骤460)。层的分离与插值处理将首先关于JPEG-1进行讨论,然后是JPEG 2000。
图8-9说明了用于JPEG-1的编码匹配层的分离处理。在一种实施方案中,编码匹配层分离试图将相交区域分解成两个编码比相交区域本身更有效的独立层。
JPEG编码块内部的边产生高编码率。但是,如果这个边移动到块的边界,则编码率变小。因此,由连续块中DC值的跳转所引起的高微分编码DC值比由块内部的边引起的高AC系数更有效地编码。
通常,编码匹配层分离以编码扫描顺序处理相交区域内的象素块。因此,对于JPEG类型的编码器,块是以行扫描顺序处理的。在每一块中,都有三种可能的层组合。每个块都可以包括1)只属于前景层的象素;2)只属于背景层的象素;或者3)属于前景层的一些象素及属于背景层的另一些象素。
如果块的变化足够小,则依赖于其象素离先前编码的前景块的DC值近还是离先前编码的背景块的DC值近,可以将该块完全分配给前景或背景层。对于高对比度块,将象素分成两组。在一种实施方案中,较亮的颜色总是分配给背景层,而较暗的颜色分配给前景层。相应地分配掩码值。
图8-9说明了应用到相交区域或重叠的公共减小区域的编码匹配层的分离过程。步骤802初始化用于插值的前景和背景块的DC值。(插值是关于块460进行讨论的)。变量PREV_AVG_FG和PREV_AVG_BG是分别表示用于先前插值的编码前景和背景块的每个颜色平面的平均值的向量。这些向量在步骤802中初始化为合适的层基色。
在步骤810中,从相交区域选择一块象素。在步骤812中,计算值RMAX。对于RGB颜色空间中的图象,RMAX是对应于在选定块中找到的R、G和B成分的最大范围的标量。如果如步骤814所确定的,RMAX大于预定义的阈值TMAX(即RMAX>TMAX),则如步骤820-852所确定的,有些象素将分配给前景,而其它象素将分配给背景。否则,如果RMAX≤TMAX,则如图9的步骤910-942所确定的,根据块中的平均亮度值,整个块将分配给背景或前景层。
如果RMAX>TMAX,则将象素分成两组。在一种实施方案中,2均值法用于将象素分成两组,GROUP_1和GROUP_2。然后在步骤830计算每组的平均值,AVG_1和AVG_2。AVG_1和AVG_2是向量,其分量分别表示与GROUP_1和GROUP_2颜色平面相关的平均象素值。
在步骤832中比较象素组的平均亮度。在一种实施方案中,较暗的一组分配给前景,而较亮的一组分配给背景。
因此,如由步骤832所确定的,如果GROUP_1的平均亮度大于GROUP_2的平均亮度,则在步骤840中将GROUP_1分配给背景,而将GROUP_2分配给前景。给向量变量PREV_AVG_BG的分量分配的是GROUP_1中象素关联的颜色平面的平均值(即,PREV_AVG_BG=AVG_1)。类似地,给向量变量PREV_AVG_FG的分量分配的是GROUP_2中象素关联的颜色平面的平均值(即,PREV_AVG_FG=AVG2)。
可选地,如果GROUP_1的平均亮度不大于GROUP_2的平均亮度,则在步骤850中将GROUP_1分配给前景,而将GROUP_2分配给背景。给变量PREV_AVG_BG和PREV_AVG_FG分配的分别是GROUP_2和GROUP_1中象素的平均值(PREV_AVG_BG=AVG2及PREV_AVG_FG=AVG_1)。
在将象素分配给适当的层以后,步骤860确定是否还有剩余的块需要处理。如果有,则在步骤810中继续处理另一块。否则,在步骤890中处理完成。
在RMAX≤TMAX的情况下,在图8的步骤814之后在图9的步骤910中计算块平均值B_AVG。向量B_AVG的分量表示图象的每个颜色平面的平均值。在步骤920中计算块平均亮度。依赖于块平均亮度值接近于以前的背景还是以前的前景的平均亮度,将整个块分配给背景或前景。因此,如果选定块的平均亮度接近于以前背景的平均亮度,则在步骤930中将该块分配给背景,并在步骤932中将向量PREV_AVG_BG设为B_AVG。
但是,如果选定块的平均亮度接近于以前前景的平均亮度,则在步骤940中将该块分配给前景,并在步骤942中将向量PREV_AVG_FG设为B_AVG。
一旦整个块都分配给前景或背景层后,步骤860确定是否还有更多的块需要处理。如果有,则利用步骤810继续处理。如果没有,则处理在步骤890完成。
参考图4,在步骤450中发生的编码匹配层分离以后,在步骤460中对层进行插值。对层进行插值的目的是填满当利用导致高效编码的值将象素分配给另一层时在背景和前景层中产生的“洞”。对于每个图象层,都按行-列顺序对8×8大小的块进行扫描并插值以填满洞。
尽管这些洞的值与图象的重建无关(它们被屏蔽掉了),但分配给对应象素的值可能对块压缩率有显著的影响。因此,为了获得更高的压缩效率,修改这些“洞”或“自由”象素的值。这个步骤不会影响复制的质量,而且也不需要对解码算法进行修改。自由象素可选地可以称为“无关”或“可修改”象素。剩余的象素称为“有关”或“不可修改”象素。
如前面所指出的,条的每一块都可以包括1)只属于前景层的象素;2)只属于背景层的象素;或者3)属于前景层的一些象素及属于背景层的另一些象素。对于选定的图象层,这意味着选定图象层的一块可以包括1)只有有关象素,2)只有无关象素,或3)有关和无关象素的组合。
图10说明了一条的选定图象层的块是如何为插值进行选择的。在步骤1002中从集合{前景,背景}中选择一个图象层。在步骤1004中,依赖于对应的选定层,变量PREV_AVG初始化为背景或前景基色。在步骤1010中为选定层选择一块象素。在步骤1020中这些象素被归类为有关的或无关的。对于给定的图象层,掩码层固有地将象素归类为有关的或无关的。
如由步骤1030所确定的,如果选定的块包括混合的有关和无关象素,则如由步骤1050所说明的那样对块进行插值。如由步骤1040所确定的,如果选定的块完全只包括无关象素,则在步骤1060中象素值被设为预定义的值。在一种实施方案中,该预定义的值是最初依赖要处理的相关层设置为前景或背景色的PREV_AVG。反之,如果块完全只包括有关象素,则不执行插值。
在步骤1050或1040以后,在步骤1062中利用选定块中有关象素的平均值更新PREV_AVG。如果选定块最初完全只包括无关象素,则不需要更新。在更新PREV_AVG后,如果需要,则步骤1070确定选定的层是否还有其它的块要处理。如果有,则处理返回步骤1010,对新的块重复处理过程。
在一种实施方案中,步骤1050的插值给无关象素分配选定块中有关象素的平均值。这种插值过程往往比随后要讨论的插值过程快得多,但是有可能不会得到相同的压缩率。
在一种可选的实施方案中,步骤1050的插值处理可能更复杂,但往往也会产生比简单快速的平均过程更高的压缩率。为了理解这种可选的插值处理,需要对编码过程有一些了解。
在图象处理应用中块压缩算法是很流行的。一种用于压缩源图象数据的数字表示的技术包括将空间域图象数据变换成频域数据的步骤。从空间域变换到频域也称为正向变换。
正向变换类似于对源图象的谐波分析。正向变换用于将空间图象数据表示为基函数的线性组合。用于这些基函数的系数是在变换过程中确定的。
然后将基系数量化或设置阈值以消除对应基函数的影响,从而实现某种程度的压缩。然后,剩余的系数被重新排序或按照序列长度编码或者以其它方式进行处理,以方便图象数据的进一步压缩。然后,结果的压缩图象数据可用于存储、分发或用于进一步处理。
一般地,零值量化系数的个数越多,压缩率越高。因此,可以修改无关象素的值来减少非零量化系数的个数。可修改象素被修改,从而修改后的块的量化正向变换比选定块的量化正向变换有更多的零值。这种操作降低了压缩图象的“比率”,在这里“比率”是参考压缩图象的存储需求。因此,这种操作提高了图象编码器的压缩效率或比率效率。
象素修改的方式依赖于压缩算法的细节。联合图象专家组和运动图象专家组(MPEG)每个都具有处理光谱内容以实现数据压缩的改进的流行数据压缩和编码体系结构。JPEG-1压缩常用于如在传真或标准打印应用中遇到的那些静态图象。MPEG格式用于动态图象或电影。基本处理已经由JPEG公布了,而且今天被广泛使用。尽管JPEG-1利用离散余弦变换(DCT),但正向变换、量化和熵编码块的特定实现都留给了实现人员。
图11更详细地说明了一种用于压缩图象的基于块处理的实施方案。图象编码器1120处理离散化的源图象1110以产生压缩的图象数据1190。
编码器1120将源图象1110处理成多个8×8大小的源块。对每个8×8大小的源块执行正向变换。每个8×8大小的源块都是作为x和y的二维空间函数的64点离散信号。DCT是很多种可用于将信号表示成基函数的线性组合的变换中的一种。尽管DCT是为JPEG-1压缩选定的变换,但其它的线性正向变换,如傅立叶变换和离散正弦变换(DST),也可以使用。
正向DCT是将64点离散信号转换成64个正交基信号的谐波分析。每个正交的基信号都代表一个构成8×8大小源块的频谱的二维空间频率。正向DCT的输出是确定这些正交基信号中每一个的幅值的系数块。这些幅值称为DCT系数,而且值是由离散的64点输入信号确定的。
再参考图11,量化器1140根据量化表342对DCT系数进行量化。不同的量子可以与量化表1142所确定的不同空间频率一起使用。量化的c(u,v)可以如下计算:
其中“INT”是确保结果为整数的取整函数。
量化表允许不同的基函数有不同的步长。因此,量化表是一个有64个元素的表,其中每个元素用于一个空间频率。通常,用于高频基函数的步长大于用于低频基函数的步长。步长大小一般按照对应余弦基函数的视觉影响的可感知阈值选择。可感知阈值是源图象特征、显示特征、可视距离等的函数。因此,量化表的选择可能是依赖应用的。
在量化后,熵编码用于有效地表示量化的系数。熵编码器1150利用熵编码表1152产生压缩的图象数据1190。
简单地,先前0和表示当前量化系数值所需的位的个数构成一对。每对都有其自己通过变长编码分配的码字。霍夫曼、香农-费诺和算术编码是常用的变长编码的例子。给定元素出现的越多,用于对应编码的位数越少。JPEG-1编码器输出用于该对的码字,然后输出用于当前量化系数的码字(也是由变长编码器分配的)。
在处理完一块量化的DCT系数后,JPEG-1编码器写唯一的块序列结束,然后移动到下一块。在完成所有块以后,JPEG-1编码器写文件结束标志。表1152和1142可以并入压缩的图象数据以方便重建。
量化的结果是许多DCT系数都减小到0。特别地,对应于高频余弦基函数的系数往往都变成0。对量化的DCT系数排序以获得更长的0值元素串提高了熵编码器的比率效率,尤其是在要编码的任何剩余量化DCT系数都为零的时候。因此,如图12所说明的,从与低频基函数关联的量化系数到与高频基函数关联的量化系数,熵编码器以之字形方式编码量化的DCT系数块。
块1210的左上角对应于DC项(u,v=0)。在单独的编码块中DC项是微分编码的。当向右下角前进时,剩余的AC项表示高频余弦基函数。在写块结束之前,JPEG-1熵编码器只需要编码等于最高频的非零量化系数。任何其它系数都假定为零。
之字形扫描顺序往往将非零元素的个数分组到要编码的元素串的一端。当高频基系数为零时,之字形扫描顺序将零元素分组到要编码的量化系数串的一端,从而提高熵编码器的比率效率。在这种扫描顺序中,JPEG-1编码器不需要对超出最后一个非零量化系数的部分编码。假定高阶频率很可能为0,则之字形扫描顺序将提高JPEG-1编码器的压缩效率。
基本光谱处理编码过程可以修改,以允许对与源图象重建无关但可能对比率效率有显著影响的象素值的修改。
一块中的64个象素表示为包括两个小向量y和x的向量z,如
zT={yT,xT}
其中y是Ny个有关象素的集合,而x是64-Ny个无关象素的集合。用作向量的64×64 2D DCT变换矩阵表示为T,从而系数集c由c=Tz给出。
一种方法是求解z中最小化AC系数能量的向量x,同时使已知的向量y不受影响。然后由下式给出最小化的成本函数:
用于2D DCT的DC系数由下式给出:
当J(x)部分地得自x的每个分量x1并等于0时,发现每个分量都产生由下式给出的相同的最优值:
因此,关于最小化AC系数的能量,用于可修改象素的最优插值是将所有可修改象素的值都设置成不可修改象素的平均值的解。这种方法可能是一个好的起点,但它忽略了微分DC编码及块压缩算法熵编码器的细节的影响。
目标是通过在满足其它约束的情况下最大化沿反向之字形扫描路径的零串找出最小化比率的z。例如,任何可修改的zi都必须分配一个可实现范围内的象素值,而不可修改象素的zi不应当改变,给出:
zi=yi i={0,1,...,Ny-1}
0≤zi≤255 i={Ny,...,63}
考虑修改后的块的DCT系数。有些系数量化成零,而其它则量化成非零值。可以量化成零的系数的位置(即,下标)构成集合Izero,如:
系数是按反向之字形扫描顺序扫描的,以便找出没有量化成零的第一个cj。如果有可能在不破坏其它约束的情况下将系数“推”成0,则有一个满足前面约束:
zi=yi i={0,1,...,Ny-1}
0≤zi≤255 i={Ny,...,63}
及从Izero集获得的以下约束:
的解z,(即,非零量化系数可以变成还满足以下约束的非0量化的):
项ti表示DCT矩阵T的第i行。每个零量化约束都是线性不等式约束。可行解法的存在是能够利用如单形法的技术很容易求解的1阶线性编程问题。由于等式约束限制了这种修改,系数值的修改将不会影响有关象素的值。所选定块中的有关象素将与修改后的系数块逆变换中的对应象素有相同的值。修改后的系数块的逆变换是修改后的选定块。
如果解存在,则新的零量化系数的下标加到Izero集中,而z更新为该可行性解。如果cj是非零量化的,则该方法按反向之字形顺序开始进行下一个非零系数的处理。处理可以重复,直到所有非零量化的系数都测试完。
尽管最终得到的解满足所有约束,但就最小化系数的能量而言,这个解可能不是最优的。除了最大化零串的长度和个数,非零量化系数的能量应当最小化,以达到最低比率。遵循前面建立的约束:
zi=yi i={0,1,...,Ny-1}
0≤zi≤255 i={Ny,...,63}每一步的最小化能量解最小化:
关于有关象素值的平均值,dc值是微分考虑的。上述问题是以一系列线性等式和不等式约束为条件的二次成本函数。二次程序可以用于确定解。二次解算程序只需要在连续的1阶线性程序后调用。
连续的线性程序产生具有增加的零量化系数个数的解,这可能导致剩余DCT系数的能量变得比最优的平均插值块的能量高。如果能量增加太多,则即使零串已经最大化了,比率也可能增加。
为了避免这种结果,在找出可行性解后二次程序可以在每个阶段调用。在这种情况下,二次程序利用基于最新修改的块的系数能量与平均插值块的系数能量之比的停止判据。如果修改后的选定块的能量E超出了平均插值块的能量E0的预定比例TE(TE>1),则优化过程终止,以避免造成更高的比率。
图13说明了用于有混合的有关和无关象素块的预压缩优化过程。无关象素在步骤1310中初始化。在一种实施方案中,无关象素设成与选定块中有关象素的平均象素值对应的值。在步骤1312中,(在初始化后)计算选定块的能量E0。
在步骤1320中,通过对选定块使用正向变换产生一个系数块。在步骤1330中,所有零量化系数的位置都存储在数组Izero中。
按反向之字形顺序前进,在步骤1340中确定选定的非零量化系数的位置。在步骤1350中,为当前的z计算选定系数的值。
步骤1352确定选定的系数是否是零量化的。如果是,则在步骤1370中将该系数的位置附加到其它零量化系数的Izero集合中。
如果选定的系数是非零量化的,则步骤1354确定在满足先前定义的约束的条件下是否存在产生零量化系数的可行性解。在一种实施方案中,利用1阶线性程序来确定这样的可行性解。在另一种实施方案中,利用单形法来确定可行性解。如果不存在可行性解,则处理继续到步骤1380。
如果存在可行性解,则在步骤1360中利用二次程序确定用于z的最小化能量解。这个新的z具有在步骤1362中计算的相关能量E。
步骤1364确定是否
其中TE是E与E0之比的可接受阈值。如果
则在步骤1370中将该系数的位置附加到其它零量化系数的Izero集合中并利用步骤1380继续进行处理。
从步骤1354或步骤1370继续前进,在步骤1380中执行检查以确定是否还有更多系数要处理。如果没有,则对系数块的修改处理在步骤1390结束。否则,通过返回步骤1340,对下一个非零量化系数的处理继续进行。
优化处理重复步骤1340-1380,直到所有非零量化的系数都处理完或者直到结果的能量超出预定义的阈值。
在一种实施方案中,不管是否还有其它系数要处理,在第一次找不到可行性解的时候处理就停止了。这种方法最大化了最终零串的长度。由于熵编码器的操作原理,最终的串对JPEG-1编码器的编码率有最显著的影响。
光谱内容处理的方法往往1)增加零量化系数的个数,及2)优先增加与高频基函数关联的连续零量化系数的个数。给出熵编码器的特性,这使得JPEG-1编码器能够在发出块结束之前利用较少的数据表示相关图象。
回过头来参考图4,一旦执行了层的插值,则在步骤470中执行背景、前景和掩码层的编码。在一种实施方案中,前景和背景层是JPEG-1编码的(见图11),而掩码层是JBIG编码的。
JPEG 2000是基于离散小波变换(DWT),而不是JPEG-1的DCT变换。图14说明了JPEG 2000编码器的基本处理。
将源图象1410提供给JPEG 2000编码器1420。不象JPEG-1,JPEG2000不是块编码。尽管图象也可以分块,但块的大小可以统一选定为任何大小,包括整个图象大小那么大的块。如果图象分块了,则对每一块都执行处理。否则,JPEG 2000编码器应用到作为单个大块的整个图象。
就象JPEG-1那样,执行正向变换。在这种情况下,正向变换是离散小波变换1430。每一块都分解成不同的分解层次。分解层次包括多个子带,其中子带包括描述源块水平和垂直空间频率特征的系数。二次幂的二元分解(例如,1470)是典型的。JPEG 2000允许以不同分辨率进行的分解。
在一种实施方案中,正向DWT是利用一种将样本的一个空间集合分解成低通和高通样本的空间子带分解执行的。在一种实施方案中,这是利用Daubechies 9-分接头/7-分接头过滤器(不能还原,用于有损编码)实现的。在一种可选的实施方案中,使用5-分接头/3-分接头过滤器。5/3过滤器是可以还原的,而且允许有损或无损编码。
在正向DWT之后,变换后的块由量化器1440进行量化。然后,熵编码器1450对量化后的块进行编码,产生压缩的图象数据1490。在一种实施方案中,熵编码器利用算术编码。
熵编码器将量化后的块的每个子带分成矩形块。三个空间一致的矩形(分别来自每个分辨率层次的各个子带)构成选区1472。每个选区都进一步划分成用于熵编码的不重叠编码块1474。通常,当图象是“平滑的”时候,由JPEG 2000编码器实现的压缩率提高了。
回过头来参考图4,用于基于JPEG 2000编码的层分离(步骤450)在图15中说明。在步骤1510中选择选定条的一层。这一层被划分成多个决策区和关联的分析区。每个决策区的象素是所关联的分析区象素的子集(即,DijAij)。在步骤1530中选择决策区Dij和关联的分析区Aij。每个Dij还有关联的前景(Fij)和背景(Bij)平均值。分量1590说明了区域之间的关系。
在步骤1540中计算Aij的对比度。如果在分析区中几乎没有什么变化,则依赖于平均值是接近背景色还是接近前景色,将Dij中的所有象素分配给前景或背景层。例如,如果在步骤1542中对比度不超过预定义的阈值,则处理利用图16的步骤1610继续进行。
步骤1610确定Dij的平均值是接近前景色还是接近背景色。特别地,如果
则在步骤1620中Dij的所有象素都分配给背景层。背景平均值Bij设成AVG(Aij)。前景平均值Fij设成 可选地,在步骤1640中Dij的所有象素都分配给前景。所关联的前景平均值Fij设成AVG(Dij)。在步骤1650中Bij设成相邻编码块的平均值
回过头来参考步骤1542,如果对比度超过预定义的阈值,则有些象素分配给前景,而有些分配给背景。在步骤1550中利用2均值法将象素分成两组(GROUP_1,GROUP_2)。在步骤1560中为每个象素组计算平均值(AVG_1,AVG_2)。
步骤1562确定GROUP_1是否总体上比GROUP_2亮。为此要计算平均的亮度。如果只使用了单个位平面,则可以单独比较平均值。
如果LUM(AVG_1)>LUM(AVG_2),则在步骤1570中Dij中GROUP_1的象素分配给背景,而Dij中GROUP_2的象素分配给前景。在步骤1572中当前块的背景平均值设成AVG_1,而前景平均值设成AVG_2。
如果GROUP_1比GROUP_2暗,则在步骤1580中Dij中GROUP_1的象素分配给前景,而Dij中GROUP_2的象素分配给背景。前景平均值Fij设成AVG_1,而背景平均值Bij设成AVG_2。相应地更新掩码。
再次参考图4,一旦实现了层的分离(步骤450),则在步骤460执行如图17所说明的层插值。由于使用了小波变换,因此图象的平滑度往往产生更紧凑的编码。
在步骤1710中选择选定条的一层。当按光栅扫描顺序前进时,步骤1720选择下一个象素作为当前象素。如果步骤1730确定当前象素是个洞,则步骤1740使用平滑过滤器为当前象素***一个值。处理继续进行,直到选定层的所有象素都分析完(步骤1750)。
图18说明了一种用于为给定的源图象层1810***洞象素值的平滑处理的实施方案。中心在当前象素(pc1822)的P×P采样窗口1820用于对当前象素进行插值。在不同的实施方案中,P=5或P=7。过滤器1890包括多个元件Vki。在一种实施方案中,过滤器1890是高斯过滤器。过滤处理为该窗口内的主象素提供了加权的标准化平均值。象素的加权依赖于主象素是“有因的”还是“无因的”及关联的象素是洞(即,无关的)还是不是洞(有关的)。因此,加权依赖于主象素的起因和相关性。
有因象素是任何已经按光栅扫描顺序被过滤器穿过的象素。无因象素还没有被穿过(即,当图象穿过选定的图象层时它们还不是过滤窗口的中心象素)。对任何计算,无因的无关象素都不需要考虑。有关象素和有因无关象素可用于为pc***一个值。
在一种实施方案中,中心象素(pc)的值是如下计算的: 其中
图象边缘的INT(P/2)行或列中的无关象素不能利用全分辨率窗口(其中INT是取整函数)。对于这些情况,窗口被适当地截断了。
当从起点按光栅扫描顺序前进时,很清楚以上处理直到至少有一个有关象素落在过滤器窗口内才能开始。过滤器按光栅扫描顺序移动,直到这种情况在象素Y出现。一旦对象素Y执行了这种计算,前面任何按光栅扫描顺序的上述无关象素都被分配了与为象素Y计算的值相同的值。然后,如上所述处理从点Y继续向前。
在一种实施方案中,选择m1和m2使得对有关象素加的权比对有因无关象素加的权大,从而
在一种实施方案中,m1=2而m2=1,使得
对有关象素加的权是对有因无关象素加的权的两倍。这种平滑处理调节了无关象素,从而层可以通过利用小波变换的压缩处理更有效地进行压缩。
在前面的详细描述中,参考其特定的示例实施方案对本发明进行了描述。在不背离由权利要求阐述的本发明更广泛主旨和范围的前提下,可以对其进行各种修改和变化。因此,说明和附图应当认为是说明性的,而不是限制性的。