.net 在大画面中寻找小画面的快速算法?
检查小图片是否在大图片中的最佳(最快)方法是什么? (放大图片:) 想要找到: 我有一个解决方案,但速度非常慢:.net 在大画面中寻找小画面的快速算法?,.net,algorithm,image-processing,image,.net,Algorithm,Image Processing,Image,检查小图片是否在大图片中的最佳(最快)方法是什么? (放大图片:) 想要找到: 我有一个解决方案,但速度非常慢: 我遍历大图片中的每个像素(x,y),并比较小图片(颜色值)的像素(0,0) 如果像素是相同的,我迭代小图片,并将其与大图片进行比较。。如果失败,它将返回到大图像扫描循环 这种方法需要大约7秒钟才能在1600x1200照片上找到一张50x50的照片 也许你知道一个更好的算法?我知道一个软件可以在一秒钟内完成这项工作。数学运算(可以用有效地实现)可以用于此。另一个答案描述了通过图像
- 我遍历大图片中的每个像素(x,y),并比较小图片(颜色值)的像素(0,0)
- 如果像素是相同的,我迭代小图片,并将其与大图片进行比较。。如果失败,它将返回到大图像扫描循环
也许你知道一个更好的算法?我知道一个软件可以在一秒钟内完成这项工作。数学运算(可以用有效地实现)可以用于此。另一个答案描述了通过图像卷积(通过乘以FFT实现)实现的互相关。但有时您希望使用规范化互相关-有关快速实现的完整讨论和详细信息,请参阅。如果您知道像素值将是精确的,这将成为字符串匹配问题的特例。有很多快速字符串匹配算法,我从or开始。你的算法有一个最坏的情况是
O(hA*wA*hB*wB)
其中hA
,wA
,hB
,wB
是大图像a
和小图像B
的高度和宽度
该算法的最坏情况应该是O((wA+wB)*hA*hB)
它基于字符串匹配,其工作原理如下:
- 每次使用字符串匹配在图像的每行
中查找图像的每行A
。B
- 每次有匹配项时,在数组
中存储三元组matched_行
,其中(rA,cA,rB)
表示文件(rA,cA)
行的B
图像rB
中的起点a
- 每次有匹配项时,在数组
- 现在,首先根据
对cA
matched\u行进行排序,然后排序到
,然后排序到rA
rB
- 现在迭代数组,如果匹配5行的图像B,则会得到如下结果:
(12, 5, 0), (13, 5, 1), (14, 5, 2), (15, 5, 3), (15, 5, 4)