matlab的normxcorr2和 opencv的matchTemplate

想要转matlab中的normxcorr2, 发现matchTemplate中有一个算法是基于NCC的, 使用后发现其实与normxcorr2并不相同, 所以做一下记录.


matlab中normxcorr2和 opencv 3.0 中matchTemplate的异同之处

matlab—–normxcorr2简要说明

normxcorr2 算法原理
这里写图片描述

关键只在于返回的尺寸的大小:
假设 原始图像大小为 H × W , 模板大小为 h × w ,则normxcorr2返回的图像大小为  (H+h-1)× (W+w-1) ,

因为其移动匹配的方式如下:

(图1)模板位于图像的最左上角时:
模板位于左上角时

(图2)模板位于图像的最右下角时:
模板位于右下角时

opencv—-matchTemplate

matchTemplate算法原理
matchTemplate有多种匹配方式, 其中一下这种是和normxcorr2(NCC)相对应的,(我没搞错吧..)
这里写图片描述

关键只在于返回的尺寸的大小:
假设 原始图像大小为 H × W , 模板大小为 h × w ,则normxcorr2返回的图像大小为 (H-h+1)× (W-w+1) ,

移动方式: 模板位于图像的最左上角时:
模板位于图像的最左上角时:
移动方式: 模板位于图像的最右下角时:
这里写图片描述

总结

matlab的normxcorr2 和 opencv的matchTemplate(TM_CCOEFF_NORMED)算法原理相同, 但是返回图的图像尺度不同.
normxcorr2 返回的尺度: (H+h-1)× (W+w-1)
matchTemplate(TM_CCOEFF_NORMED)返回的尺度 (H-h+1)× (W-w+1)

毕竟, normxcorr2目的是NCC, matchTemplate目的是模板匹配, 没毛病~

猜你喜欢

转载自blog.csdn.net/qq_29007291/article/details/79996519