【问题标题】:Solving a picture jumble!解决图片混乱!
【发布时间】:2010-07-04 04:00:08
【问题描述】:

如果你想解决图片混乱,你会让计算机使用什么算法?

您总是可以就算法的效率争论不休,但在这里我真的在看要遵循哪些方法。

谢谢

【问题讨论】:

  • “拼图”和拼图一样吗?
  • 拼图还是滑动拼图?
  • 我们可以假设(正如到目前为止发布的答案所做的那样)每条边都可以完全匹配另一条边吗?这大大简化了事情。

标签: algorithm image


【解决方案1】:

您需要做的是为拼图游戏的每个面定义一个索引词汇,这样右侧边缘的索引可以告诉您对应的左侧边缘的索引是什么(例如,一个简单的词汇:“convex”和“concave”,一个面上的“convex”表示匹配的对面的“concave”),然后根据索引词汇对每个片段进行分类。词汇量越精细,人脸匹配的区别就越大,你的算法就会越快,不管你是怎么实现的。 (例如,您可能有“平边、直边-左倾斜、直边-右倾斜、凹、凸、旋钮、旋钮孔……)。我们假设索引方案抽象了边缘的实际形状,并且只有当边缘完全匹配时才有谓词“完全适合(piece1,edge1,piece2,edge2)”。我们进一步假设一块最多有一个完全匹配具有特定的优势。

目标是增长一组区域,例如,一组连接的部分,直到不再可能增长这些区域。我们首先用唯一的区域名称标记所有片段,每个片段 1 个,并且所有边缘都标记为不匹配。然后我们以任何顺序枚举碎片边缘。对于每个带有边 E 的枚举片段 P,使用索引方案来选择可能匹配的片段/边缘对。检查完全适合的谓词;至多一块 Q,边为 F,完全匹配。将 P 和 Q 的区域组合在一起形成一个大区域。重复。我认为这解决了这个难题。

【讨论】:

    【解决方案2】:

    解决拼图游戏基本上可以简化为将相似的边缘匹配到相似的边缘。在真正的拼图游戏中,只有一对棋子可以沿着特定的边缘正确互锁,并且每个棋子都有角,以便您知道特定边的起点和终点。

    因此,只需找到每条边的端点并选择几个控制点。然后遍历所有边缘未绑定的部分,直到找到正确的部分。当没有更多未绑定的边缘时,您已经解决了这个难题。

    【讨论】:

      【解决方案3】:

      要详细说明 Ira Baxter 的答案,另一种概念化问题的方法是将拼图游戏视为一个图形,其中每一块都是一个节点,与另一块的每个接口都是一条边。

      例如,如果您正在设计一款益智游戏,以这种方式存储“答案”将使“检查是否适合”代码更快,因为它可以简化为某种哈希查找。

      【讨论】:

        【解决方案4】:

        .1 找到 2x2-grams 使得所有四个边都适合。然后,评估图像内容之间的匹配程度。

        P1 P2 ^ ^ | | v v P3 P4

        .2 标记orientations(手动或启发式),但仅将它们用作启发式分数(用于排名),而不是明确的搜索条件。

        .3 形状上下文

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-03-05
          • 2016-10-07
          • 2015-06-09
          相关资源
          最近更新 更多