数据压缩(Data Compression)是指在一定的数据存储空间要求下,将相对庞大的原始数据重组为满足特定条件的相对较小的数据集合,并且能够使得从该数据集合中恢复出来的信息与原始数据相一致,或者能够获得与原始数据一样的使用品质。
3.4.1矢量数据的压缩
矢量数据压缩是从组成曲线的点集合A中抽取一个子集B,用这个子集B在一定的精度范围内尽可能地反映原数据集合A,而这个子集B的点数应尽可能少。
矢量数据压缩的核心是在不扰乱拓扑关系的前提下对原始采样数据进行合理的删减。
1. 道格拉斯-普克法(Douglas-Peucker)
基本思路是:
1)对一条曲线ABCDEF上的首末两个节点A和F连一条虚线,求曲线上其他点与AF之间的距离。
2)比较最大距离值d1与限差L的大小,若d1<L,则将这条曲线上的中间点全部舍去。
3)若d1≥L,保留d1对应的点D,并以该点为界,把曲线分为两部分对这两部分重复使用上述方法,直到这条线结束。
2. 垂距法
基本思路是:先在曲线(ABCDE)的一端顺序取3个点(A、B、C),计算中间点(B)与其他两点(A、C)连线的垂线距离d1,并与限差L比较,若d1<L,则舍去中间点(B),然后以刚才的第一点(A)为起点顺序取三个点(A、C、D)使用该方法继续进行处理;若C点到AD的距离d2≥L,则保留中间点(C)。然后以刚才的中间点(C)作为起点再顺序取3个点(C、D、E)继续处理,直到这条线结束。
3. 光栏法
基本思路是:定义一个扇形区域,通过判断曲线上的点在扇形外还是扇形内,确定保留还是舍去。设光栏的口径为r,则光栏法的实现过程如下:
1)过点P2作一条垂直于线段P1P2的直线,然后在这条直线上找两点a1和a2,使线段a1P2=P2a2=r/2,然后连接P1a1和P1a2,并将其延长,观察点P3是否落入扇形a1P1a2的开口范围内。
2)若点P3在扇形内,则舍去点P2,然后连接P1P3,采用与上一步相同的方法,过P3作垂直于P1P3的直线,找到b1和b2两点,使其满足b1P3=P3b2=r/2,然后连接P1b1和P1b2并延长,观察点P4是否落入扇形b1P1b2的开口范围内。
3)若点P4落入扇形内,则继续上述步骤;若不落入,则保留点P3,然后以P3为顶点,重复上述的过程。如此进行下去,直至曲线上的所有点被检查完为止。
4. 迭代端点拟合法
基本思路是:
1)对于一条曲线上的序列点,设它的首末两个节点分别是A、B,然后连接线段AB。
2)在节点A和B之间的曲线上寻找与线段AB之间的距离最大的点,记为C,然后去掉线段AB,连接线段AC、BC。
3)在节点A和C之间的曲线上寻找与线段AC之间的距离最大的点D,然后去掉线段AC,连接AD和CD;同理,在节点B和C之间的曲线上寻找与线段BC之间的距离最大的点E,去掉线段BC,连接BE和CE。如果满足曲线拟合的要求,则折线ADCEB即为曲线的拟合结果;否则,对线段AD、DC、CE、EB分别执行上述过程,直到满足要求为止。
5. 几种矢量数据压缩方法的比较
道格拉斯—普克法从整体到局部,即由粗到细来确定曲线压缩后需要保留的点,具有平移、旋转、不变形等特点,同时具有在给定曲线与限差后压缩结果一致的优点,但该方法没有考虑矢量数据(曲线)之间的拓扑关系,无法有效地控制偏差面积的大小,并且曲线保留点的压缩比不可能是在满足给定精度条件下的最大压缩比。
垂距法算法简单、速度快,但有时可能删除偏差大于限差的点,并且如果将曲线反向,所得结果可能不同。
光栏法的压缩可在数字化时实时处理,每次判断下一个数字化的点,且计算量较小。
迭代拟合算法与道格拉斯—普克法非常类似,其筛选出的点具有相对最大的信息量,因此有时也称为特征点筛选法,经常用于综合线状要素。
3.4.2 栅格数据的压缩与编码
1. 直接栅格编码
直接栅格编码是将栅格数据看作一个数据矩阵,逐行(或逐列)逐个记录代码,记录的顺序可以有所不同,可以从左到右逐个记录像元,也可以奇数行从左到右记录,偶数行从右到左记录。
主要特点:存储方式简单直观,处理方便,但数据量较大。
2. 链码
基本思路是:首先确定线起点所在的行号和列号,然后沿着数字曲线或边界像素以8邻接的方式移动,每一个移动方向由数字集{i︱i=0,1,2,…,7}进行编码,表示与X轴正向的45°×i夹角。
该方法可以有效的压缩栅格数据,尤其是对计算面积、长度和凹凸度等运算十分方便,但它的缺点是对边界进行合并和插入等修改编辑工作比较困难,对局部的修改将影响整体结构的变化,效率不高,并且由于链码以每个区域为单元存储边界,导致相邻区域的边界将被重复存储,所以仍然有较大的数据冗余。
3. 游程长度编码
基本思想是:在一幅栅格图像中,行(或列)方向上相邻的像元往往具有相同的属性值,因而可采用某种方法来压缩这些重复的属性值。
游程长度压缩编码的建立方法有两种:
法一:只在各行(或列)方向上像元的属性值发生变化时依次记录下像元的属性值及具有此属性值的像元个数。
法二:依次记录像元的属性值发生变化时的像元位置和相应的属性值。
游程长度压缩编码能够有效的压缩原数据,且易于检索、叠加合并等操作,运算简单,适用于机器存储量小,数据需大量压缩,而又要避免复杂的编码解码运算增加处理和操作时间的情况。
此种方法的图像的压缩效率与图像的复杂程度呈反比,即图像越复杂,像元的种类越多,相邻像元具有相同属性值的概率越低,压缩的效率也就越低;当图像越简单时,像元越单一,具有相同属性值的相邻像元数目(游程)就越多,压缩的效率也就越高。
4. 块码
块码以相邻像元组成的正方形区域为块,依次记录块左上角像元的行、列号、半径和块的属性值四个部分组成。
块码对具有较为规则空间要素的图像,压缩效果也较好。块码有可变的分辨率,当图像越简单时,图斑越大,分辨率越低,压缩效率就越高;反之,压缩效率会降低。
5. 四叉树编码
基本思想是:将一幅图像逐步分解成大小相同的四个子块,每个子块称为一个象限,每个象限下面还可以再分成四个大小相同的子象限,直到这个子象限中的所有像元具有相同的属性值时不再细分,否则继续划分,然后记录属性值单一的子象限(即叶节点)的地址、深度、属性等信息。
四叉树编码对二值图像的压缩更有效。
本节视频
矢量数据的压缩
栅格数据的压缩与编码

