专利名称:一种二维矢量数据的压缩方法
技术领域:
本发明涉及信息处理领域,特别是一种二维矢量数据的压缩方法。
背景技术:
1.GIS中二维矢量数据的特点及对其进行压缩的必要性二维空间矢量数据是当前地理信息系统所管理和应用的主要数据类型之一,具有数据量大、分布不均匀、拓扑关系复杂等特点。GIS中矢量数据一般由坐标串的形式表示,其中的坐标数据一般为浮点格式,随着获取数据的能力提高以及用户对数据精度的要求,为了更好地表达现实地理世界,GIS矢量数据量极为庞大,需要大量的存储和传输资源。在地理信息的网络服务(参见文献[1])等新兴的GIS应用领域,矢量数据需要经由带宽受限和不稳定的Internet连接传送给用户,需要传送的矢量数据的数据量大小成为决定应用成败的关键,直接采用原始的坐标数据作为二维空间矢量数据的载体无法满足要求。
在图像、视频和音频等多媒体数据领域,目前均有成熟的国际标准,如JPEG、JPEG2000、MPEG1/2/4、H.263/4等等。这些标准在提供了一种对庞大的多媒体数据的有效的具备高压缩比和高性能的压缩方法的同时,也提供了巨大的商业机会,使得基于这些多媒体数据的在线浏览和实时应用成为可能。对GIS矢量数据,目前还没有这样一种专门的压缩方法能够在不损失矢量数据所蕴涵的地理信息的前提下有效地减小矢量数据的数据量。这不仅影响了空间数据的存储和管理效率,也成为地理信息网络服务的瓶颈,大大阻碍了地理信息系统与Internet分布式应用的结合。
在这一背景之下,通过对二维空间矢量数据内部的复杂性分析和信息构成的分解以及对现有多媒体压缩技术的利用和在矢量数据压缩方面的革新,本发明提出了对二维矢量数据进行基于块变换编码的压缩方法。
2.二维矢量数据的特点分析及压缩方案选择与图像数据相比,二维矢量数据具有复杂的内部结构。矢量数据文件由位于地图绘制范围内部所有感兴趣的矢量对象构成,这些矢量对象内部的点的排列是有序的,然而矢量对象在矢量数据文件内部的排列则是无序的。
众所周知,在图像数据中,其冗余的一个主要表现形式就是相邻象素之间灰度值上的相关性。现行的图像压缩国际标准采用了块变换编码方法,通过将图像数据从空间域变换为频率域近似不相关的变换系数,然后对变换系数进行独立的标量量化来利用这种相关性。这一方法避免了直接采用理论上最优的但是计算量太大的矢量量化方法,同时也有效利用了原始数据内部的相关性,是一种实际的“最优”方案。
我们发现,在构成矢量数据的采样点坐标序列数据中也存在着很强的长序列相关性,因而也存在着大量的冗余。作为现实地理世界的数字化表示,这些坐标序列表明了地理对象(如河流、道路等)的变化趋势。由于平缓性变化和周期性变化在地理对象中的大量存在,使得矢量数据内部采样点坐标数据序列也具有了相应的特点并表现出我们前面所说的相关性,也表明对矢量数据进行压缩是可行的。
对矢量数据进行压缩并不是直接将成熟的图像数据压缩算法移植到矢量数据上那么简单。无论数据量多么大的图像数据都可以看成一个具有若干个分量(如RGB)的二维矩阵,而这种规则的内部结构是矢量数据所不具备的。因此,寻求矢量数据的有效压缩表示,必须充分考虑到矢量数据的结构对压缩算法和压缩性能的影响。
在选择矢量数据压缩方案中所采用的线性变换时,如众多图像压缩算法一样我们也采用了DCT(离散余弦变换,英文缩写)变换。尽管从去相关的意义上讲KL变换(Kahunen-Loéve)是最优的线性变换[2],但是KL变换的变换矩阵与所需要进行处理的数据的统计特征有关,不能事先确定,并且其计算到目前为止尚不存在快速算法。理论证明对一阶Markov信号,当其相关系数ρ接近于1时DCT变换是对KL变换的良好的近似。实验表明对矢量数据采用一阶Markov过程进行建模时其相关系数确实很接近于1,并且由于DCT变换矩阵可以事先确定,其计算有多种快速算法,因此从理论上到实践上采用DCT变换对矢量数据进行压缩都是可行的。
3.量化与二维矢量数据压缩的失真量化过程会产生精度的损失,尽量减少失真是二维矢量数据压缩追求的目标之一。目前在多媒体数据的有损压缩中多采用MSE(Mean Square Error,均方误差)作为失真度量[3],也有其它的准则,这些准则各有其优缺点。如MSE准则,它具有计算简单,物理意义明确、便于进行优化等优点,它突出的缺点则是在某些方面与人类感知特性不符合,较大的MSE值不一定对应了较差的感知质量。此外,MSE体现了一种“平均”的效果,即整体的失真达到了所给定的标准,因此,MSE无法对单个象素或者音频采样值的误差进行局部的控制,可能在重建图像或者重建音频中有个别的数据误差较显著,但是整体上却是符合失真控制的要求的。
对矢量数据的DCT变换系数,采用不同的量化表进行均匀量化会得到不同的压缩结果,得到不同的失真。本专利申请,不特别指定量化表,也不特别指定失真的度量标准。
4.矢量数据的渐进压缩和传输渐进压缩和传输是近年来应用于多媒体数据的一项新兴的技术,其特点是根据用户的要求以及网络带宽、显示和计算设备的能力等因素,传输合适大小的数据给用户。这一传输过程随时可以由用户所中止,而所获得的数据则构成了原多媒体数据的一个压缩的表示。这一技术的优点在于用户可以实时地获得原始数据的压缩表示,而不必等待整个数据传输完成,这对于低带宽的用户是尤其重要的。这一技术的运用需要对多媒体数据进行内在的组合,JPEG2000图像压缩标准对这一技术提供了良好的支持(参见文献[4])。
对于矢量数据,很多研究者提出的渐近传输方案仅限于对空间数据点的取舍和传输,也就是说仅限于空间域的渐进表示,它与矢量数据现有的原始的存储方式密切相关的。由于没有深入的矢量数据频率域表示方式作为支撑,因此这些渐进传输方案无法涉及到在矢量数据频率域表示基础上开展的频率域渐进传输方式。
综合以上来看,将变换编码方法应用于二维空间矢量数据的压缩,其技术关键在于矢量数据的频率域分析、冗余分析、矢量数据压缩失真的评定、适合于矢量数据编码的码率分配算法、矢量数据频率域渐近传输等等。就以上这些问题,目前研究者还没有提出完整的解决方案,只是在对空间数据库、空间数据网络服务、WebGIS等等的研究中有所涉及,但是没有进行深入的研究,更加没有形成系统的方法。
发明内容
本发明所要解决的技术问题是通过对二维空间矢量数据的频率域分析和信息构成的分解,借鉴多媒体压缩技术,提出矢量数据压缩方案,提供一种基于变换编码的新型二维空间矢量数据压缩方法,实现二维矢量数据的快速和有效的存储、管理和传输。
本发明解决上述技术问题的技术方案是将二维矢量数据分块后,使用基于DCT变换的编码方法对二维矢量数据进行有损压缩,并输出为指定格式的二进制位流。
本发明提出的对二维矢量数据进行基于变换编码的压缩方法,具有以下显著的效果其一.经过测试,在对等高线、道路网、水系等范围广泛的自然形成的矢量数据达到了近20的压缩比的情况下,其信噪比高达60dB,最大绝对失真仅为原矢量数据动态范围的10-5数量级左右;其二.对二维空间矢量数据的自适应分块在不破坏空间数据自身的复杂结构的同时生成了适合于块变换编码的矢量数据块;其三.采用合适的量化方法,可以控制重建误差,从而控制压缩过程中所产生的失真;其四.结合空间域和频率域的渐进压缩技术,为灵活和高效的矢量数据渐近传输提供技术基础。通过结合空间域和频率域矢量数据的表示所提出的新的更加高效的渐近传输方案可以更好地满足用户的需求。
图1本发明压缩方法的基本流程2分块算法框图,其中N为2n,n为压缩前指定。
图3矢量数据压缩主程序框图。
图4按照给定精度将压缩矢量数据块进行分节示意图。
图5jvg压缩文件结构。
图6压缩前的数据。
图7压缩后解压得到的数据。
图8压缩前和压缩后数据的重叠显示。其中压缩前为黑色,压缩后为灰色,灰色线旁边的黑色点以及短线为失真导致的不完全一致。
图9放大3倍后的一个局部数据重叠显示。
图10放大8倍后的一个局部数据重叠显示。
具体实施例方式
下面结合实例及附图对本发明作进一步说明。
本发明是一种二维空间矢量数据的压缩方法,具体是首先将原始矢量数据划分为矢量数据块,再按照两种模式之一对矢量数据块进行基于DCT变换的有损压缩,然后对得到的DCT变换系数进行熵编码得到压缩矢量数据块,最后将所有压缩矢量数据块组织为指定格式的二进制位流,图1是本发明中压缩方法的基本流程图。
本发明采用如下步骤对二维矢量数据压缩。
一.二维矢量数据集分割为矢量数据块(简称分块)1.二维矢量数据的整理本发明所处理的原始矢量数据是一个包含一个或多个几何对象(一般是多个)的数据集,可以是一个文件,也可以是二进制或文本数据流。一个几何对象由一个或者多个独立的部分组成(例如,带有岛的多边形、河流的分叉等),每个部分由数量不等的点按照存储的顺序连接而成。
如果要压缩的数据不符合上述模型,采用本发明技术前,必须预先进行整理,或者在实施压缩的过程中实时整理为指定的格式。
2.二维矢量数据集划分为矢量数据块将二维矢量数据划分为矢量数据块的过程就是将每个几何对象分别按照压缩算法的需要划分为相同大小的多个矢量数据块。为了便于进行DCT变换的快速计算,每个矢量数据块中都含有2n个二维数据点,n为大于1的整数,在压缩前指定。
为了与矢量数据的原有结构相一致,分块在矢量对象内部进行。几何对象(及其各个部分)中存储的点的数目不可能都是2n的倍数,从各个部分顺序提取矢量数据块后,对各个部分剩余的点,人为补充足够数量的点以构成一个完整的矢量数据块,分块算法见图2。图2中的N为2n。分块算法依次遍历一个几何对象的每个部分,按点的原始顺序提取2n大小的矢量数据块,其中所有点完全来自某一个部分的矢量数据块,称为GDB(GeometryData Block)。对每个部分提取GDB后剩余的不足2n的点,人为补充足够数量的点后再构成一个完整的矢量数据块,称为GSDB(Geometry Supplement Data Block)。补充的点的坐标等于GSDB中原有的所有点的坐标的平均值。对GDB和GSDB两种矢量数据块的压缩是一样的,但是在形成的压缩矢量数据文件中,压缩矢量数据块的头部包含了指示该块的类型以及该块中实际包含的数据点的数量的信息。
二.基于DCT变换的有损压缩(简称编码)参见图3,采用下述步骤对矢量数据压缩。
1.DCT变换对所有矢量数据块,选择两种模式之一对x和y坐标数据分别进行一维DCT变换。第一种模式是首先对矢量数据块的数据进行量化,然后对量化数据进行无损的整数DCT变换;第二种模式是直接使用有损的浮点DCT变换,变换之后进行量化,如果不考虑浮点运算中的舍入误差,浮点DCT变换也可以看成是无损的,但是后续的对变换系数的量化则是有损的。
一维序列x(i),i=0,1,ΛN-1的DCT变换及逆变换为X(k)=ckΣi=0N-1x(i)cos(2i+1)kπ2N]]>x(i)=Σk=0N-1ckX(k)cos(2i+1)kπ2N]]>其中c0=1/N,ck=2/N,1≤k≤N-1.]]>整数DCT变换由浮点DCT变换推导而得,具体可以参见文献[6]。本专利并不限制具体使用的整数DCT变换的类型以及其中的参数,只要正向整数DCT变换(Forward IntegerDCT)和逆向整数DCT变换(Inverse Integer DCT)相互对应即可。
2.量化及其重建第一种模式中的量化,以x分量的均匀量化为例,其方法是假定当前的矢量数据在x方向的范围为[XMIN,XMAX],指定x数据的量化步长为Δx,那么对所有矢量数据块中的x数据进行以下的量化 其中 是向下取整运算,后继的变换和编码对qx(i)进行,并且是无损的。
对压缩矢量数据文件解压后得到了qx(i),将其重建为原量化区间中点,也就是x^(i)=qx(i)Δx+XMIN]]>第二种模式中的量化,以x分量的均匀量化为例,其方法是假设当前的矢量数据经过浮点DCT变换后的DCT系数是X(k),k=0,1,Λ,N-1,指定量化步长为Δix,那么对所有X(k)进行以下的量化 其中 是向下取整运算,后继的编码对Qx(k),k=0,1,Λ,N-1进行,并且是无损的。要注意此时对于x坐标数据的不同的变换系数其量化步长一般是不同的,而不象直接对坐标数据进行量化那样只有一个量化步长。
同样地,对压缩矢量数据文件解压后得到QX(k),将其重建为原量化区间中点,也就是X^(k)=QX(k)ΔkX]]>注意无论是第一种模式还是第二种模式,对矢量数据块的有损压缩都得到了一组整数DCT变换系数。在后继的无损熵编码(第一层编码)中将不再区分这两种模式,而统一地将这些系数称为整数DCT变换系数。对于有损量化,本专利并不特别指定量化的步长和量化失真的度量,不同的量化步长会产生不同的量化失真,在不同的失真度量下压缩效果也不尽相同。如何通过设定失真度量和优化量化方法,是本专利的压缩技术框架下开放的内容。
量化的参数一般是随矢量数据的不同而不同的,不同的量化参数将产生不同的量化变换系数和最后的压缩效果,因此本专利也不特别限定特别的量化参数,专利的用户可以根据需要选择量化参数或选择参数的方法。
3.DC系数的处理DCT变换系数可以分为两类,第一个系数称为DC系数,是参加变换的所有数据的均值;其它的系数称为AC系数。由于DC系数直接与矢量数据块的位置相关,因此同一个几何对象的所有矢量数据块的DC系数之间往往具有很强的相关性,适合于采用预测编码来进行压缩。在本发明中,在一个几何对象(包括其多个部分)中,除了第一个矢量数据块中的DC系数之外,对所有后继矢量数据块的DC系数均计算其与前一个压缩数据块的DC系数的差值,然后对该差值进行霍夫曼编码。
差值霍夫曼编码表的示例见附表1。该表的第一列是行号,第三列是该行的霍夫曼码字,每行包含整数区间(-(2i-1),+(2i-1)),但是不包含中间区间(-(2i-1-1),+(2i-1-1))。对差值进行编码的码字包括两个部分,第一部分为该差值所在行的一元霍夫曼码字;第二部分是该差值的二进制反码(不需要符号位)。对于一个几何对象中第一个矢量数据块中的DC系数,直接使用该表进行编码。该编码方法可以参见文献[6]。DC系数的差值霍夫曼编码可举例说明如下。假定当前几何对象中第一个矢量数据块的DC系数为1787,第二个矢量数据块的DC系数为1783,对第一个矢量数据块的DC系数进行直接编码得到111111110|11011111011,第二个矢量数据块中实际编码的是这两者之间的差值-4,编码为100|011。
4.第一层编码对每个矢量数据块,经过第一种模式或者第二种模式的有损压缩后都将得到两个整数DCT变换系数块(分别对应于x和y坐标数据)。该块的第一个分量是DC系数,其处理已经在前面论述,剩下的所有AC系数按照如下方式进行无损的游程霍夫曼编码。
首先将AC系数块分割为(非零系数,零游程长度)对。零游程长度表示在该非零系数前面为零的AC系数的个数。对每个对,首先找到非零系数在差值霍夫曼编码表中的行数R,然后在游程霍夫曼编码表中找到对应于Z/R(Z为行号,R为列号)位置的码字,其中Z为零游程的长度。在该表中,R从1开始计数,Z从0开始计数。该码字后面加上非零系数的反码(不需要符号位)就是这个对的编码。AC系数块最后的一串零(个数不定,也可能是0个)以EOB(End Of Block,块结束)表示。游程霍夫曼编码表包括了(零游程长度,非零系数所在行)对和EOB的霍夫曼码字。一个游程霍夫曼编码表的示例见附表2。AC系数块的游程霍夫曼编码可举例说明如下。假定DCT变换块的尺寸N=16,欲编码的AC系数块为10,0,0,2,0,0,0,0,0,0,0,0,0,0,0,那么该块被划分为2个(非零系数,零游程长度)对和一个EOB。第一个非零系数10的前面没有零系数,它位于差值霍夫曼编码表中第4行,因此在游程霍夫曼编码表中其对应的码字是在0/4处的1011,其编码为1011|110。同样得到后面的非零系数2的编码为11111001|10。最后这串AC系数被编码为101111011111001101010其中最后的1010是EOB的编码。
此外,零游程的长度不得超出15,如果超出则用一个码字ZRL来表示之,并重新开始对零游程长度计数。举例来说,假如两个非零AC系数之间有17个零AC系数,那么被分割为一个ZRL和一个零游程长度为2的(非零系数,零游程长度)对。
5.第二层编码假如在第一层编码结束后直接将得到的位流输出为二进制文件,那么所得到的压缩矢量文件将具有唯一的精度。只有将整个文件解压缩之后,才能得到具有给定精度的解压矢量文件,而仅仅解压一部分压缩位流则得不到对原矢量文件的有意义的表示。通过对压缩位流的重新组织,可以使压缩位流进行部分解压后,得到较低精度或者较小范围的解压矢量文件。而如果用户需要更高精度或者更大范围的矢量数据,则可以进一步对剩下的压缩位流进行解压直至结尾。这一组织方式使得压缩位流具有渐进性质,用户可以按照其需要选择相应的位流进行解压,而不必一定要对整个文件进行解压才可以使用。上述按照矢量数据的精度或者范围对压缩位流进行组织以使得输出位流具有近似的渐进性质的过程称为第二层编码。
第二层编码通过对压缩矢量数据块的分割实现。假定原压缩矢量数据所达到的精度为εtotal,该εtotal指解压后的所有数据点与原数据点之间在x方向和y方向误差不超出的某一事先给定的阈值(例如,10-5)。给定一组S个从低到高的精度等级{ε1,ε2,Λ,εS},其中εS=εtotal。那么所有压缩矢量数据块都将被分割为S节,使得当仅解压第1节时,解压数据达到了ε1的精度等级,依次类推。同样地,对整个压缩矢量数据文件,当将其中所有的压缩矢量数据块都解压到第k(1≤k≤S)个精度等级时,整个解压矢量数据文件也达到了第k个精度等级。因此将压缩矢量文件(或者其某个范围,在下文中说明)的所有压缩矢量数据块中属于第k节的压缩位流的集合称为该压缩矢量文件(或者其某个范围)的第k段。在分割单个压缩矢量数据块后形成的节中包含了若干个(非零系数,零游程长度)对的编码,也可能是零个,但是分割不能打断(非零系数,零游程长度)对的编码。形成节之后在这些节的最后必须加上EOB的码字(在上面的例子中,是1010),假如该节是空的,那么直接用EOB表示该节。一个具有五个精度等级的分割的示意图见图4。精度等级的确定以及根据确定的精度等级对压缩矢量数据块进行分割的方式都可以由应用所指定,不是本专利的内容。
本发明中对矢量数据进行第二层编码有两种方式,分别是精度优先方式以及范围优先方式。在精度优先方式中,整个矢量数据的低精度版本首先被解压,然后解压的数据将逐步提高整个矢量数据的精度。在范围优先方式中,首先将整个矢量数据分割为几个范围,所有范围互不重叠,都是由若干个几何对象组成。然后对每个范围实行精度优先的组织。范围的划分由应用确定,不是本专利的内容。由于精度优先方式也可以看作是将整个文件视为一个范围,因此可以认为压缩矢量数据位流由一个或者多个范围组成,而一个范围则由一个或者多个段组成。
下面举例说明这两种第二层编码方式。假定有矢量数据A中包含了三个几何对象A1,A2,A3。所有几何对象都被按照三个精度层次划分为三节,即Aiji,j=1,2,3,表示第i个几何对象的第j节。在范围优先方式下A被分割为两个范围,分别包含几何对象A1,A2和几何对象A3。如果按照精度优先方式,那么在压缩文件中所有节的排列方式为A11,A21,A31,A12,A22,A32,A13,A23,A33如果按照范围优先方式,那么在压缩文件中所有节的排列方式为A11,A21,A12,A22,A13,A23,A31,A32,A33三.压缩矢量数据的输出对所有压缩矢量数据块,在给定的编码方式下添加各种标记和控制信息并进行组织后就形成了最后的矢量数据压缩文件,称为jvg文件,由文件头和文件体组成(见图5)。下面对jvg文件的格式作详细的说明。所有的字节均具有Intel平台上使用的littleendian字节顺序(最显著位在字节的最后面)。
参见附表3,压缩文件的文件头包含了如下的两部分第一部分是关于压缩矢量数据文件整体以及所采取的压缩算法的信息。
这一部分是必需的。这里以及在后续码流的形成中用到的标记由两个字节组成,其中第一个字节为0XFF,第二个字节在除了0X00和0XFF(即全0和全1的字节)之外的范围内取值,具体见附表3。
第二部分是压缩算法所需要的表,包括DCT变换系数量化表、对DC系数差值和AC系数进行无损熵编码的编码表。
这一部分是可选的。如果不给出这些表,那么可能由压缩和解压程序从另外的默认途径获得。具体说明如下首先是DCT变换系数量化表的定义。量化表的定义由标记DQT(参见附表4)开始,第一种方式下定义的量化表由一个双精度浮点常数C和N(N为DCT变换块尺寸)个整数组成,每个DCT变换系数的对应量化步长为C乘以对应位置的整数;第二种方式下定义的量化表由N个双精度浮点数组成,这些数即为对应DCT变换系数的量化步长。
然后是DC系数差值霍夫曼编码表的定义。为了保存该表,首先给出一个一字节无符号整数表示该表的行数R,每行包含的差值可以直接由该行的行号计算得到,因此不需要保存。接下来是R个一字节无符号整数,表示每行所对应的霍夫曼码字的长度。霍夫曼码字的长度不允许超过16。最后将所有码字按照顺序各以两个字节进行保存,真正的码字位于这两个字节的低端,由于码字长度不允许超过16,因此两个字节是足够的。以附表1为例,首先保存的字节为0X11(17的十六进制表示),然后是下面17个字节,表示各个码字的长度0X02,0X03,0X03,…接下来的34个字节为0X00,0X00,0X00,0X02,0X00,0X03…最后是AC系数游程霍夫曼编码表。为了保存该表,首先给出两个一字节无符号整数表示该表的行数R和列数Z。R代表了非零AC系数在DC系数差值霍夫曼编码表中的最大行数,Z代表了非零AC系数前面的零游程的最大长度。然后,接下来再按照行优先的顺序保存该表中的RZ个码字,并在(0,0)位置(也就是表的开头)插入保存EOB的码字,在(0,15)处插入保存ZRL的码字。共计RZ+2个码字。保存这些码字时,同样首先保存RZ+2个表示对应码字长度的一字节无符号整数,然后将所有码字按照顺序各以两个字节保存。
如果上述的量化表和编码表均在压缩文件中给出,那么将有六个表(分别对应x和y坐标数据)。
jvg文件的文件体包含了实际的压缩矢量数据。如果为第一层编码,那么该部分仅有一个压缩矢量数据段,该段由一到多个压缩矢量数据块组成。如果为第二层编码,那么该部分有一到多个范围,每个范围由一到多个段组成,每个段按照顺序由一到多个压缩矢量数据块的节组成。在文件体中,需要一些标记以表示不同的范围和段的开始和结束,而每个节均由EOB结尾。
下面首先就第一层编码中的压缩矢量数据块作一些说明。由前面的分块算法可知压缩矢量数据块可能由GDB或者GSDB处理而来,而该GDB或者GSDB又可能位于一个几何对象中不同的部分,这些信息需要在压缩矢量数据块中加以保存。为此在每个压缩矢量数据块的开头附加两个比特,其意义如附表5所示,如果该压缩矢量数据块由GSDB压缩而来则下一个字节保存该压缩矢量数据块中的实际包含的点数。由于一个GDB或者GSDB将产生两个压缩矢量数据块(分别对应x和y坐标数据),并且这两个块总是相继的,因此仅在前一个块的开头保存这些信息。由块头部信息以及GSDB中包含的点数信息即可重建由多个部分组成的几何对象。此外如果将一个压缩矢量数据块根据精度要求划分为多个节,那么仅在第一节中保存原块头部信息。
在确定了采用第一层还是第二层编码以及具体将整体矢量数据分割为范围以及将各个范围内的压缩矢量数据块分割为节并组合为段的方式之后即可将所有位流组织为文件体。附图5是文件体的一个示例。在压缩文件中难以发现各个几何对象之间的边界,但是在解压时可根据各个压缩矢量数据块的头部信息将解压后的坐标点列组合为几何对象。
最后还有两点需要说明。一是jvg文件中各个编码单元(如压缩矢量数据块或者分割该块所形成的节)都必须是字节对齐的,因此如果编码单元的位数不是8的整数倍,那么必须在该编码单元最后补充足够的0以使其位数为8的整数倍。二是为了避免混淆编码单元中的位流和压缩文件中的标记(见前面的定义),规定假如编码单元中如果出现了0XFF字节(也就是一个全为1的字节),那么在该字节后面插入一个全为0的字节。因此如果解码器遇到一个0XFF字节,如果其后面的字节为0X00,那么应当直接抛弃这个字节,如果不是,那么应当解释将这两个字节解释为一个标记并根据该标记的值采取相应的动作。图6至图10是一个用本专利技术压缩实际河流数据的例子,采用第一层编码,压缩前的大小为5,831,572字节(5.56M),压缩后的大小为269,716字节(264kB),包括了文件头和量化表、编码表等,压缩比达到了21.6。
附表附表1差值霍夫曼编码表示例
附表2AC系数游程霍夫曼编码表示例
附表3 jvg文件头
附表4jvg文件中所使用的标记
附表5 压缩矢量数据块头部信息
参考文献[1]H.Wu,Hanwu Zhang,Xiaojing Liu,Xia Sun,Adaptive Architecture of GeospatialInformation Service over the Internet with QoGIS Embedded,inISPRS Workshopon Service and Application of Spatial Data Infrastructure,XXXVI(4/W6),Oct14-16,2005,Hangzhou,China[2]胡广书.数字信号处理——理论、算法与实现.北京清华大学出版社,1997[3]A.Ortega and K.Ramchandran,Rate Distortion Methods for Image and VideoCompression,IEEE Signal Proc.Magazine,pp.23-49,Nov.1998. M.Rabbani and R.Joshi,An Overview of the JPEG2000 Still Image CompressionStandard,Signal ProcessingImage Communication,vol.17,issue.1,pp.3-48,Jan.2002. V.K.Goyal,Theoreticai Foundations of Transform Coding,IEEE SignalProcessing Magazine,pp.9-21,Sept.2001. Y.Zeng,L.Cheng,G.Bi,and A.C.Kot,Integer DCTs and Fast Algorithms.IEEETransactions on Signal Processine,vol.49,no.11,pp.2774-2782,Nov.2001. David Salomon[美]著,吴乐南等译,数据压缩原理与应用.北京电子工业出版社,200权利要求
1.一种二维空间矢量数据的压缩方法,其特征是将二维矢量数据分块后,使用基于DCT变换的编码方法对二维矢量数据进行有损压缩,并输出为指定格式的二进制位流,DCT是离散余弦的英文缩写;具体步骤如下(1)将二维矢量数据划分为矢量数据块,后续的编码过程针对每个矢量数据块单独地进行,这一步称为分块,(2)对每个矢量数据块中的x和y坐标数据进行基于DCT变换的有损压缩,这一步称为编码,(3)对所有编码得到的压缩数据块添加各种标记和控制信息形成压缩位流,输出到二进制的压缩矢量数据文件,这一步称为输出。
2.根据权利要求1所述的二维矢量数据的压缩方法,其特征是采用以下步骤分块对所处理的二维矢量数据,以矢量数据内部所包含的矢量对象为单位,按照压缩算法的需要划分为相同大小的矢量数据块;每个矢量数据块中都含有2n个二维数据点,为了与矢量数据的原有结构相一致,分块在矢量对象内部进行,不足2n个数据点的矢量数据块人为补充一些数据点后构成一个完整矢量数据块;n为大于1的整数,在压缩前指定。
3.根据权利要求1所述的二维矢量数据的压缩方法,其特征是采用以下步骤编码a.对所有矢量数据块,选择两种模式之一对x和y坐标数据分别进行一维DCT变换;第一种模式是先对坐标数据进行量化,然后对量化后的整数坐标数据进行无损整数DCT变换,得到整数变换系数;第二种模式是直接对坐标数据进行浮点DCT变换,得到浮点变换系数,b.对第二种模式处理得到的所有变换系数进行均匀量化,得到量化变换系数,c.对每个矢量数据块的量化变换系数或者第一种模式中的整数变换系数按顺序逐块进行无损熵编码,生成压缩矢量数据块,由步骤a、b和c组成的编码过程称为第一层编码,或者,d.按照矢量数据的重建精度递增的要求进一步组织压缩矢量数据块,使得压缩位流具有渐进性质,这样,由步骤a、b、c和d组成的编码过程称为第二层编码;第二层编码仅针对第二种模式下得到的量化变换系数。
4.根据权利要求1所述的二维矢量数据的压缩方法,其特征在于输出对有损压缩数据块添加各种标记和控制信息,并将得到的二进制位流输出到指定格式的压缩文件,扩展名为jvg;该压缩文件由文件头和文件体两个部分组成。
全文摘要
本发明是一种二维矢量数据的压缩方法,具体是首先将原始矢量数据划分为矢量数据块,再按照两种模式之一对矢量数据块进行基于DCT变换的有损压缩,然后对得到的DCT变换系数进行熵编码得到压缩矢量数据块,最后将所有压缩矢量数据块组织为指定格式的二进制位流。本发明的主要效果是在对等高线、道路网、水系等范围广泛的自然形成的矢量数据达到了近20的压缩比的情况下,其信噪比高达60dB,最大绝对失真仅为原矢量数据动态范围的10
文档编号H03M7/30GK1777038SQ20051001993
公开日2006年5月24日 申请日期2005年12月1日 优先权日2005年12月1日
发明者吴华意, 朱海军, 刘异 申请人:武汉大学