矢量曲线压缩, 也称曲线特征点提取, 还称曲线特征点筛选或曲线抽稀, 其实质是一个信息压缩问题, 它是从组成曲线的数据集合A中抽取一个子集a, 用这个子集作为一个新的信息源, 在规定的精度范围内, 该子集能够从内容上尽可能近似反映原集合A, 从数据量上则尽可能大的压缩[1]. 数据压缩的目的主要是删除冗余数据、减少数据的存储量、节省存储空间、加快后继数据分析和使用速度, 数据压缩的核心就是在不扰乱拓扑关系的前提下, 对数据进行合理的加工. 曲线压缩对于计算机图形学、计算机制图学等有着非常重要的意义, 而在测量系统和控制系统中也需要采集和处理大量的随机分布的离散数据, 这都需要用到数据压缩, 数据压缩的结果直接影响后续应用研究[2].
目前已经出现多种较成熟曲线压缩理论, 包括间隔取点法、角度限制法、垂距限值法、光栏法、道格拉斯-普克法[3]、最小面积重复删除法、新兴的基于小波技术的曲线压缩等, 由于基于小波技术的压缩算法可能导致边界处变形, 且压缩过程复杂, 对计算机要求高等缺点, 目前应用较少. 大家公认的矢量曲线特征点提取的经典算法是道格拉斯-普克法, 简称D-P法. 目前已有较多研究人员针对道格拉斯-普克法的缺陷进行了改进[4–19], 这些算法各有利弊, 并且在不同程度上存在阈值选取不确定、时间复杂度高、压缩效果不理想、未考虑数据点频数等问题.
针对上述存在问题, 本文提出了一种改进的特征点提取方法, 该算法选用数据点到基线的距离, 数据点与相邻数据点间的夹角, 考虑数据点的“孤立性”和频数等属性作为特征点选取的关键因素, 利用熵值法确定最终评价值, 自动按照给定数据压缩率进行曲线数据压缩, 并对改进算法进行了实验验证.
1 相关工作在矢量数据中, 曲线是由离散的点列组成, 曲线数据实际上是一些表示点的数据集合. 作为曲线形态的支撑点, 数据集的首尾两点在数据压缩算法中是必须要保留的. 现在最常用的曲线数据压缩算法是道格拉斯-普克法, 该算法的具体步骤是:
步骤1. 曲线数据点集合由点序
步骤2. 计算
步骤3. 判断
步骤4. 判断
步骤5. 将
时间复杂度是衡量算法优劣的主要标准之一. 道格拉斯-普克算法第2步的时间复杂度为
道格拉斯-普克法是一个从整体到局部, 即由粗到细的方法来确定曲线压缩后保留点的过程, 其优点是所有特征点都是原曲线上的数据点, 可以较好地保持曲线压缩前后几何特征的相似性, 具有平移、旋转的不变性, 但是道格拉斯-普克法也有自身的局限性:
(1)阈值的选取具有不确定性, 如果阈值选取不合理, 可能导致一些特征点被误删除;
(2)选定阈值与数据压缩率没有直接关系, 导致不能事先确定压缩点数;
(3)算法中存在递归分段计算, 对于复杂的曲线, 迭代次数多, 计算量大, 比较耗费时间;
(4)未考虑频数等非空间属性对数据点的影响, 可能导致一些特征点被删除.
目前已有较多研究人员针对道格拉斯-普克法的缺陷进行了相关研究: 为了消除迭代、提高算法运行速度, 王笑天等[4]提出采用第一特征点法; 为了降低压缩带来的面积误差和位置偏差问题, 韩晓霞等[5]提出顾及曲线走向及局部面积特征的矢量数据压缩算法; 针对压缩后曲线保持无自相交属性的问题, Wu ST等[6]提出曲线无自相交压缩的算法; 针对海洋权益问题, 于靖等[7]提出面向自然岸线抽稀的改进道格拉斯—普克算法; 针对阈值优化选取问题, Prasad DK等[8–13]提出阈值优化选取方法; 针对连续弯曲问题, Ai TH等[14–19]提出对连续弯曲进行压缩的方法等. 以上这些算法更多考虑的是曲线的空间属性, 没有考虑频数等非空间属性; 对于阈值优选时, 多个属性之间的协调性不强, 导致“综合”效果较差.
2 改进的曲线数据压缩算法对于随机分布的离散数据点, 其点集排序的方法是依次寻找距离最近的下一个新点, 因此, 得到的点序反映的只是逻辑相邻关系, 这和物理相邻的程度是有差异的. 如果只按逻辑相邻关系进行点序的成串删除, 有时就会删去互相远离的特征点[21,22]. 在测量系统和控制系统中, 采集得到的重复数据点在点集中自动合并成唯一数据点, 导致数据压缩时, 该数据点重要度下降; 数据点之间的相似程度往往用“距离”来度量, 逻辑相邻的数据点的多少也是特征点选取的关键因素, 例如连续小角度变化的复杂曲线. 因此, 特征点确定不仅与单个离散数据点出现频数有很大关系, 还与逻辑相邻离散数据点间出现频数有关.
为了防止删除特征点, 不仅要考虑数据点到基线的距离、数据点与相邻数据点间的夹角, 还应结合考虑该数据点的“孤立性”和频数等非空间属性来共同决定对它的取舍. 改进算法具体步骤如下:
步骤1. 根据经验确定直方图的极差、组距、组数
${f_k} = \frac{{{R_k}}}{R} \cdot m$ |
式中,
步骤2. 曲线数据点集合由点序
${N_2} = {N_1}\sqrt {{{\left( {\frac{{{S_1}}}{{{S_2}}}} \right)}^x}} $ |
$\Delta N = {N_1} - {N_2}$ |
式中,
步骤3. 计算
${g_i} = \frac{{{L_{{P_{i - 1}}{P_i}}} + {L_{{P_i}{P_{i + 1}}}}}}{{\frac{2}{{n - 1}}\displaystyle\sum\limits_{j = 1}^{n - 1} {{L_{{P_j}{P_{j + 1}}}}} }}$ |
式中, 分子的涵义是当前点
步骤4. 计算
步骤5. 计算
步骤6. 熵值法计算
(1)指标归一化:
$X_{ij}' = \frac{{{X_{ij}} - \min \left\{ {{X_{2j}},{X_{3j}}, \cdots, {X_{\left( {n - 1} \right)j}}} \right\}}}{{\max \left\{ {{X_{2j}},{X_{3j}}, \cdots, {X_{\left( {n - 1} \right)j}}} \right\} - \min \left\{ {{X_{2j}},{X_{3j}}, \cdots, {X_{\left( {n - 1} \right)j}}} \right\}}}$ |
式中,
(2)计算第
${f_{ij}} = \frac{{X_{ij}'}}{{\displaystyle\sum\limits_{i = 2}^{n - 1} {X_{ij}'} }}$ |
(3)计算第
${h_j} = - k\sum\limits_{i = 2}^{n - 1} {{f_{ij}}\ln \left( {{f_{ij}}} \right)} $ |
式中,
(4)计算各项指标的熵权
${w_j} = \frac{{1 - {h_j}}}{{\displaystyle\sum\limits_{j = 1}^J {{h_j}} }}$ |
式中,
(5)计算各数据点的综合得分
${s_i} = \sum\limits_{j = 1}^J {{w_j}} \cdot {f_{ij}}$ |
步骤7. 依次将
本文算法比较简单, 包含5个单层循环, 分别是第3至7步, 其中前4个循环的时间复杂度均为
本文算法不仅继承了道格拉斯-普克算法的优点, 如所有特征点都是原曲线上的数据点, 具有平移、旋转的不变性等, 而且增加了如下优点:
(1)不需要事先设定阈值, 算法自动根据加权修正后的综合得分, 以从小到大顺序, 依次压缩数据;
(2)直接指定数据压缩率, 保证压缩算法运行后结果, 满足测量系统和控制系统的带宽、分辨率和存储量的要求;
(3)取消迭代运算, 对于复杂的曲线, 将有效降低计算量, 减少运算时间;
(4)特征点的确定, 不仅考虑了逻辑相邻和物理相邻关系, 而且同时考虑了频数等非空间属性的影响, 降低了误删除概率.
3 实验分析 3.1 实验数据来源实验一: 为证明本文算法的有效性和优越性, 以我国东北某段国界线1: 100万的数据为实验对象, 分别采用道格拉斯-普克算法与改进算法对实验对象进行数据压缩效果对比实验, 该部分区域的形态比较曲折, 能够很好地检验两种数据压缩方法的效果.
实验二: 为了验证频数对测量系统和控制系统采集结果数据压缩的影响, 本文选取实测高压共轨柴油机进油计量阀流量特性变化较明显的区间作为实验区, 进行滤波、融合等预处理后生成等效数据点集(如图5所示), 作为本算法抽稀实验的源数据, 共计25个数据点.
3.2 实验设计矢量曲线数据压缩算法的优劣, 一般通过运行时间、压缩率、位移偏差和面积偏差来评价. 数据压缩的速度(时间复杂度)主要以运行时间来评价; 数据压缩率(空间复杂度)是压缩掉的曲线数据点数与原始曲线点数之比; 位移偏差是曲线压缩导致的原始数据点与压缩后曲线数据点的空间偏移量, 通过计算原始曲线上数据点到压缩后曲线的最短距离的中值或平均值来度量; 面积偏差是曲线压缩带来的面积偏差, 通过计算原始曲线所围面积与压缩后曲线所围面积的差值来度量, 该指标反映了压缩后曲线与原曲线的贴近程度.
实验一: 由于对比的是数据压缩后曲线的局部形态特征变化, 因此需要对两种算法应用相同的压缩率.
实验二: 频数指标采用两个直方图频数分布来进行计算, 分别为方案一和方案二, 其直方图频数分布如图2和图3所示.
3.3 实验结果及分析 3.3.1 实验一
由于道格拉斯-普克算法不能事先确定压缩率, 经过多次优选阈值后确定相同压缩率. 从图4可以看到, 道格拉斯-普克算法数据压缩结果虽然能较好地保留曲线特征, 但会导致尖锐角的出现, 压缩效果比较生硬, 平滑度不够, 而改进算法较好地保持了曲线的整体形态特征, 能够较好地体现出“综合”的本质.
3.3.2 实验二
由于试验方案中各项指标的熵权按表1所示变化, 导致各数据点的综合得分发生变化, 进而影响到压缩数据点和位移偏差、面积偏差. 压缩结果如图5至图6所示, 运行时间、压缩率、位移偏差及面积偏差如表2所示.
图5中, 本文改进算法与道格拉斯-普克算法的压缩率同为4%, 即压缩点数为1个. 道格拉斯-普克算法迭代次数为45次. 道格拉斯-普克算法删除图5中序号2点; 方案一删除图中序号18点; 方案二删除图5中序号15点.
图6中, 本文改进算法与道格拉斯-普克算法的压缩率同为12%, 即压缩点数为3个. 道格拉斯-普克算法迭代次数为41次. 道格拉斯-普克算法删除图6中序号2、17和18点; 本文改进算法方案一删除图6中序号15、18和21点. 方案二删除图6中序号14、15和24点.
从表2可以看出:
(1)运行时间: 压缩率为4%时, 本文改进算法运行时间比传统道格拉斯-普克算法减少了68.33%; 压缩率为12%时, 减少了50.13%. 由于道格拉斯-普克算法迭代次数分别为45次和41次, 即使按时间复杂度为
(2)位移偏差、面积偏差: 本文改进算法根据数据点多种属性的相对重要性程度进行压缩,当考虑数据的非空间属性, 如频数时, 在较好地保持曲线形状的同时,可能导致位移偏差和面积偏差大于传统道格拉斯-普克算法.
(3)压缩率: 由于道格拉斯-普克算法最佳阈值选取需要多次试探, Prasad DK等[8–13]采用曲线拟合等阈值优化选取方法, 严重影响压缩计算效率, 很难直接给定压缩率. 本文改进算法自动按照给定数据压缩率进行曲线数据压缩, 容易实现高压缩率与保真效果之间的平衡.
4 结论
本文对传统的曲线压缩算法进行了简单的介绍, 分析了道格拉斯-普克数据压缩算法, 针对其阈值的选取、数据压缩率、时间复杂度和特征因素等方面存在的不足, 保留道格拉斯-普克算法的优点, 如所有特征点都是原曲线上的数据点, 具有平移、旋转的不变性等, 提出了一种改进的特征点提取方法, 该算法通过直方图统计数据点的频数, 根据数据点到基线的距离、数据点与相邻数据点间的夹角, 考虑数据点的“孤立性”和频数, 自动按照给定数据压缩率进行曲线数据压缩. 在MATLAB上进行了仿真实验, 利用自主研发的控制系统平台, 对进油计量阀流量特性进行增量自学习, 并在油泵台架和发动机台架上完成了相应的实验. 实验结果表明, 本算法可以有效的对数据进行压缩处理, 满足测量系统和控制系统的数据压缩需求.
[1] |
李帅, 方源敏, 喜文飞. 矢量曲线特征点提取方法的改进. 河南科学, 2011, 29(4): 469-471. DOI:10.3969/j.issn.1004-3918.2011.04.022 |
[2] |
尹志喜, 甄国涌. 曲线数据压缩算法研究与应用. 计算机系统应用, 2010, 19(3): 226-228. DOI:10.3969/j.issn.1003-3254.2010.03.055 |
[3] |
Douglas DH, Peucker TK. Algorithms for the reduction of the number of points required to represent a digitized line or its caricature. Cartographica: The International Journal for Geographic Information and Geovisualization, 1973, 10(2): 112-122. DOI:10.3138/FM57-6770-U75U-7727 |
[4] |
王笑天, 吕海洋. 基于第一特征点的道格拉斯-普克压缩算法. 软件导刊, 2016, 15(11): 68-70. |
[5] |
韩晓霞, 崔浩, 孙钰珊. 顾及曲线走向及局部面积特征的矢量数据压缩算法. 北京测绘, 2017(6): 6-9. |
[6] |
Wu ST, Marquez MRG. A non-self-intersection Douglas-Peucker algorithm. Proceedings of the 16th Brazilian Symposium on Computer Graphics and Image Processing. Sao Carlos, Brazil. 2003. 60–66.
|
[7] |
于靖, 陈刚, 张笑, 等. 面向自然岸线抽稀的改进道格拉斯—普克算法. 测绘科学, 2015, 40(4): 23-27. |
[8] |
Prasad DK, Quek C, Leung MKH, et al. A parameter independent line fitting method. Proceedings of the 1st Asian Conference on Pattern Recognition. Beijing, China. 2011. 441–445.
|
[9] |
王晓理, 陈双军, 魏斌, 等. 曲线拟合的Douglas-Peucker算法阈值优化选择. 测绘科学技术学报, 2010, 27(6): 459-462. DOI:10.3969/j.issn.1673-6338.2010.06.017 |
[10] |
周峰, 龚光红, 王露. 道路矢量简化的自动阈值算法研究. 中国体视学与图像分析, 2014, 19(2): 155-161. |
[11] |
李朝奎, 骆文芳, 陈果, 等. 渐进式改进的线要素简化算法探讨. 测绘科学, 2015, 40(11): 123-126. |
[12] |
张志伟, 暴景阳, 肖付民, 等. 基于Ping的Douglas-Peucker法抽稀阈值优化选取. 海洋测绘, 2015, 35(2): 9-12. DOI:10.3969/j.issn.1671-3044.2015.02.003 |
[13] |
赵永清. 自动设置阈值的道格拉斯-普克压缩法. 山西煤炭管理干部学院学报, 2013, 26(3): 120-122. DOI:10.3969/j.issn.1008-8881.2013.03.051 |
[14] |
Ai TH, Ke S, Yang M, et al. Envelope generation and simplification of polylines using delaunay triangulation. International Journal of Geographical Information Science, 2017, 31(2): 297-319. DOI:10.1080/13658816.2016.1197399 |
[15] |
乔俊军, 胡冯伟. 一种线状要素深度简化方法. 测绘通报, 2016(7): 48-54. |
[16] |
王丽娜, 江南, 李响, 等. Cartogram表示方法研究综述. 计算机辅助设计与图形学学报, 2017, 29(3): 393-405. DOI:10.3969/j.issn.1003-9775.2017.03.001 |
[17] |
钱海忠, 何海威, 王骁, 等. 采用三元弯曲组划分的线要素化简方法. 武汉大学学报·信息科学版, 2017, 42(8): 1096-1103. |
[18] |
杜佳威, 武芳, 巩现勇, 等. 采用双向斜拉式弯曲划分的曲线渐进化简方法. 中国图象图形学报, 2017, 22(10): 1455-1466. |
[19] |
顾腾, 陈晓勇, 刘成强. 一种Douglas-Peucker与Li-Openshaw结合改进的曲线化简方法. 东华理工大学学报(自然科学版), 2016, 39(4): 396-400. DOI:10.3969/j.issn.1674-3504.2016.04.015 |
[20] |
Levitin A. 算法设计与分析基础. 潘彦, 译. 3版. 北京: 清华大学出版社, 2015. 35–132.
|
[21] |
Kulik L, Duckham M, Egenhofer M. Ontology-driven map generalization. Journal of Visual Languages & Computing, 2005, 16(3): 245-267. |
[22] |
何津, 费立凡. 再论三维Douglas-Peucker算法及其在DEM综合中的应用. 武汉大学学报·信息科学版, 2008, 33(2): 160-163. |