光栅路径遵循算法

时间:2010-12-03 20:58:22

标签: algorithm raster

我有一个栅格网格的值看起来像下面的图像(白色是高值,黑色背景值是零)。

RasterGridExample

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

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

有什么想法吗?

4 个答案:

答案 0 :(得分:8)

最简单的想法可能是使用A* algorithm,其中每个像素都是一个节点,节点的成本就是像素的黑暗。

更新:找到一个不错的tutorial

答案 1 :(得分:2)

一种方法:

  1. 过滤图像,使其更接近黑白像素。
  2. 在白色像素上画一条线。为此,请从白色像素开始。从该像素到彼此距离为2(或3左右)的白色像素绘制一条线,但忽略前一行附近的像素。继续前进,直到你覆盖了一条线上不接近(2或3个像素)的每个像素。你必须在这里做一些小的调整才能让它运作良好。
  3. 连接您绘制的线条的端点。如果有两个端点(1或2个像素?),则连接它们。你应该最终得到一些由很多短段组成的线,可能还有一些循环和分叉。
  4. 摆脱线条中的任何小环,并将线条分成叉子,这样你就会有很多由短段组成的线条。
  5. 减少积分。对于每一行,检查它是否几乎是直的。如果是这样,请删除所有内部点。如果没有,请以递归方式检查该行的两半,直到达到最小段长度。
  6. 您可以选择在此时通过线条拟合样条曲线。
  7. 利润。
  8. 需要一些调整才能让它运作良好,但是可以这样做。另一个变体是勾勒白色部分,如果它们宽于1或2或3个像素,并在之后组合双线。

答案 2 :(得分:1)

我认为你不需要遗传算法或任何荒谬的东西;良好的旧时尚递归和动态编程应该足够了。我最初在想,你应该能够通过广泛的第一次搜索来实现你的目标。从您的起点开始,您访问所有邻居,其分数大于该路径值 - 所有单元格从无限远开始,黑色单元格的成本将是无穷大,这些是您可以修剪的路径)。到达目的地后,如果可以到达,您应该能够回溯以找到路径。它是贪婪的,但如果你的路径表现得像这些,它应该没问题。

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

答案 3 :(得分:1)

如果您正在大规模地进行研究或进行研究,您可以尝试使用http://en.wikipedia.org/wiki/Ant_colony_optimization,但如果您这样做是为了赚钱,只需选择洪水填充http://en.wikipedia.org/wiki/Flood_fill

相关问题