我正在尝试与我的一些朋友做一个项目,我们发现了:
说我必须以编程方式解释这个Labyrinth,我怎么能继续这样做呢?我试图通过图像识别来解决迷宫时的第一个决定显然只是绘制开放的路径,这就是绘画结束(迷宫开始处的箭头是为了提供识别的方式,看到'确定这是开始' )表示退出。
问题是,有了那些过滤器,我无法绘制它,也没有任何关于如何解决它的想法。那么,使用Open CV会有什么办法吗? (或任何其他选择也可以,如果可能的话)
我真的不知道如何解决这个问题,所以如果可能的话,请指出我选择的方向,我会对此进行更多的研究。
非常感谢。
答案 0 :(得分:16)
为简单起见,请考虑一个颜色空间,该颜色空间为这种噪声提供了无用的通道。例如,如果我们从S
获取HSB
频道,我们会在左侧获得图像,这很容易被Otsu图像化 - 右图。
请注意,在较高的手动阈值下,我们只会获得终点和起点。通过这样做,我们可以扩大这些点(左图)并将结果图像添加到右上图像。现在,如果使用左边的图像作为标记在此结果图像中执行测地扩张,我们将获得连接至少两个点的路径 - 右图像。
可以通过简单的模板匹配找到起点,因此可以消除不包含起点的路径。这给出了下一个图像。现在,您所要做的就是以广度优先的方式执行洪水填充,以获得从起点到某个出口点的最小路径。
答案 1 :(得分:1)
解决迷宫的有趣方法可能是看看任何迷宫的墙壁都是连接组件的事实。如果只有一个出口,则迷宫墙可以分成两个部件,这两个部件沿入口和出口之间的路径连接。由于有几个出口,这个迷宫会分成几个相连的组件。
通过对图像执行一些非常基本的阈值处理,我能够将其缩小为简化版本,其中墙壁为黑色且路径为白色。通过洪水填充墙的每个大的连接部分我得到了looks like this。
您可以通过跟随两侧以不同颜色为边界的路径,找到从一个点到另一个点的路径。这似乎在A出口处可以看到岛屿周围的故障模式,但从入口到D的路径非常清楚。
答案 2 :(得分:0)
这个答案只是上述答案的补充: 有一种简单的方法来解决迷宫。它被称为“右手的规则”。 当你进入迷宫时,你将右手放在右墙上然后就走了。永远不要放开正确的墙,你最终会找到出路。换句话说,当有一个十字路口时,总是向右转(否则你的右手会失去一个墙的抓地力)。当你走到死胡同时,让你向左转(因此总是碰到右墙)。
根据此原则实施算法。当你面向前方时,一定要确保右边的邻居像素是迷宫墙。
答案 3 :(得分:-1)
我相信你在谈论'寻路'
Wikipedia条目有一个简单的算法来查找网格上的路径:http://en.wikipedia.org/wiki/Pathfinding但谷歌搜索应该以您选择的语言提供一些代码示例。