检查小图片是否在大图片内的最佳(最快)方法是什么?
(缩放图片:)
想要找到:
我有一个解决方案,但速度很慢:
此方法需要约7秒才能在1600x1200照片上找到50x50 pic。
也许你知道一个更好的算法?我知道一个软件可以在一秒钟内完成。
答案 0 :(得分:6)
可以使用数学运算convolution(可以使用Fast Fourier Transform有效实施)。
答案 1 :(得分:1)
另一个答案描述了通过图像卷积的交叉相关(通过乘法来实现)。但有时您希望使用规范化互相关 - 请参阅http://scribblethink.org/Work/nvisionInterface/nip.html以获得完整的讨论和快速实施的详细信息。
答案 2 :(得分:1)
如果您知道像素值将是精确的,这只是字符串匹配问题的特殊情况。有很多快速字符串匹配算法,我从Boyer-Moore或Knuth-Morris-Pratt开始。
答案 3 :(得分:1)
你的算法最糟糕的是O(hA*wA*hB*wB)
,其中hA
,wA
,hB
,wB
是大图像的高度和宽度{ {1}}和小图片A
。
这个算法应该是B
它基于字符串匹配,这就是它的工作原理:
O((wA+wB)*hA*hB)
的每一行中查找图像B
的每一行。
A
中存储三元组matched_row
,其中(rA, cA, rB)
代表(rA, cA)
图像的A
起点文件行rB
。B
对matched_row
进行排序,然后再cA
然后再rA
。现在你迭代数组,如果你匹配5行的图像B,你会得到这样的结果:
rB
答案 4 :(得分:0)
我想在10x10图像中切割两个图像,计算每个小图像的“平均”颜色并执行与您相同的算法。
这应该适用于任何算法,因为它只影响常数因子。