【发布时间】:2013-01-15 05:22:12
【问题描述】:
我正在尝试将我拥有的徽标(模板)与一些图像相匹配。我的图像本质上都是彩色的,我这样做的方式是使用来自 openCV 的 cvMatchTemplate() 并在我的源图像上运行模板(徽标)。我将模板缩放到多个级别以找到最佳匹配。请注意,我只是在图像上找到数字印记的徽标,而不是场景中存在的徽标。 例如:从这张图片中检测天空运动http://i56.tinypic.com/2v3j3wx.jpg(这张图片纯粹是为了我的任务的表现和清晰度,而不是我正在使用的图片
我的图像不是固定分辨率,所以我将其放大到标准的 800x600。现在,当我的源图像分辨率很差时说 300x300,结果很普通。我在模板参数中使用 method=CV_TM_CCOEFF_NORMED 并且即使是准确匹配的分数也很低(在 0 到 1.0 的范围内低至 0.4),这让我很难自信地说出徽标是否存在。 我对此有两个问题:
1 - 在 opencv 模板匹配中,它如何处理彩色图像。我试图从文档中理解,我的推论是它分别计算每个通道的分数并取最好的。如果不是这样,我最好考虑所有三个渠道以获得更好的结果
2 - 任何替代方法! :)
如果有不清楚的地方请告诉我!
编辑(附加信息): 正如在 cmets 中所讨论的,我附上了我当前的匹配技术,即缩放模板匹配。请注意,所附图像纯粹用于测试目的,并不是我正在使用的实际图像集(无法发布,因为图像是专有的) 图片来源 标志图片 使用模板匹配输出图像
虽然模板匹配,但此处获得的最佳匹配分数为 0.59。虽然相对来说这是一个不错的比赛分数,但仍然不足以让我确定所需的标志是否存在。在我的测试图像中,当屏幕上的徽标是透明的时,它仍然会检测到徽标,但得分为 0.3-0.4。使用 SURF/SIFT 可以获得更好的结果吗?
编辑(尝试使用 SURF) 我尝试运行已经在 opencv 官方文档 (minHessian = 2000) 中作为示例给出的 SURF 代码。link here 这是输出。我不确定如何解释它(2,3 点似乎在预期的范围内。这被认为是好的吗?还有什么建议吗? 谢谢
【问题讨论】:
-
归一化互相关对于该任务来说可能是一种太弱的方法。您可能需要一个关键点检测器,然后在两个图像中进行关键点匹配。这种事情的一种典型方法称为SURF。您能否包含您希望匹配的实际图像(坏的图像和模板)?
-
感谢您的回复。我确实考虑过 SIFT/SURF 技术,但有人建议我,这对我的应用程序来说太过分了。但我想确定 SURF 会提高我的精度。除了阅读 SURF 示例代码之外,任何关于如何完成任务的人都需要注意。这些图像本质上是专有的,但是我会尝试在免费提供的图像中复制这些行为并将它们发布在此处以便更好地解决问题。
-
要确保 SURF 提高您的精度,这很简单:使用它并检查它是否能提高您的精度。谁建议你反对它?原因是什么? (矫枉过正当然不是原因)。
-
至于您的第一个问题:您将如何结合所有三个渠道?没有全球公认的方法,但在这方面常见的一件事是转移到 CIELAB 颜色空间并考虑那里的欧几里德距离(最简单的 Delta E)。
-
真的一模一样吗?徽标不是半透明的,因此您在其下方的图像实际上可能会对其进行很多修改吗?它真的总是完美地在同一个旋转中吗?图像采集那么好吗?另外,你提到缩放,怎么不考虑缩放?在我能想象到的所有情况下,您收到的这些建议似乎都是错误的。
标签: python image-processing opencv