在3D数据中查找多个路径

时间:2015-10-06 18:18:08

标签: python image-processing graph-algorithm nearest-neighbor

问题

我有一组三维分散的数据点。我正在寻找方法来寻找满足一些约束条件的路径,尽可能多。

  1. 从一个点到另一个点应该通过Nearest Neighbors发生,即我想保持路径点之间的距离最小。
  2. 路径可以分享点数,但我也希望保持最小的分享。
  3. 分散数据中有一个平面,我希望所有路径都可以从这里开始。它们结束的地方并不重要,但我希望路径的大致方向远离平面,因此路径应仅包括平面的单个点。
  4. 所有积分应至少是一条路径的成员。
  5. 方法

    来自scikit的NearestNeighbors似乎适合生成一个可以逐点查询最近邻居的树。

    Q1:如何在欧几里得意义上包含一个接近度的加权方案,以及从$ p_ {n} $到$ p_的路径向量的意义上的接近度{n + 1} $与平面上的法向量接近平行?这是为了使路径远离平面移动的点的优先级。我知道我将使用的计算来测试向量的接近程度,但是我不知道如何将结果与欧几里德距离一起包括在内。

    Q2:是否有一种简单的方法可以让$ p_ {0} $始终位于平面上?

    基本算法

    1. 对所有点数进行编号并从点数中进行设置。
    2. 使用上述加权条件生成路径。
    3. 从编号的点集中删除路径中的点。
    4. 如果路径没有从集合中移除至少一个编号点,则弃掉路径。
    5. 重复2 - 4,直到编号为空。
    6. 对这个想法的任何想法?

1 个答案:

答案 0 :(得分:1)

这听起来像图算法案例。

似乎解决它的方法是创建有向图,其中节点是您拥有的点,并且对于每个节点,取M最近(选择您自己的)邻居并从节点创建边到邻居,边缘的重量应该是你所有喜好的组合。

例如,重量可以是:

   || Vi-Vj ||^2 * k
w=-----------------
      (Vj-Vi)N

其中Vi是当前节点,Vj是下一个节点。 k是最近邻居列表中的顺序(从1开始)。 N是平面法线。

这个想法是高欧氏距离增加了一个惩罚,一个不是最近的节点也增加了惩罚,如果方向不垂直于平面,分母中的点积会增加一个惩罚。

显然,这只是一个例子,应该根据您的需要进行调整。

当你有一个准备好的图表时,你可以在它上面运行路径查找算法(例如Dijkstra,Floyd等)

当您选择路径并希望影响下一个路径的选择时,您可以获取所有使用的节点,并增加通向这些节点的所有边的权重。