离散曲线进化算法

时间:2010-03-22 07:35:02

标签: c++ algorithm opencv computer-vision

我试图在c ++中实现离散曲线演化算法做任何人帮助我使用psudo代码或c代码或 一些简单的理解步骤

2 个答案:

答案 0 :(得分:2)

离散曲线演化是一种算法,用于从凹陷的曲线计算到处的凸曲线。它以不连续的步骤沿着它们的法线向外移动曲线的凹面部分,直到消除所有凹面。它不是遗传算法,术语进化是指随着时间的推移“演变”曲线的位置。

在搜索了这段时间后,互联网上的最佳来源是: http://www.cis.temple.edu/~latecki/Programs/skeletonPruning07.htm

这是matlab代码,所以它不是你想要的,但你有三个不错的选择:

  1. 将它移植到C ++(只要它不使用矩阵prims,通常不会很难用matlab。)
  2. 包装matlab代码,以便您可以从C调用它(matlab提供库来执行此操作)
  3. 将其编译为可执行文件并从C调用(matlab也允许这样做)
  4. 选项2将要求任何想要运行它的人在他们的计算机上拥有matlab动态库的副本,这可能是不合需要的。我猜选项3也需要这个,但我只有选项1和2的经验。将matlab移植到c ++通常不是那么糟糕;它取决于代码利用矩阵基元和矩阵运算多少,这些基本原语和矩阵运算在matlab中易于使用,在C ++中很难使用(因为它们不是内置的)。不过,我建议给它一个旧的大学尝试!

    如果您只是在寻找DCE,请查看文件evolution.m。这是实现DCE的功能。这个来自的完整骨架修剪算法只能在高级别上进行描述。各个步骤和部分是QUITE复杂的,DCE只是其中的一小部分。

    希望这有帮助!我将自己使用这段代码,所以如果我最终以某种方式在C ++中使用它可以帮助你,我会告诉你。

答案 1 :(得分:1)

我不完全确定离散曲线进化算法的含义,但如果你的意思是符号回归算法,你可以先阅读符号回归(或一般的遗传编程):

http://en.wikipedia.org/wiki/Symbolic_Regression

还有一些不错的现有程序。 Eureqa有一个开放的API:

http://code.google.com/p/eureqa-api/