模板匹配亚像素精度

时间:2016-03-03 11:03:20

标签: c++ image algorithm opencv image-processing

我使用模板匹配来检测图像中的特定图案。确定的偏移是非常不稳定的。目前我将它分别应用于R,G,B通道并平均结果以获得浮点值。请建议如何获得子像素精度。我打算调整图像大小,然后以原始比例返回数据,请建议任何其他更好的方法。

x_coordinate tracked

我使用Opencv网站上提到的代码" http://docs.opencv.org/2.4/doc/tutorials/imgproc/histograms/template_matching/template_matching.html"

2 个答案:

答案 0 :(得分:4)

在转向亚像素精度之前,先从像素精度开始,这是一件好事。以亚像素精度检查整个图像将是昂贵的。

一个简单的解决方案可能是拥有4个版本的模板。除了基础之外,还有一个向左移动1/2像素,另一个向下移动1/2像素,最后一个向两个方向移动1/2像素。当您在{x,y}处进行匹配时,请检查邻域以查看半移模板是否更匹配。

这种方法的好处是你只需要移动小模板,它可以预先完成。

话虽如此,您似乎随着时间的推移追踪物体位置。这个位置的低通滤波器可能是值得的。

答案 1 :(得分:3)

我认为潜在的问题是minMaxLoc只有像素精度。您可以在此处的讨论中尝试一个亚像素精确的补丁http://www.longrange.net/Temp/CV_SubPix.cpphttp://answers.opencv.org/question/29665/getting-subpixel-with-matchtemplate/

如果子像素精确的minMaxLoc可以解决您的问题,那么快速而肮脏的实验可以使用三次插值INTER_CUBIC {{来扩展模板匹配结果图像(例如,按因子4) 3}}并在其上应用minMaxLoc。 (与线性插值相反,立方插值确实会移动最大值。)

除此之外,您始终可以对输入图像和模板匹配结果应用高斯模糊,以减少高频噪声并抑制局部最大值。

我会先尝试快速实验。如果有帮助,您可以集成minMaxLogSubPix实施,但这需要更长的时间。