【问题标题】:Template Matching Subpixel Accuracy模板匹配亚像素精度
【发布时间】:2016-06-16 16:11:08
【问题描述】:

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

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

【问题讨论】:

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


    【解决方案1】:

    最好先从像素精度开始,然后再转向亚像素精度。以亚像素精度检查整个图像会很昂贵。

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

    这种方法的好处是只需要移动小模板,就可以提前完成。

    话虽如此,您似乎正在随着时间的推移跟踪对象位置。对那个位置进行低通滤波可能是值得的。

    【讨论】:

    • 非常感谢您的快速回复。
    【解决方案2】:

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

    作为一个快速而肮脏的实验,如果亚像素精度的 minMaxLoc 可以解决您的问题,您可以使用三次插值 INTER_CUBIC http://docs.opencv.org/2.4/modules/imgproc/doc/geometric_transformations.html#resize 和在上面申请minMaxLoc。 (与线性插值相反,三次插值确实会移动最大值。)

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

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

    【讨论】:

    • 感谢您的快速回复。
    • opencv 中的 resize 函数非常耗时。您分享的代码链接有点难以解释。虽然调整大小已经解决了这个问题并且现在提供了亚像素精度,但是算法已经显着减慢了。您是否有其他更快的调整大小的解决方案?
    • 通过调整大小进行上采样只是为了伪造 0.5 或 0.25 像素分辨率的精度。如果调整大小非常慢,请确保使用 OpenCV 的多线程发布版本。对于一个干净的解决方案,我真的建议查看minMaxLogSubPix 补丁,这将提供真正的亚像素精度。
    猜你喜欢
    • 2019-07-17
    • 1970-01-01
    • 2016-04-22
    • 1970-01-01
    • 2014-11-08
    • 1970-01-01
    • 1970-01-01
    • 2012-01-30
    • 1970-01-01
    相关资源
    最近更新 更多