数字图像数据的压缩与解压缩方法

文档序号:1731702阅读:484来源:国知局
专利名称:数字图像数据的压缩与解压缩方法
技术领域
本发明涉及一种数据的压缩与解压缩方法,尤其涉及一种数字图像数据的压缩与解压缩方法。
背景技术
数据压缩是一个古老的课题。所谓“压缩”,通常的含义是指将给定的数据转换成另外一种占用空间较少的格式的一种方法。传输压缩后的数据可以大大减少传输所需时间,而存储压缩后的数据则大大节约存储数据的成本。在需要原来的数据时,又可以调用相应的解压缩方法将压缩后的数据还原成它的本来面目。世界上的压缩方法可以分为两类,一类叫做可逆压缩,也叫无失真、无差错编码或冗余度编码。这种压缩方法把数据看作是信息和冗余度的结合,其工作的机理是去除或减少数据中的冗余度,因而始终是一个可逆过程。比较著名的可逆压缩方法有Shanno-Fano编码、适应性Huffman编码及LZ77编码等。另一类叫做不可逆压缩,也叫有失真编码或熵压缩。这种压缩方法不但去掉或减少数据中冗余度而且还忽略一些不太重要的细节,因而拥有可观的压缩比,但不可避免的会丢失一些信息,即不能被还原成和原来的数据一模一样的数据。比如预测编码、方块截短编码、分频编码等。
到1977年为止,对于数据压缩的研究几乎都集中在统计模式压缩方法的研究。LZ77压缩方法使用前面刚读过的输入数据作为字典,以一个指向字典内数据段的指针取代当前输入的数据以达到数据压缩的目的。
LZ77压缩方法可以获得较好的压缩比,而且适用于各种类型的文件(文本,二进制文件)。但由于它在压缩时要到字典中去查找匹配的字符串,如果字典容量稍大的话,压缩会很费时间,造成效率的降低。解压缩的速度则不太受增大字典容量的影响,因为它做的只是字符串的复制工作。从总体上来说,LZ77是一种不平衡的压缩方法,效率不高,所以多用硬件实现方案,成本较高。另外的缺陷是对于字典中查不到的字符串,要付出额外的代价来标记其不可压缩性。
数字图像是一个以行和列组成的二维的数据数组,它有一些不同于其它普通类型数据的特点。针对这些特点产生了许多数字图像的无失真压缩方法。比如将当前行与前一行进行比较,只压缩两行之间不同的数据的方法,我们称之为DeltaRow压缩方法。DeltaRow压缩方法对数字图像(一个以行和列组成的二维的数据数组)的压缩简单快速有效,但用于压缩复杂图像(特别是高清晰度图像)时,压缩比不够理想。

发明内容
本发明为解决上述问题而提供一种二维图像的压缩与解压缩方法,其不但可以获得LZ77压缩算法的高压缩比和解压缩算法的高速度,而且可以获得DeltaRow压缩算法的快速有效,大大提高了压缩的速度。
本发明涉及数字图像数据的压缩方法,首先,选择参考行;然后,逐一比较该参考行与当前行未编码部分相应位置的数据,以在未编码部分查找出第一个差异数据段;从该当前差异数据段的起始位置前的数据开始查找与从该当前差异数据段起始位置开始向后的数据的最大匹配数据段;根据匹配情况,确定待压缩数据类型;根据待压缩数据类型,确定待压缩数据段类型及其相关参数;最后,根据待压缩数据段类型和相关参数,进行相应的编码处理。
本发明涉及数字图像数据的解压缩方法,首先,确定当前行的参考行;然后,将写入点定位在当前行的行首;读入一个编码;取得该编码的数据类型及相关参数;最后,根据该数据类型及相关参数译码数据。
本发明针对LZ77和DeltaRow压缩算法的不足之处作了改进,其主要优点为1、由于参考行的选择不拘限于上一行,而是选择当前行以上一定范围内与当前行最相近的那一行作为参考行,从而使当前行与参考行之间的差别达到最小。这样,当前行中必须被编码的数据段无论长度和数量都会减少。
2、因为对于一个高清晰度图像来说,前几行与当前行匹配长字符串的几率不高,而且增大字典的容量会使压缩速度大幅度下降,不利于用软件方法实现压缩,因此本发明只在当前行搜索匹配的字符串,从而不但可以获得LZ77压缩算法的高压缩比和解压缩算法的高速度,而且可以获得DeltaRow压缩算法的快速有效,大大提高了压缩的速度,使得软件压缩和解压缩可以用于实时应用(如激光打印机)。
3、对于在当前行第一次出现的字符串,即LZ77会认为不可压缩的字符串,尝试了用一种缩位编码将N位的数据编码为(log2N+1)位的数据,这样可以做到原来需要多占用资源表示的不可压缩的字符串现在不需多占用甚至少占用即可存储,这项技术对于不可压缩字符串长度是一个的情况特别有效。


图1为本发明的数字图像数据的压缩方法流程图;图2为本发明的数字图像数据的解压缩方法流程图;图3为本发明具体实施例的某一高清晰度图像的数据片段以及从其中选择参考行的示意图;图4为本发明中在当前行中查找第一个差异数据段的具体实施例示意图;图5a为本发明中匹配数据段的长度大于或等于该数据段的长度的具体实施例示意图;图5b为本发明中匹配数据段的长度小于该数据段的长度但不是零时的具体实施例示意图;图6a为本发明中编码处理的第一类型数据段压缩格式实施例示意图;图6b为本发明中编码处理的第二类型数据段压缩格式实施例示意图;图6c为本发明中编码处理的第三类型数据段压缩格式实施例示意图;图6d为本发明中编码处理的第四类型数据段压缩格式实施例示意图;及图7为本发明中具体编码方案所使用的某一高清晰度图像的数据片段示意图。
其中附图标记步骤101选择参考行步骤102逐一比较该参考行与当前行未编码部分相应位置的数据,以在未编码部分查找出第一个差异数据段步骤103从该当前差异数据段的起始位置前的数据开始查找与从该当前差异数据段起始位置开始向后的数据的最大匹配数据段步骤104根据匹配情况,确定待压缩数据类型步骤105根据待压缩数据类型,确定待压缩数据段类型及其相关参数步骤106根据待压缩数据段类型和相关参数,进行相应的编码处理步骤201确定当前行的参考行以及当前行的数据步骤202将写入点定位在当前行的行首步骤203读入一个编码步骤204取得该编码的数据类型及相关参数步骤205根据该数据类型及相关参数译码数据具体实施方式
为使对本发明的目的、构造特征及其功能有进一步的了解,配合附图详细说明如下本发明公开一种数字图像数据的可逆压缩方法,可用于对二维数字图像进行无失真的压缩和解压缩。请首先参考图1,为本发明的数字图像数据的压缩方法流程图。首先需要选择参考行(步骤101);然后,逐一比较该参考行与当前行未编码部分相应位置的数据,以在未编码部分查找出第一个差异数据段(步骡102);从该当前差异数据段的起始位置前的数据开始查找与从该当前差异数据段起始位置开始向后的数据的最大匹配数据段(步骤103);根据匹配情况,确定待压缩数据类型(步骤104);根据待压缩数据类型,确定待压缩数据段类型及其相关参数(步骤105);最后,根据待压缩数据段类型和相关参数,进行相应的编码处理(步骤106)。
当第一个差异数据段处理完毕以后,如果尚未到达当前行的行尾,则应以当前编码结束位置的下一个位置起始继续查找当前行和参考行之间的下一个差异数据段,并重新执行所述匹配及编码步骤,直至将整个当前行的数据处理完毕;然后,再以下一行作为当前行,重新从所述选择参考行步骤开始执行,直至将整幅图像处理完毕。
上述选择参考行的步骤,如果当所压缩的行是图像的第一行时,系统提供一个全零行作为参考行。
选择参考行可以有多种方法,例如可以在当前行和当前行以上的若干行的固定位置进行数据抽样;然后,将当前行的抽样数据与其它行的抽样数据进行比较;最后,将与当前行的抽样数据匹配度最高的行作为参考行。
还可以设置一个固定长度的数据窗(数据窗的长度应该稍长,如32个字节);然后,将该数据窗沿着当前行和当前行以上的若干行滑动;最后,如果当前行落在该数据窗内的数据与另外一行相应位置的数据相等,则选择该行为当前行。
如果有一行以上的行满足选择参考行的条件,则选择距离当前行最近的行作为参考行。
上述确定第一个差异数据段的步骤,是首先将当前行未编码部分与参考行的对应位置的数据逐一进行比较;然后将第一个差异数据的位置记录为差异数据段的起始位置;继续进行比较,直到当前行与参考行对应位置出现相同数据或遇到行尾;最后将该位置记录为差异数据段的结束位置。
请参阅图2,为本发明的数字图像数据的解压缩方法流程图。首先,确定当前行的参考行以及当前行的数据,(对于下面公开的方案一的解压缩处理,需要先将参考行的内容复制到当前行;对于方案二的解压缩处理,则是直接对当前行的数据进行改写)(步骤201);然后,将写入点定位在当前行的行首(步骤202);接着,读入一个编码(步骤203);取得该编码的数据类型及相关参数(步骤204);根据该数据类型及相关参数译码数据(步骤205)。
在没有到达编码数据的行尾时,则继续读入下一个编码并确定新的当前写入点;然后,根据该编码的数据类型和相关参数,重新执行所述译码数据步骤,直至将该行编码全部处理完毕;接着,以下一行为当前行,重新从确定当前行的参考行开始执行,直至将整幅图像还原。
下面以一具体的图像数据片断来说明本发明。请参阅图3,为本发明具体实施例的某一高清晰度图像的数据片段以及从其中选择参考行的示意图。该高清晰度图像的数据片段,其宽度为128象素,高度为4行。如果我们选择抽样4个数据要求其中3个数据相等的话,图3中的第4行就应该选择第1行作为参考行。
请参见图4,为本发明中在当前行中查找第一个差异数据段的具体实施例示意图。假设当前行为第3行,参考行为第2行时,将当前行与参考行的对应位置的数据逐一进行比较,如果发现对应位置的数据不同,则将当前行这个数据的位置记录为差异数据段的起始位置,然后继续进行比较过程,直到当前行与参考行对应位置出现相同的数据或遇到行尾时,记录当前行的这个数据的位置为刚刚被记录的差异数据段的结束位置。也就是说通过这一步找出第一个当前行与参考行之间不同的差异数据段。如图4所示,当前行与参考行之间第一个差异数据段为从第8个数据0x3E开始到第九个数据0x03结束的两个字节。
在对该差异数据段进行匹配时,是在当前行该差异数据段前面的数据中查找和该差异数据段从第一个数据起匹配长度最长的数据串。需要注意的是,这里在查找最大长度的匹配数据串时,以差异数据段的第一个数据开始,但并不受限于该差异数据段的结束位置,而是受限于当前行的结束位置,即在当前行内能匹配多长就匹配多长。如果匹配长度超出该差异数据段的结束位置,则超出的这部分数据可能与参考行对应位置的数据相同也可能与参考行对应位置的数据不同。这样做的好处在于当当前行与参考行之间的下一个差异数据段恰好包括在第一个差异数据段的最大长度匹配数据串中时,第二个差异数据段便不需要再被编码了。
这种情况可以用图5a来示意。在查找到当前行和参考行之间第一个差异数据段后,在其前面的7个数据中查找最大匹配。这里最大匹配从第5个数据开始,长度为7。虽然两行之间尚有两个数据段不同,但是都不需要再被编码了。
最大匹配长度分为以下几种情况如果最大匹配数据段长度为零,即该差异数据段第一个数据是在当前行中第一次出现,则将该第一个数据跳过,该差异数据段的起始位置移至第二个数据的位置,以此形成的新的当前差异数据段重新执行所述匹配步骤。如果匹配的结果始终为零,且遇到该差异数据段的结束位置,则分析前面跳过的数据,对其尝试进行缩位编码,如果不能进行缩位编码,则确定其为第一类型数据(以下称文本数据),如果可以进行缩位编码,则确定其为第二类型数据(以下称可缩位数据)。
如果最大匹配数据段的长度不为零且大于或等于该差异数据段的长度(如图5a所示)。这时,先检查是否存在有跳过而未被编码的数据,若存在,则对其尝试进行缩位编码,以确定是属于文本数据还是可缩位数据;然后把该差异数据段在前面的数据中的匹配位置、匹配长度等参数信息编码为第三类型数据(以下称复制当前行数据),以当前编码结束的位置的下一个位置起始继续查找当前行和参考行之间的下一个差异数据段。在图5a中数据段长度为2,最大匹配长度为7。
如果最大匹配数据段的长度不为零且小于该数据段的长度,如图5b所示,这时,先检查是否存在跳过而未被编码的数据,若存在,则对其尝试进行缩位编码,以确定是属于文本数据还是可缩位数据;然后将该差异数据段中的匹配部分在前面数据中的匹配位置、匹配长度等信息编码为复制当前行数据类型;然后,差异数据段的起始位置移至匹配部分的下一个数据的位置,以此新差异数据段重新执行所述匹配步骤。
如图5b中所示,当差异数据段的起始位置移至0xE0后,由于0xE0没有可匹配数据,这时跳过这个数据,但已经到该数据段的结尾,所以将刚刚跳过的数据0xE0尝试进行缩位编码,然后当前行数据位置移至下一个数据0x3C,重新从查找下一个差异数据段开始执行。
本发明中缩位编码的原理基于下列事实在二维数字图像数据中存在数据分布的不均匀性。在实践中发现,某些固定的数据组合出现的比例比其它的组合高很多。这些固定的数据组合符合以下规律在一个有N位宽的数据中,若将连续出现的1记为一段,连续出现的0也记为一段(如11111000中有两段),在实践中发现,在一个有N位宽的数据中,连续出现1的段数与连续出现0的段数的和不大于2的数据出现的频率比其它情况高很多,即很少有很多1和0交替出现的情况(如11010110)。对于一个有N位宽的数据(N是2的整数次幂),这种数据组合共有2×N个。我们可以把所有2N个N位数据中的这2×N个数据编码成位宽为Log2(2×N)=Log2N+1的2×N个标志码。这样,我们就可以在很大概率范围内将LZ77认为不可压缩的数据在保持长度不变甚至减少的情况下加入到压缩后的数据中,大大弥补了LZ77在处理不可压缩数据方面的缺陷,提高了压缩比。需要说明的是,以上方法包括将一个长类型的数据拆分成几个短类型数据的情况。例如将一个16位宽的数据拆分成2个8位的数据进行编码或4个4位的数据进行编码以满足概率分布不同的场合的要求。
举例来说(为简短起见,这里举由4个二进制位构成的数据),在二维的数字图像数据中,试验发现90%以上的数据分布在{0000,0001,0011,0111,1111,1110,1100,1000}的范围内。我们可以将这八个数据分别用八个代码来表示,如用000表示0000,用001表示0001,用010表示0011,用011表示0111,用100表示1111,用101表示1110,用110表示1100,用111表示1000,则对一个字节来说,可以省出两位来记录这是一个缩位编码。这样,原来需要多增加一个字节来表示的数据,现在可以做到不增加。而一个字节编码的成功率取决于其高四位和低四位数据都落在可编码范围内的几率(0.9×0.9=81%)。
例如在上述匹配步骤中跳过的数0xE0,可以被这样编码0xE0写成二进制形式为1110 0000,如果按照上面的编码方式,1110用101表示,0000用000来表示,则缩位结果为101 000。若以两位数字00来表示缩位格式编码的话,0xE0就可以被编码为0010 1000,即0x28。
根据编码方案的需要,还可以将所述第一差异数据段前面的未编码数据,也就是和参考行对应位置的数据相同的当前行数据,确定为第四类型数据(以下称复制参考行数据)。
连续的同类型待压缩数据即可组成一该类型的待压缩数据段。
具体的编码方案根据参数的选择可以有所不同,下面仅举两个编码方案作为例子说明方案一经过上述压缩编码后,整个当前行的数据被分成三类进行编码1、第一编码数据即对第一类型数据段编码为文本格式(Literal Format),表示用LZ77,DeltaRow,缩位均不能压缩的数据,其数据格式为

2、第二编码数据即对第二类型数据段编码为缩位格式(CondensedFormat),表示用本发明中缩位原理可以压缩的数据,其数据格式为

3、第三编码数据即对第三类型数据段编码为复制当前行格式(CurrentLine Copy Format),表示用LZ77原理可以压缩的数据,其数据格式为

在压缩数据段时,记录有当前压缩的数据段与上一数据段压缩结尾点(即所谓“定位点”)之间的位移量(Anchor Offset)。在解压时,先将参考行完全复制到当前行,然后再对当前行进行修改来得到新的一行。由于对当前行与参考行之间的对应位置相同的数据我们不作处理,所以存在解压缩时怎样将已还原的数据段正确定位的问题。若正在压缩的数据段是当前行的第一个数据段,则定位点在当前行的行首。在数据段被压缩完之后,定位点移至此数据段的结尾点。在解压缩时,首先将写入点定位在当前行的行首,然后读入一个编码,取得其Anchor Offset,写入点向前加Anchor Offset得到当前写入点。每写一个数据,写入点向前移一个数据,当一个数据段写完后,写入点正好移到数据段的结尾点。然后重复前面的步骤直至将一行数据完全解压。
方案二经过上述压缩编码后,整个当前行的数据被分成四类进行编码1、第一编码数据即对第一类型数据段编码为文本格式(Literal Format),表示用LZ77,DeltaRow,缩位均不能压缩的数据,其数据格式为

2、第二编码数据即对第二类型数据段编码为缩位格式(CondensedFormat),表示用本发明中缩位原理可以压缩的数据,其数据格式为

3、第三编码数据即对第三类型数据段编码为复制当前行格式(CurrentLine Copy Format),表示用LZ77原理可以压缩的数据,其数据格式为

4、第四编码数据即对第四类型数据段编码为复制参考行格式(ReferenceLine Copy Format),表示与参考行同一位置完全相同的数据,其数据格式为

上述复制目标所在位置是指复制目标的数据段起始位置与当前位置的偏移量。
下面,我们将图7中所给出的图像片段按照上述方案二进行压缩。具体的压缩格式如下1、文本格式(Literal Format)请参见图6a,这里的00为文本编码标记,复制数量(Copy Count)为跟在本字节后的字节数-1(Copy Count不可能为0),由于只有6位宽,所以最多可以跟63个文本字节(Copy Count为62,即0x3E)。若文本字节多于63个(如65),则在本字节后再加一个字节(0x01)以表示实际字节数-64,而将Copy Count域记为63(0x3F)。然后跟上实际个数的文本字节。
2、缩位格式(Condensed Format)请参见图6b,这里的01为缩位编码标记,Code 1为3位的缩位编码1,Code 2为3位缩位编码2。
3、复制当前行格式(Current Line Copy Format)请参见图6c,这里的10为复制当前行编码标记,复制数量(Copy Count)为要从当前行复制的字节数-1(Copy Count不可能为0),复制偏移量(CopyFrom)为要复制位置与当前位置的偏移量。由于复制数量(Copy Count)域只有3位宽,所以最多可以表示复制7个字节(Copy Count域为6)。若多于7个字节(如9个字节),则在本字节后再加一个字节(0x01)以表示实际复制字节数-8,而将复制数量Copy Count域记为7。同理复制偏移量(Copy From)域也可以用多加字节的方法来解决位宽的限制问题。
4、复制参考行格式(Reference Line Copy Format)请参见图6d,其中11为复制参考行编码标记,复制数量(Copy Count)为要从参考行复制的字节数-1(Copy Count不可能为0),由于只有6位宽,所以最多可以表示63个字节(Copy Count为62,即0x3E)。若要复制的字节多于63个(如65),则在本字节后再加一个字节(0x01)以表示实际要复制的字节数-64,而将复制数量(Copy Count)域记为63(0x3F)。
图7中的第0行为系统提供的全零参考行。按照上述第二方案的编码格式进行编码的结果为(二进制形式)111 000000 01 010 110 01 000 010 01 110 000 01 001 11001 000 011 10 000 011 10 010 110 10 101 011201 110 000 01 010 101 11 000000 01 101 000 10 010 01101 011 101 01 000 011 10 001 110 10 001 011 10 010 110311 000110 10 110 011 11 000001411 000011 10 001 011 01 101 000 11 001000写成十六进制形式为
1C0 56 42 70 4E 43 83 96 AB270 55 C0 68 93 5D 43 8E 8B 963C6 B3 C14C3 8B 68 C8
权利要求
1.一种数字图像数据的压缩方法,其特征在于,包括选择参考行;逐一比较该参考行与当前行未编码部分相应位置的数据,以在未编码部分查找出第一个差异数据段;从该当前差异数据段的起始位置前的数据开始查找与从该当前差异数据段起始位置开始向后的数据的最大匹配数据段;根据匹配情况,确定待压缩数据类型;根据待压缩数据类型,确定待压缩数据段类型及其相关参数;以及根据待压缩数据段类型和相关参数,进行相应的编码处理。
2.如权利要求1所述的数字图像数据的压缩方法,其特征在于,该选择参考行的步骤,包括如下步骤在当前行和当前行以上的若干行的固定位置进行数据抽样;将当前行的抽样数据与其它行的抽样数据进行比较;以及将与当前行的抽样数据匹配度最高的行作为参考行。
3.如权利要求1所述的数字图像数据的压缩方法,其特征在于,该选择参考行的步骤,包括如下步骤设置一个固定长度的数据窗;将该数据窗沿着当前行和当前行以上的若干行滑动;以及如果当前行落在该数据窗内的数据与另外一行相应位置的数据相等,则选择该行为当前行。
4.如权利要求1所述的数字图像数据的压缩方法,其特征在于,该确定第一个差异数据段的步骤,包括如下步骤将当前行未编码部分与参考行的对应位置的数据逐一进行比较;将第一个差异数据的位置记录为差异数据段的起始位置;继续进行比较,直到当前行与参考行对应位置出现相同数据或遇到行尾;以及将该位置记录为差异数据段的结束位置。
5.如权利要求1所述的数字图像数据的压缩方法,其特征在于,该确定待压缩数据类型的步骤,如果最大匹配数据段长度为零,则包括将该差异数据段的起始数据跳过,并以下一数据为差异数据段的当前起始位置重新执行所述匹配步骤;以及分析该跳过的数据,如果不能进行缩位编码,则确定其为第一类型数据,如果可以进行缩位编码,则确定其为第二类型数据。
6.如权利要求1所述的数字图像数据的压缩方法,其特征在于,该确定待压缩数据类型的步骤,如果最大匹配数据段的长度不为零,则包括查找并分析所述跳过的数据,如果不能进行缩位编码,则确定其为第一类型数据,如果可以进行缩位编码,则确定其为第二类型数据;以及将从差异数据段当前起始位置开始的可匹配部分确定为第三类型数据。
7.如权利要求6所述的数字图像数据的压缩方法,其特征在于,该最大匹配数据段的长度不为零时,如果最大匹配数据段的长度小于当前差异数据段的长度,则进一步包括将当前差异数据段的起始位置移至匹配部分的结束位置的下一个数据的位置,以此新的当前差异数据段重新执行所述匹配步骤。
8.如权利要求1所述的数字图像数据的压缩方法,其特征在于,该确定待压缩数据类型的步骤,更包括一将所述第一差异数据段前面的未编码数据确定为第四类型数据的步骤。
9.如权利要求1所述的数字图像数据的压缩方法,其特征在于,该确定待压缩数据段类型的步骤,是将连续的同类型待压缩数据作为一该类型的待压缩数据段。
10.一种数字图像数据的解压缩方法,其特征在于,包括确定当前行的参考行以及当前行的数据;将写入点定位在当前行的行首;读入一个编码;取得该编码的数据类型及相关参数;及根据该数据类型及相关参数译码数据。
全文摘要
本发明涉及一种数字图像数据的压缩与解压缩方法,压缩时首先选择参考行;通过比较参考行与当前行相应位置的数据,查找差异数据段;从该当前差异数据段的起始位置前的数据开始查找与差异数据段的最大匹配数据段;根据匹配情况,确定待压缩数据类型;再确定待压缩数据段类型及其相关参数;最后进行相应的编码处理,其具有较高的压缩比和解压缩速度,而且大大提高了压缩的速度。
文档编号G06T9/00GK1567378SQ0313746
公开日2005年1月19日 申请日期2003年6月24日 优先权日2003年6月24日
发明者周兴平, 范建伟 申请人:德鑫科技股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1