我有一个栅格网格的值看起来像下面的图像(白色是高值,黑色背景值是零)。
我尝试编写某种路径跟踪代码,从其中一行的末尾开始并跟踪到另一端,通过最高可能的值(即选择的像素越白)在线上越好越好但仍然到了另一端。
我已经在这方面苦苦挣扎了一段时间,似乎无法得到任何我努力工作的东西。所以我想知道,是否已针对此类问题开发了通用算法?我已经做了很多搜索,但是大多数路径算法似乎都设计用于矢量/网络,而不是像这样的栅格网格。
有什么想法吗?
答案 0 :(得分:8)
最简单的想法可能是使用A* algorithm,其中每个像素都是一个节点,节点的成本就是像素的黑暗。
更新:找到一个不错的tutorial。
答案 1 :(得分:2)
一种方法:
需要一些调整才能让它运作良好,但是可以这样做。另一个变体是勾勒白色部分,如果它们宽于1或2或3个像素,并在之后组合双线。
答案 2 :(得分:1)
我认为你不需要遗传算法或任何荒谬的东西;良好的旧时尚递归和动态编程应该足够了。我最初在想,你应该能够通过广泛的第一次搜索来实现你的目标。从您的起点开始,您访问所有邻居,其分数大于该路径值 - 所有单元格从无限远开始,黑色单元格的成本将是无穷大,这些是您可以修剪的路径)。到达目的地后,如果可以到达,您应该能够回溯以找到路径。它是贪婪的,但如果你的路径表现得像这些,它应该没问题。
对于具有更多灰色和曲折的路径,将栅格图像转换为图形可能是个好主意,边缘权重是邻居的灰度值(或灰度值的差异,取决于这个数据实际意味着什么)。因此,您应该能够根据该解释使用任何算法来获得最短路径。
答案 3 :(得分:1)
如果您正在大规模地进行研究或进行研究,您可以尝试使用http://en.wikipedia.org/wiki/Ant_colony_optimization,但如果您这样做是为了赚钱,只需选择洪水填充http://en.wikipedia.org/wiki/Flood_fill