【问题标题】:Raster path following algorithms光栅路径跟踪算法
【发布时间】:2010-12-03 20:58:21
【问题描述】:

我有一个类似于下图的栅格值(白色是高值,黑色背景值为零)。

我正在尝试编写某种路径跟踪代码,从其中一行的末尾开始并跟踪到另一端,通过可能的最高值(即,选择的像素越白在这条线上更好)但仍然到达另一端。

我已经为此苦苦挣扎了一段时间,似乎无法得到任何我尝试工作的东西。所以我想知道,是否已经针对此类问题开发了通用算法?我做了很多搜索,但大多数路径算法似乎都设计用于矢量/网络,而不是像这样的栅格网格。

有什么想法吗?

【问题讨论】:

  • 这是一个经典的成本距离问题,已经为栅格数据开发了很多次。例如,在 R 中,您可以使用 gdistance 包。
  • 谢谢@RobertH - 这看起来像一个有用的包。我仍在苦苦挣扎的一点是,当我不一定知道线条的起点和终点在哪里时如何做到这一点:也就是说,我也必须识别线条的终点!如果您对此有任何想法,请告诉我。
  • 可能是这样,假设白色是大于 250 的值:r <- raster('file'); start <- which(r[1,] > 250); end <- ncell(r) -ncol(cell) + which(r[nrow(r), ] > 250) 从开始到结束,您可以计算坐标,如xyFromCell(r, start)

标签: algorithm raster


【解决方案1】:

最简单的想法大概是使用A* algorithm,其中每个像素就是一个节点,节点的代价就是像素暗度。

更新:找到一个不错的tutorial

【讨论】:

    【解决方案2】:

    一种方法:

    1. 过滤图像以使其更接近仅黑白像素。
    2. 在白色像素之间画一条线。为此,请从一个白色像素开始。从该像素到其他白色像素之间画一条线,距离为 2(或 3 左右),但忽略前一条线附近的像素。继续前进,直到您覆盖了与一条线不相近的每个像素(2 或 3 个像素)。您必须在此处进行一些小调整才能使其正常工作。
    3. 连接已绘制线条的端点。如果有两个端点彼此靠近(1 或 2 像素?),将它们连接起来。您最终应该得到由许多短段组成的几行,可能带有一些循环和分叉。
    4. 去除线条中的任何小环,并在分叉处分隔线条,这样您就有了由许多短段组成的几条线。
    5. 减少分数。对于每条线,检查它是否几乎是直的。如果是这样,请删除所有内部点。如果不是,请递归检查线的两半,直到达到最小线段长度。
    6. 您可以选择通过该点拟合一条样条曲线。
    7. 利润。

    需要进行一些调整才能使其正常工作,但可以通过这种方式进行。另一种变体是勾勒出白色部分,如果它们的宽度超过 1 或 2 或 3 个像素,然后将双线组合起来。

    【讨论】:

      【解决方案3】:

      我认为您不需要遗传算法或任何可笑的东西;好的老式递归和动态编程就足够了。我最初的想法是,您应该能够通过进行广度优先搜索来实现您的目标。从您的起点开始,您访问所有得分高于路径值的邻居——所有单元格从无穷大开始,黑色单元格的成本将是无穷大,这些是您可以修剪的路径)。一旦到达目的地,如果可以到达,您应该能够回溯以找到路径。这是贪婪的,但如果你的路径表现得像这样,那应该没问题。

      对于具有更多灰色和曲折的路径,将光栅图像转换为图形可能是个好主意,边缘权重是邻居的灰度值(或灰度值的差异,取决于关于这些数据的实际含义)。因此,您应该能够根据该解释使用任何算法来获得最短路径。

      【讨论】:

      • 感谢您的回复。抱歉 - 我的意思是一种通用算法,它适用于各种寻路问题,而不是专门针对某些特定问题的算法。我将研究广度优先搜索。
      • Opps... 这就是您整天盯着屏幕时会发生的事情。当 1/I/l 或 o/0 混淆时,你有字体问题,当 r/t 混淆时,你有精神问题。但在这种情况下,一旦将光栅图像转换为图形,或将其视为图形,您应该能够使用任何最短路径算法。
      【解决方案4】:

      如果您是大规模这样做或进行研究,您可能会尝试使用 http://en.wikipedia.org/wiki/Ant_colony_optimization,但如果您这样做是为了赚钱,请选择类似洪水填充 http://en.wikipedia.org/wiki/Flood_fill

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-05-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多