模板匹配和pyrDown问题

问题描述

我试图通过首先对图像的缩小表示进行搜索来使普通模板匹配搜索更加有效。基本上,我会执行double pyrDown->四分之一分辨率。 对于大多数图像和模板来说,它的效果很好,但是对于其他一些图像,我得到的匹配结果却很糟糕。对于细字体或小的对比度而言,这似乎尤其糟糕。

看这个例子:

example screenshot

这个模板:

enter image description here

在100%分辨率下,匹配概率为99.9%

在50%的分辨率下,我得到90%

在25%的分辨率下,我得到87%

我真的不知道为什么它对某些图像/模板如此糟糕。我试图通过在25%缩小比例的图像上隐藏/显示25%缩小比例的模板来在photoshop中重新创建和测试,如您所见,它不是100%一致的: https://giphy.com/gifs/coWDjcvHysKgn95IFa

我需要一种方法来以较低的分辨率获得更多匹配的可能性,因为它需要快速。 关于如何改善算法的任何想法?

以下是原始文件: https://www.dropbox.com/s/llbdj9bx5eprxbk/images.zip?dl=0

解决方法

这并不稀奇,这些分数似乎还不错。但是,以下一些想法可能会帮助您改善这种情况:

  1. 您提到对于细字体似乎特别糟糕。这可能是因为行中的某些像素被应用在pyrDown上的高斯滤波器所平滑或扭曲了。这也可能表明您降低了太多分辨率。不幸的是,我认为OpenCV中的pyrDown函数将分辨率降低了2倍,因此它无法让您通过其他比例因子对其进行微调。您可以尝试的另一件事是指令resize(),其插值设置为INTER_LINEAR或INTER_CUBIC。 resize()函数将允许您使用任何比例因子来调整图像的大小,这样您就可以更好地控制性能与准确性。

  2. 使用相同对象的多个模板。如果您来到某个场景并且只能获得87%的分数,请在该场景之外创建一个模板。然后将其添加到要使用的模板数据库中。显然,随着模板数量的增加,完成搜索所需的时间也会增加。

  3. 应对这种情况的最佳方法是在金字塔的最高级别执行详尽的匹配,然后使用较低级别的减少的搜索空间将其向下跟踪至最低级别。详尽无遗是指您将搜索整个金字塔顶层图像中的所有行和所有列。您将跟踪最高级别上最高匹配项的位置(行,列)(您可能已经这样做了)。然后,将这些位置乘以2并在下一个最低级别(例如,以粗略位置为中心的5 x 5移位)上进行限制性搜索。您一直这样做,直到您处于最底层。这将为您提供最佳的整体精度和性能。这也是大多数工业计算机视觉软件包所采用的方式。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...