【问题标题】:Find an Image within an Image在图像中查找图像
【发布时间】:2023-03-22 10:18:01
【问题描述】:

我正在寻找在另一个图像中检测图像的最佳方法。我有一张小图像,想找到它出现在更大图像中的位置 - 这实际上是屏幕截图。从概念上讲,它就像一个“沃尔多在哪里?”在更大的图像中进行搜索。

是否有任何有效/快速的方法来完成此任务?速度比记忆更重要。

编辑:

“内部”图像可能并不总是具有相同的比例,但会具有相同的旋转。

假设图像将完美地包含在另一个像素中是不安全的。

【问题讨论】:

标签: java python image


【解决方案1】:

您可以将此视为子字符串问题,其中字母表中的字符是像素,而您的字符串是图像。您还需要使用与换行符类似的特殊字符来表示图像边界。

你想要的算法在维基百科上:http://en.wikipedia.org/wiki/Knuth%E2%80%93Morris%E2%80%93Pratt_algorithm

更新:如果您不能假设图像完全包含在另一个像素中,那么这种方法将不起作用。

还有其他更复杂的算法基于与上述相同的动态规划概念,但除非必要,否则我不会深入探讨。

【讨论】:

  • 如果图像是 JPEG,你会头疼 :-)
  • 是的。这是一个非常非常好的观点。如果您不能假设完美匹配,那么“最佳”的概念因为困难和“高效/快速”变得困难。你需要做一些基于能量最小化/动态规划的事情
  • 投了反对票,因为这样的方法在图像上根本不起作用。
  • @Owen 你能给我一些关于如何处理换行符的提示吗?我目前正在进行逐像素搜索,类似于第一个答案中维基百科模板匹配链接中的示例代码,并且它需要永远。有人建议我研究 Horspool 算法,该算法看起来与您的 KMP 算法执行相同的字符串搜索。另外,JPEG 有什么问题?
【解决方案2】:

维基百科上有一篇关于Template Matching 的文章,附有示例代码。

(虽然该页面不处理更改的比例,但它具有指向其他匹配样式的链接,例如Scale invariant feature transform

【讨论】:

【解决方案3】:

如果还必须考虑轮换,可以使用Generalised Hough Transform

【讨论】:

    猜你喜欢
    • 2013-07-28
    • 2013-11-25
    • 1970-01-01
    • 1970-01-01
    • 2012-11-19
    • 2023-04-05
    • 2011-06-27
    • 1970-01-01
    相关资源
    最近更新 更多