尺度不变模板匹配算法

信息处理 图像处理 计算机视觉 物体识别 模板匹配
2022-02-20 03:51:16

我正在使用 opencv 在视频流中查找模板图像。我试图找到的元素是 android 应用程序的 UI 元素。

经典模板匹配运行良好。但只要场景和模板共享相同的分辨率。我的要求是让它适用于不同的场景分辨率(不同的设备)。

到目前为止我尝试的是:

  1. 在循环中以不同的分辨率重新缩放模板并检查。一旦我的结果增加到某个阈值以上,我就认为它是匹配的。问题:不是很健壮,非常慢
  2. AKAZE 和 ORB:不要真正提供预期的结果。我不知道我是否遗漏了什么,但看起来这些算法并不是为我想要做的事情而设计的。我得到这样的结果:

宝珠

非常感谢任何帮助或想法!

几个例子:

场景:场景 模板:模板

场景二:场景2 模板二:模板2

场景3:场景3 模板3:模板3

4个回答

如果您的模板都基于某种文本,您可以使用某种 OCR 来匹配文本本身,而不仅仅是功能。

关于功能,您可以阅读:SIFT、SURF、KAZE、AKAZE、ORB 和 BRISK 的比较分析
特别是在以下部分有aloo:

在此处输入图像描述

似乎您的特征提取器通常使用角点,而您需要更多通用特征。

在此处输入图像描述

在此处输入图像描述

SURF 和 SIFT 似乎更适合您的情况。由于您的搜索不应该关心旋转(至少根据您的示例),您可以做的是匹配特征而不是图像的模板。也就是说,您正在缩放图像中模板的特征位置。

我相信Haar Cascades(由Viola-Jones使用)本质上是尺度不变的。现代神经网络也严重弃用,但我对此一无所知。它也不做任何 OCR - 如果您需要,您需要在提取的子图像上运行单独的算法。

您可能想尝试一些最初受到监督的东西。

例如,https://docs.opencv.org/3.4/d1/d2d/classcv_1_1ml_1_1SVM.html

如果你有数据来训练它,它会起作用。

为什么不尝试从一开始就按百分比编程呢?像这样,它可以在任何分辨率下进行扩展。循环和检查只会产生更多的工作并消耗更多的资源。如果有办法按百分比显示元素,则可以得到任何分辨率的结果。