使用opencv cvMatchTemplate时,如何选择好的模板进行更精准的匹配?

when using opencv cvMatchTemplate, how to choose a good template for more accurate matching?

我正在使用 opencv cvMatchTemplate 在一堆图像中查找商标图案。

现在我所做的就是看图片,从商标中找到一些独特的补丁,并将其用作我的模板。 我发现使用整个商标图像并不一定比使用其中的一部分更好。我的问题是

这正常吗?或者我做错了。

如果是正常的,如何选择好的模板才能更准确的匹配呢?

或者说select好的模板背后有什么数学理论可以帮助我select最好的模板

我没有使用特征检测,因为我发现它作为模板匹配并不准确。

为什么模板匹配与特征检测一样有效(当每个人似乎都喜欢特征检测时)

模板匹配不同于特征检测,因为它假定您要查找的内容与模板位于同一平面(图像平面)。 “变形”模板将不起作用(与变形模板匹配的模板称为数字图像相关)。

因此,如果您要在与相机对齐的 sheet 纸张图像中寻找徽标,那么模板匹配就是您的事,但如果您要在随机文件中寻找徽标街道图像,然后进行特征检测。

模板匹配是如何工作的?

好吧,openCV 有一个很好的例子: http://docs.opencv.org/doc/tutorials/imgproc/histograms/template_matching/template_matching.html

为什么一个模板的效果和整个模板一样好?

但是您想知道为什么只是模板的一部分就和整个模板一样好(并非总是如此,但可能会发生)。

这很容易理解:模板的“部分”有足够的信息可以识别。

示例*:

如果我让你找下图,你能找准吗?

我希望答案是肯定的。为什么不需要整张图片才能找到它?

->因为图像的那部分信息足够多,可以准确识别!你不需要整张图片!

但是,如果我给你下面的图片:

您将无法识别该徽标,因为至少还有 3 或 4 个其他徽标带有黄色。

我怎么知道我的模板是否足够好?

没有办法“肯定”知道一个模板是否足以被唯一识别,但有办法知道图像中是否有信息。

由于模板匹配依赖于相关系数和平方和系数,这意味着模板具有的“不同”信息量越多越好。这可以用图像梯度的总和来近似。

计算模板在X和Y方向的梯度并求和,然后求和。这个数字越大,模板越好!**


*徽标是一个很好的例子,我与这些公司没有任何关系。

** 这在 http://www.ncbi.nlm.nih.gov/pubmed/18545407

中得到了数学证明