增量线简化

时间:2017-08-09 00:31:36

标签: algorithm line simplification douglas-peucker

互联网上有很多关于普通线路简化的信息,

https://www.jasondavies.com/simplify/

https://bost.ocks.org/mike/simplify/

http://geomalgorithms.com/a16-_decimate-1.html

http://mourner.github.io/simplify-js/

即。当简化点被预先知道时。 Visvalingam的算法,Douglas-Peucker算法,但是如果公差参数是固定的并且点是不知道的,那该怎么办呢。我有很多要点,我不想运行N * Log(N)算法一千次,而我希望它能逐步处理我的设置,交叉点并不重要,重点是减少数据集的大小,只有最小的视觉冲击,是否有一些聪明的方法来处理这个问题?

1 个答案:

答案 0 :(得分:0)

如果交叉点无关紧要,并且您需要的只是视觉相似性(可能是在光栅化之后并且ε接近像素大小),只需丢弃与减少的链足够接近的点就可以完成工作。

在伪代码中:

Let C be the original chain
Let R be the reduced chain (initially empty)

Add the first point of C to R
For every subsequent point p of C:
    If distance(p, the last point of R) >= ε:
        Add p to R

这种方法保证:

  • 简化链中每个细分的长度至少为ε
  • 链之间的Hausdorff距离最多为ε

它不能保证:

  • 缺少自我交叉
  • 任何一种最优性(可能有一个不同的链,在Hausdorff距离越近,点数越少)