【问题标题】:trace patterns such that each node is visited only once(eulerian path) using opencv跟踪模式,使得每个节点只被访问一次(欧拉路径)使用 opencv
【发布时间】:2017-11-07 17:36:15
【问题描述】:

这是我整整一年以来一直在努力解决的问题。直到年底都没有成功。我必须向 stackoverflow 专家寻求帮助和具体的解决方案。

我的问题陈述:

我一直在研究一些设计模式,如果欧拉路径存在(如下图所示),我想以编程方式进行跟踪。以下是图案和我想要绘制它们的方式(gif)。

我想要实现的目标:

将设计模式图像作为输入。我想在一个笔画中跟踪设计模式图像,如 gif 中所示(gif 动画只是如何在一个笔画中绘制图案的示例)。一旦我以单笔方式(欧拉路径)获得图像的 x 和 y 坐标。我会将这些坐标提供给我的程序以跟踪这些坐标。

动画中的注意事项:

1) 基本上它是一个未被检测到的图形(节点是形状的顶点,如果存在边是 2 个顶点之间的笔划)。 (欧拉路径)

以下是我用来构建图案的 15 种独特形状:

我有超过 400 种模式(下面已经显示了 3 种模式),直到现在我无法找到一个通用的解决方案。 我已经手动获取了图案的 x y 坐标并按顺序放置。但这根本不是可扩展的。

如何跟踪模式使得每个节点只被访问一次?

第一种图案及其绘制方式:

第二种图案及其绘制方式:

第三种图案及其绘制方式:

【问题讨论】:

  • 1.您尝试过的代码在哪里? 2. 我们应该如何理解那些应该驱动你想要完成的任何事情的规则?这听起来像是一个谜,而不是一个可以回答的问题。
  • 您基本上已经有一个未检测到的图形(节点是形状的顶点,如果存在边是两个顶点之间的笔划)。检查是否存在 eulerian path 就完成了
  • I'm not assuming ;) @zind
  • 你可能会问:如何跟踪模式以使每个节点只被访问一次?
  • 然后@Miki 关于欧拉路径的评论就成立了。选择任意一点,检查是否存在欧拉路径,如果存在则终止,如果不存在则选择另一个点并重复。

标签: opencv bioinformatics biopython


【解决方案1】:

如果您仍在为上述问题苦苦挣扎,也许您可​​以研究旅行推销员问题。 TSP 只访问城市一次。如果在您的情况下,每个节点都是您删除线的交叉点,那么这可能会有所帮助。

检查here 以查看要查看的python 代码。我已经检查过了,打印语句看起来不错且结构化。干得好 cMinor!

根据讨论进行编辑:file 1file2file3

【讨论】:

  • TSP 用于访问所有城市,以使旅行距离最短。但我试图在模式中找到欧拉路径。这将帮助我在不抬起指针或光标的情况下单笔追踪图案。
  • 我的错。在这种情况下,我认为“节点”是两个(400 个)瓦片之间的交叉点/连接。你能在你的图像制造过程中计算出正方形的数量吗?如果是这样,那么在您的画布 3x3 和 4x4 瓷砖中应该只绘制一个正方形。如果您的画布是 5x5 或更大,则至少一个瓷砖的两个正方形之间应该有一个空间距离。否则你会重叠。将其包含在您的代码中以避免和您的安全。然后可以使用任何 x,y 点来开始单笔画。如果用于五边形和六边形,也适用此规则;和他们之间的偏离路线。
  • 检查这个答案stackoverflow.com/a/47115316/5008845 这给了我图像中的所有正方形。感谢@Miki
  • 如果您查看unique tiles 的图块 1,水滴状的曲线是否与想象中的正方形的边相接触?如果是这样,请制作一个弯曲不接触侧面的新图形;只有将与另一个图块中的黑线互连的尖点。如果您对所有内容都执行此操作,则可以覆盖它并使用已定义的参数搜索正方形大小。这样你就可以得到正方形的轮廓(也就是第一个像素行)。在正方形 bgr(0,0,0) 的三个边和第 4 边,你会在某处看到一堆 (bgr(255, 255, 255) 像素。
  • 计算它的中心,你就得到了图中那个particar tile的节点坐标。对所有其他人也这样做,你很容易到达那里。将 x,y 与下一个图块数据的比较,在某些情况下,您会发现坐标 x1 = x2 或 y1 = y2 相似。瞧,你得到了你的连接点/节间。
猜你喜欢
  • 2020-05-24
  • 1970-01-01
  • 2017-07-28
  • 1970-01-01
  • 2018-10-21
  • 1970-01-01
  • 2015-11-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多