0

我试图通过首先对图像的缩小表示进行搜索来使正常的模板匹配搜索更加高效。基本上我做了一个双pyrDown - >四分之一分辨率。对于大多数图像和模板来说,这很好用,但对于其他一些图像和模板,我得到的匹配结果非常糟糕。对于细字体或小对比度来说似乎特别糟糕。

看这个例子:

示例截图

这个模板:

在此处输入图像描述

在 100% 分辨率下,我得到 99.9% 的匹配概率

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

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

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

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

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

4

1 回答 1

1

这并不罕见,这些分数看起来非常好。但是,这里有一些想法可能会帮助您改善这种情况:

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

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

  3. 处理这种情况的最佳方法是在金字塔的最高层执行详尽的匹配,然后在较低层使用减少的搜索空间将其追踪到最低层。详尽我的意思是您将搜索整个顶部金字塔级别图像的所有行和所有列。您将跟踪最高级别上最高匹配的位置(行、列)(您可能已经这样做了)。然后,您将这些位置乘以 2 倍,并在下一个最低级别执行受限搜索(例如,以粗略位置为中心的 5 x 5 班次)。你一直这样做,直到你处于底层。这将为您提供最佳的整体准确性和性能。这也是大多数工业计算机视觉软件包的做法。

于 2020-10-27T19:56:43.343 回答