Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 寻找一个;关于点连接的闭合曲线;算法_Algorithm_Image Processing - Fatal编程技术网

Algorithm 寻找一个;关于点连接的闭合曲线;算法

Algorithm 寻找一个;关于点连接的闭合曲线;算法,algorithm,image-processing,Algorithm,Image Processing,我正在寻找一个算法,可以连接点一起连续曲线。想象从a点到b点到c点一直画到最后一点,当你从一点到另一点画时,这条线必须是一条曲线,并且相对于上一点和下一点是连续的,就好像给定的点只是一个闭环的样本一样。请参见下图进行说明 有这样的算法吗 *图中的圆圈是我的点列表。问题与非常类似,您可以扩展用于解决该问题的一些算法,以适合您的情况 例如,进化算法很容易适应,你会发现很多关于使用它们来解决TSP的参考资料。鉴于你的点是有序的,样条插值肯定是最好的方法。(正如bo1024的评论所示)我强烈推荐以下注

我正在寻找一个算法,可以连接点一起连续曲线。想象从a点到b点到c点一直画到最后一点,当你从一点到另一点画时,这条线必须是一条曲线,并且相对于上一点和下一点是连续的,就好像给定的点只是一个闭环的样本一样。请参见下图进行说明

有这样的算法吗


*图中的圆圈是我的点列表。

问题与非常类似,您可以扩展用于解决该问题的一些算法,以适合您的情况


例如,进化算法很容易适应,你会发现很多关于使用它们来解决TSP的参考资料。

鉴于你的点是有序的,样条插值肯定是最好的方法。(正如bo1024的评论所示)我强烈推荐以下注释:

具体来说,这里的部分与获得您要求的闭环最相关:

编辑:如果曲线必须通过这些点,则唯一的n次解是拉格朗日插值多项式。您可以使用wiki页面上的公式为点向量的每个分量制作一个多项式:

不幸的是,如果你有太多的点,拉格朗日插值会非常嘈杂。因此,我仍然建议使用一些固定阶样条插值。代替B样条曲线,另一个选项是Hermite多项式:


这将保证曲线通过这些点。要获得闭合曲线,在求解系数时,需要重复曲线的前d点,其中d是用于近似点的Hermite样条的阶数。

您可能会发现样条很有用:这些点是有序的还是无序的?@Mikola:这些点总是有序的。@bo1024:您可能希望将您的注释作为答案之一放入。让我给你点建议。这篇文章似乎被否决了。我会贴在这里,如果卡尔喜欢的话,我会贴在这里作为答案。如果你的形状几乎保证是一个凸形,那么基本上你是在所有顶点中寻找前2个“最短”边。比如说,最上面的顶点有一条到所有其他顶点的边,您可以通过查找“最短”的2条线(或边)来建立前两条线(或边)。然后,对于下一个节点,再次执行此操作,直到满意为止。这种方法会收敛(一个示例标准是边缘的总距离)。我认为这不相关…?@Karl:以前,你没有说过必须按预定义的顺序访问点。谢谢你的建议。在这种情况下,样条曲线将相对于点弯曲,但我要求曲线必须通过每个点。:)@卡尔:好的,更新了解决方案以反映这一最新信息。@Mikole:Lagrange多项式不适合这种问题,因为它们往往是不稳定的(请参阅),而且还有闭合点的问题。@salva:好的,如果你看一下当前的答案,我只把它们作为一个选项放在那里。我想我写了一些半文字的东西,我对它们的使用少了一点轻蔑,我在匆忙编辑时不小心把它们贴了出来。但你是对的,龙格现象会导致它们对任意点数据非常嘈杂。