我没有什么有用的东西可以玩这样的拼图游戏:
alt text http://manual.gimp.org/nl/images/filters/examples/render-taj-jigsaw.jpg
我想知道是否有可能制作一个帮助我把它组合在一起的程序。
想象一下,我有一个小拼图,比如4x3件,但是小的标签和空白是不均匀的 - 不同的部件有不同高度,不同形状,不同尺寸的这些标签。我要做的是拍摄所有这些片段,让程序分析它们并将它们的属性存储在某个地方。然后,当我拿起一块时,我可以让程序告诉我哪些碎片应该是它的“邻居” - 或者如果我必须填写一个空白,它会告诉我想要的拼图是怎么回事看。
不幸的是我从来没有对图像处理和模式识别做过任何事情,所以我想问你一些指示 - 如何识别拼图(基本上是一个带有标签的方块和洞)在图片中?
然后我可能需要旋转它以使其处于正确位置,按比例缩放,然后测量每侧的标签/空白,以及每侧的斜率(如果存在)。
我知道扫描/拍摄1000件拼图并使用它会花费太多时间,这只是一个宠物项目,我会学到新东西。
答案 0 :(得分:4)
数据获取
(这称为色度键,蓝屏或背景颜色方法)
采集数据处理
答案 1 :(得分:2)
回到问题本身。构建拼图的问题可以是简单的(P)或硬的(NP),这取决于这些部分是否仅适合一个邻居或多个邻居。如果每个边缘只有一个适合,那么你只需找到它的邻居和你的邻居就完成了(O(#pieces * #side))。如果某些部分允许多个匹配到不同的邻居,那么,为了完成整个拼图,您可能需要回溯(因为您做出了错误的选择并且您被卡住了)。
然而,要解决的第一个问题是如何表示作品。如果要表示任意形状,则可以使用透明度或蒙版来表示图块的哪些区域实际上是该块的一部分。如果你使用方形,那么问题可能会更容易。在后一种情况下,您可以考虑方块两侧的最后一行像素,并将其与您在其他所有部分中找到的最相似的像素行进行匹配。
你可以使用第二种方法来实际帮助你解决一个真正的谜题,尽管你使用方形瓷砖。真正的谜题通常建立在NxM网格上。从框中扫描图像时,将其拆分为方形图块的相同NxM网格,并让系统解决该问题。然后问题是用系统内的瓷砖(当它们很小并且均匀着色时)在视觉上映射你手中拿着的实际波浪形块。但如果你在内部表示任意形状,你会遇到同样的问题。