如何避免匹配模板中的错误匹配
How to avoid false matches in match template
如果 matchTemplate 找到匹配项,结果将在其周围显示一个矩形。但是如果 MatchTemplate 没有找到准确的结果怎么办?
如何处理最小最大值?
示例查询图像:
相关代码片段:
if ((minValues[0] >= 0.95) || (minValues[0] <= 0.3))
//if ((maxValues[0] >= 0.95))
{
Rectangle rect = new Rectangle(new Point(minLocations[0].X, minLocations[0].Y), new Size(imgTemplate.Width, imgTemplate.Height));
imgSource.Draw(rect, new Bgr(0, 0, 255), 1);
isFoundMatch = true;
ImageViewer.Show(imgSource);
if (isFoundMatch == true)
{
imgSource.Save("C:/Misc/MatchFound/warning.png");
}
}
编辑:我检查了图像中不存在的模板。但是它给出了错误的匹配。
首先,您需要查看您认为有效的实例和您认为无效的实例的分数。
如果您看到它们之间有明显的区别,那么您可以为分数值设置一个阈值。但是,如果范围之间存在一些重叠,则单独的匹配分数不足以区分。然后你需要找出额外的标准来区分真假阳性。这些将取决于模式的类型和出现的混淆类型。很难给出一般规则。
如果 matchTemplate 找到匹配项,结果将在其周围显示一个矩形。但是如果 MatchTemplate 没有找到准确的结果怎么办? 如何处理最小最大值?
示例查询图像:
相关代码片段:
if ((minValues[0] >= 0.95) || (minValues[0] <= 0.3))
//if ((maxValues[0] >= 0.95))
{
Rectangle rect = new Rectangle(new Point(minLocations[0].X, minLocations[0].Y), new Size(imgTemplate.Width, imgTemplate.Height));
imgSource.Draw(rect, new Bgr(0, 0, 255), 1);
isFoundMatch = true;
ImageViewer.Show(imgSource);
if (isFoundMatch == true)
{
imgSource.Save("C:/Misc/MatchFound/warning.png");
}
}
编辑:我检查了图像中不存在的模板。但是它给出了错误的匹配。
首先,您需要查看您认为有效的实例和您认为无效的实例的分数。
如果您看到它们之间有明显的区别,那么您可以为分数值设置一个阈值。但是,如果范围之间存在一些重叠,则单独的匹配分数不足以区分。然后你需要找出额外的标准来区分真假阳性。这些将取决于模式的类型和出现的混淆类型。很难给出一般规则。