我有一张黑白(二进制)图片。它包含一组黑色斑点,周围是白色。我正在尝试编写一个C#程序,它将找到一条穿过所有阴影区域的路径,同时尽可能多地留下白色区域。这与为任何给定图层找到3D打印机的工具头路径非常相似;它需要填充实体部分,而只需要在需要到达另一个单独的blob时进入空白区域。
例如,这是我创建的测试图像,其中包括我面临的大多数挑战(为简单起见,只有两个blob):
我想找到一条穿过所有黑色区域的路径,而只穿过白色一次,在两个形状之间跳跃(它们最接近的地方)。我也希望路径尽可能短。
我的程序是用C#编写的,到目前为止我已经使用AForge进行图像处理,所以我已经可以访问它了。
到目前为止,我得到的最接近的是类似洪水填充的算法。它将从一个角落开始,找到最近的像素(水平第一个,然后垂直),继续路径。但是这些路径并不总是到处都是,而且越过这种路径通常会形成一条漫长且无关紧要的道路。我也试着追踪边缘并向内移动,但是当一个blob有一个非直线路径时它仍然不能很好地工作。搜索也没有提出太多;我尝试搜索与3D打印算法,洪水填充等有关的事情,但没有多少提出来。
那么,我该如何解决这个问题?
答案 0 :(得分:2)
填充blob
blob之间的动作
答案 1 :(得分:1)
在黑色区域缩小到点的情况下,这似乎变成了旅行商问题,所以我怀疑没有简单的答案。
这向我建议你计算出所有黑色区域对之间的最近距离,然后对该距离矩阵上的旅行商问题使用一些近似解。搜索找到http://cgm.cs.mcgill.ca/~orm/mind2p.html中描述的最近距离算法。我们想到的TSP近似算法是基于http://en.wikipedia.org/wiki/Minimum_spanning_tree的算法,以及基于比特奇旅行的算法 - 例如在http://www.cs.helsinki.fi/u/jwkangas/daaa2013/sol-II.pdf。