最优化方法实现亚像素精度模板匹配
本文最后更新于:2023年4月15日 晚上
之前实现了 通过函数拟合实现亚像素模板匹配 ,但由于模型是自己创建的,用于拟合真实模型,必定会引入误差,可以使用不拟合建模的方法直接最优化获取亚像素模板匹配结果。
实现思路
-
和拟合的亚像素模板匹配类似,在像素级的模板匹配基础上,在其附近搜索亚像素位置。
-
构建一个关于亚像素位置的模型,那就需要想办法将位置设置为模型参数,构建损失函数。
-
通过最优化的方法搜索使得损失函数最低的模型参数,将其作为结果输出。
Python 实现
在像素级模板匹配结果附近搜索精确解;
利用 OpenCV 的 remap 函数进行线性插值,得到亚像素图像,与模板比对 MSE 作为 Loss 函数,优化就完了。
示例函数:
1 |
|
该结果相比于 Halcon 的 NCC 模板亚像素精度匹配的结果偏差:
Pixel | X | Y |
---|---|---|
偏差 | 0.0123 | 0.0208 |
该偏差要小于曲线拟合的误差,我觉得问题在于少了中间的模型拟合,少了中间的误差。
参考资料
- https://www.zywvvd.com/notes/study/image-processing/template-match/subpix-tm-fitting/subpix-tm-fitting/
- https://blog.csdn.net/sunbright/article/details/24717963
最优化方法实现亚像素精度模板匹配
https://www.zywvvd.com/notes/study/image-processing/template-match/opti-subpixel-tm/opti-subpixel-tm/