改进 OpenCV 的模板匹配算法

Posted

技术标签:

【中文标题】改进 OpenCV 的模板匹配算法【英文标题】:Improving Template Matching Algorithm for OpenCV 【发布时间】:2018-03-01 08:33:15 【问题描述】:

使用 OpenCV 进行汽车检测

我正在从事一个小型个人项目,我必须知道显示的图像是否是汽车。我正在使用基于 OpenCV python 的基本模板匹配。

正面图片/模板图片

汽车顶视图:- https://i.stack.imgur.com/zXr1U.jpg

使用其中一张正面图像进行简单的模板匹配得到了所需的结果。

负片

但是当我们使用像 https://i.stack.imgur.com/YLVwc.jpg 这样的负面图像时,模板查找器会发现这是一个正面匹配。

尝试过的方法都失败了:-

    增加模板匹配的阈值:- 增加阈值会导致许多实际的正图像停止匹配

    OpenCV 中存在不同类型的模板匹配技术:- 没有给出更好的结果

    使用多个模板来加强正负匹配:- 并非适用于所有情况

有没有更好的方法来删除匹配我们得到的误报的模板。是否有任何基于特征匹配或边缘检测的技术可以代替模板匹配来改进我的算法。

【问题讨论】:

您的“负面”图像确实包含(大部分)汽车——不清楚是否应该检测到?因此,我认为您可能需要从指定标准和所需性能开始。由于有不同种类的汽车(例如,有些比人行道暗,有些比人行道亮),您几乎肯定需要多个模板。预处理图像和模板以检测某种“类似汽车”的特征可能会有所帮助;也许是边缘检测。另一种可能的方法是从许多正面和负面的例子中训练一个神经网络。但这要复杂得多。 也许您应该从了解这些方法的工作原理开始。只有这样才能学会正确使用它们…… ***.com/questions/36254452/… @NickHollinghurst 不应将负图像检测为汽车。只有当整辆汽车在图像中时才应该被检测到。 【参考方案1】:

简单但在您的情况下可能值得尝试的方法是将模板分成(“4”)部分 - 角落,然后在每个部分上应用模板匹配 并且仅在找到 4 个部分时才接受

还有:

在增加阈值的同时添加不同的模板

如果尚未应用一些规范化,则应用它

【讨论】:

谢谢。 @M.Sabaa 你能解释一下在这种情况下标准化是什么意思吗 简单的方法是对每张图像将每个像素值除以所有像素值的总和 如果有不同的闪电,这应该会有所帮助

以上是关于改进 OpenCV 的模板匹配算法的主要内容,如果未能解决你的问题,请参考以下文章

opencv 中自带的模板匹配算法出处

opencv 中自带的模板匹配算法出处

半全局块匹配(Semi-Global Block Matching)算法

OpenCV:快速模板匹配算法

Python 机器视觉 - 基于opencv图像模板匹配实现的简单人脸匹配实例演示,matchTemplate的6大模板匹配算法

Python 机器视觉 - 基于opencv图像模板匹配实现的简单人脸匹配实例演示,matchTemplate的6大模板匹配算法