如何简化样条曲线?

时间:2016-05-29 18:31:36

标签: algorithm interpolation geospatial smoothing spatial-interpolation

我正在研究的项目中有一个有趣的算法挑战。我有一个排序的坐标点列表,指向街道两侧的建筑物,这些建筑物已经足够放大,看起来像这样:

enter image description here

我想采取这种曲折并将其平滑以使基础街道线性化。

我可以想到几个解决方案:

  1. 使用六个左右的滚动平均值计算质心,并使用它们。
  2. Spline regression
  3. 有没有更好或最好的方法来解决这个问题? (我使用的是Python 3.5)

2 个答案:

答案 0 :(得分:7)

根据您的说明和评论,您正在寻找线条简化算法

enter image description here

Ramer-Doublas算法(在评论中建议)很可能是这个家族中最知名的算法,但还有更多。

例如Visvalingam’s algorithm通过删除具有最小变化的点来工作,该变化由三角形的最小平方计算。这使得编码和直观易懂变得非常容易。如果难以阅读研究论文,您可以阅读this简单文章。

此系列中的其他算法包括:

了解它们,了解它们试图缩小的范围并选择最适合您的。

答案 1 :(得分:0)

Dali的帖子正确地推测线简化算法对此任务很有用。在发布这个问题之前,我实际上检查了一些这样的算法,但是对它们不太满意,因为即使它们导致了我喜欢的简化几何,它们也没有直接解决我在点的任何一侧的问题。功能,永远不会在中间。

因此我使用了两个步骤:

  1. 我通过使用五个周围点的坐标的滚动平均值来计算折线的质心。这对于平滑功能没有多大帮助,但它确实成功地将它们重新映射到了街道的中间。
  2. 我将Visvalingam的算法应用于新的折线,指定了n=20个点(使用this精彩实现)。
  3. 结果并不完美,但足够好了:

    enter image description here

    感谢大家的帮助!