【发布时间】:2011-11-12 05:29:09
【问题描述】:
检查小图片是否包含在大图片中的最佳(最快)方法是什么?
(放大的图片:)
想找:
我有一个解决方案,但是速度很慢:
- 我遍历大图的每个像素 (x,y) 并比较小图的像素 (0,0)(颜色值)。
- 如果像素相同,我会遍历小图并与大图进行比较。如果失败,则返回大图扫描循环。
这种方法需要大约 7 秒才能在 1600x1200 的照片上找到 50x50 的图片。
也许你知道更好的算法?我知道一个软件可以在一秒钟内完成。
【问题讨论】:
-
认为它是一个字符串匹配。有几种可用的快速字符串匹配算法。见en.wikipedia.org/wiki/String_searching_algorithm。
-
@Captain 然而,减少到字符串匹配是非常重要的。我在字符串匹配方面做了很多工作,但没有看到明显、有效的减少(我有一些想法,但它们并不明显)。
-
@Konrad 我在想,针和干草堆每串一行像素,但你可能是非常正确的,因为它很重要。
-
你的算法不应该那么慢。我怀疑您没有直接访问两个图像缓冲区(而是调用一些 GetPixel() 函数)。如果您不确定如何操作,请发布您的代码 + 2 张图片,我们可以提供帮助。
-
每次执行此操作时是否都会获得全新的图像,或者您是否正在处理一系列大部分相同的帧?如果是后者,四叉树之类的东西可以让这变得更有效率。
标签: .net algorithm image-processing image