5

我正在尝试和我的一些朋友一起做一个项目,我们遇到了这个问题:

假设我必须以编程方式破译这个迷宫,我该怎么做呢?当我试图通过图像识别解决迷宫时,我的第一个决定显然是简单地绘制开放路径,这样油漆结束(迷宫开始处的箭头是为识别提供一种方式来看到“好的,这就是开始” ) 表示退出。

问题是,有了这些过滤器,我无法绘制它,我也不知道如何解决它。那么,Open CV 有什么办法吗?(或任何其他选项也可以,如果可能的话)

我真的不知道如何解决这个问题,所以如果可能的话,只需指出一个选项的方向,我会对此进行更多研究。

非常感谢。

4

4 回答 4

16

为简单起见,考虑一个颜色空间,它提供了一个通道,在该通道中这种噪声被渲染为无用。例如,如果我们从中获取S通道,HSB我们会得到左边的图像,它很容易被 Otsu 二进制化——右边的图像。

在此处输入图像描述 在此处输入图像描述

请注意,在较高的手动阈值下,我们将只获得终点和起点。通过这样做,我们可以扩大这些点(左图)并将结果图像添加到右上角的图像。现在,如果使用左侧的图像作为标记在此生成的图像中执行测地线膨胀,我们将获得连接至少两个点的路径——右侧的图像。

在此处输入图像描述 在此处输入图像描述

可以通过简单的模板匹配找到起点,从而消除不包含起点的路径。这给出了下一个图像。现在您所要做的就是以广度优先的方式执行泛洪填充,以获得从起点到某个出口点的最小路径。

在此处输入图像描述

于 2013-02-19T03:41:59.253 回答
1

解决迷宫的一个有趣方法可能是查看任何迷宫的墙壁都会构成连接组件的事实。如果只有一个出口,那么迷宫墙可以分成两部分,沿着入口和出口之间的路径连接。由于有几个出口,这个迷宫分成几个连接的组件。

通过对图像执行一些非常基本的阈值处理,我能够将其简化为墙壁为黑色而路径为白色的简化版本。通过在墙壁的每个大连接部分进行洪水填充,我得到了一些看起来像这样的东西。

您可以通过沿着以不同颜色为边界的路径找到从一个点到另一个点的路径。这似乎在岛上有一个故障模式,您可以在 A 出口看到,但从入口到 D 的路径非常清晰。

于 2013-02-19T03:19:16.277 回答
0

这个答案只是对上述答案的补充:有一种简单的方法可以解决迷宫。它被称为“右手法则”。当你进入一个迷宫时,你把你的右手放在右边的墙上,然后就走了。永远不要放开正确的墙,你最终会找到出路。换句话说,当有交叉路口时,总是向右转(否则你的右手会失去对墙的抓地力)。当你走到死胡同时,让 U 向左转(因此总是接触右墙)。

根据这个原理实现一个算法。当您面向前方时,请始终确保右侧的相邻像素是迷宫墙。

于 2013-02-20T11:33:13.860 回答
-1

我相信您在谈论“寻路”

维基百科条目有一个在网格上查找路径的简单算法:http ://en.wikipedia.org/wiki/Pathfinding但谷歌搜索应该以您选择的语言提供一些代码示例。

于 2013-02-19T02:19:33.957 回答