opencv - 模板匹配和pyrDown问题

标签 opencv image-processing computer-vision opencv4nodejs

我试图通过首先对图像的缩小表示进行搜索来使普通模板匹配搜索更加有效。基本上,我会执行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

最佳答案

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

  • 您提到对于细字体似乎特别糟糕。这可能是因为行中的某些像素被应用在pyrDown上的高斯滤波器所平滑或扭曲了。这也可能表明您降低了太多分辨率。不幸的是,我认为OpenCV中的pyrDown函数将分辨率降低了2倍,因此它无法让您通过其他比例因子对其进行微调。您可以尝试的另一种方法是将resize()指令的插值设置为INTER_LINEAR或INTER_CUBIC。 resize()函数将允许您使用任何比例因子来调整图像的大小,因此您可以更好地控制性能与准确性。
  • 使用相同对象的多个模板。如果您来到某个场景并且只能获得87%的分数,请在该场景之外创建一个模板。然后将其添加到要使用的模板数据库中。显然,随着模板数量的增加,完成搜索所需的时间也会增加。
  • 应对这种情况的最佳方法是在金字塔的最高级别执行详尽的匹配,然后使用较低级别的减少的搜索空间将其跟踪到最低级别。详尽无遗是指您将搜索整个金字塔顶层图像中的所有行和所有列。您将跟踪最高级别上最高匹配项的位置(行,列)(您可能已经这样做了)。然后,将这些位置乘以2并在下一个最低级别(例如,以粗略位置为中心的5 x 5移位)上进行限制性搜索。您一直这样做,直到您处于最底层。这将为您提供最佳的整体精度和性能。这也是大多数工业计算机视觉软件包所采用的方式。
  • 关于opencv - 模板匹配和pyrDown问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64553419/

    相关文章:

    python - 间隙填充轮廓/线

    python - 如果我想让 OpenCV dnn 模块加载 PyTorch 模型,我应该如何保存它

    iOS慢速图像像素迭代

    c++ - 无法将 'cv::VideoCapture' 转换为 'CvCapture*'

    machine-learning - MNIST 手写数字数据集 - 已解码版本?

    opencv - 检测图像的模糊程度

    opencv - 使用 OpenCV 和 Python 加载 rtsp 流时出现异常

    opencv - 可以沿着对象生成边界框的对象识别算法

    python - 在图像文件中将特定 RGB 颜色像素更改为另一种颜色

    python - 从图像( map )中提取多边形坐标