匹配的拼图块

时间:2010-06-26 17:50:12

标签: image pattern-recognition

我没有什么有用的东西可以玩这样的拼图游戏:

alt text http://manual.gimp.org/nl/images/filters/examples/render-taj-jigsaw.jpg

我想知道是否有可能制作一个帮助我把它组合在一起的程序。

想象一下,我有一个小拼图,比如4x3件,但是小的标签和空白是不均匀的 - 不同的部件有不同高度,不同形状,不同尺寸的这些标签。我要做的是拍摄所有这些片段,让程序分析它们并将它们的属性存储在某个地方。然后,当我拿起一块时,我可以让程序告诉我哪些碎片应该是它的“邻居” - 或者如果我必须填写一个空白,它会告诉我想要的拼图是怎么回事看。

不幸的是我从来没有对图像处理和模式识别做过任何事情,所以我想问你一些指示 - 如何识别拼图(基本上是一个带有标签的方块和洞)在图片中

然后我可能需要旋转它以使其处于正确位置,按比例缩放,然后测量每侧的标签/空白,以及每侧的斜率(如果存在)。

我知道扫描/拍摄1000件拼图并使用它会花费太多时间,这只是一个宠物项目,我会学到新东西。

2 个答案:

答案 0 :(得分:4)

数据获取

(这称为色度键,蓝屏或背景颜色方法)

  1. 找一间光线充足的房间,整个房间的灯光变化最小。
  2. 找到整个拼图/图片中很少使用的颜色(色调)。
  3. 获取具有完全相同颜色的彩色纸张。
  4. 在彩色纸上放置尽可能多的拼图。
    • 您可以将谜题分类,然后将其用作计算机提示。
    • 确保碎片不重叠或相互接触。
    • 不要担心方向。
  5. 拍照并下载到电脑。
    • 可能需要进行颜色校准,因为色度键背景可能会扰乱数码相机的内置色彩平衡。
  6. 采集数据处理

    1. 获取一些计算机视觉软件
      • OpenCV,MATLAB,C ++,Java,Python Imaging Library等
    2. 对图像上的色度键颜色执行连通分量。
      • 询问连接组件的 hole 的轮廓,这些是拼图。
    3. 修复检测到的列表中的错误。
    4. 选择indexing vocabulary(参见Ira Baxter的帖子)并测量碎片。
      • 如果碎片是矩形,请先找到角落。
      • 如果这些部件是四边形的,那么边长(从角到角测量)也是一个很有价值的标志。
      • 在SO或Googlehere上搜索“形状背景”。
      • 最后,获取该片段的颜色直方图,以便稍后可以按颜色查询片段。
    5. 要使它们可搜索,请将它们放在数据库中,以便您可以使用索引词汇表的任意组合查询片段。

答案 1 :(得分:2)

回到问题本身。构建拼图的问题可以是简单的(P)或硬的(NP),这取决于这些部分是否仅适合一个邻居或多个邻居。如果每个边缘只有一个适合,那么你只需找到它的邻居和你的邻居就完成了(O(#pieces * #side))。如果某些部分允许多个匹配到不同的邻居,那么,为了完成整个拼图,您可能需要回溯(因为您做出了错误的选择并且您被卡住了)。

然而,要解决的第一个问题是如何表示作品。如果要表示任意形状,则可以使用透明度或蒙版来表示图块的哪些区域实际上是该块的一部分。如果你使用方形,那么问题可能会更容易。在后一种情况下,您可以考虑方块两侧的最后一行像素,并将其与您在其他所有部分中找到的最相似的像素行进行匹配。

你可以使用第二种方法来实际帮助你解决一个真正的谜题,尽管你使用方形瓷砖。真正的谜题通常建立在NxM网格上。从框中扫描图像时,将其拆分为方形图块的相同NxM网格,并让系统解决该问题。然后问题是用系统内的瓷砖(当它们很小并且均匀着色时)在视觉上映射你手中拿着的实际波浪形块。但如果你在内部表示任意形状,你会遇到同样的问题。