matlab的normxcorr2和 opencv的matchTemplate

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


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

matlab—–normxcorr2简要说明

normxcorr2 算法原理
matlab的normxcorr2和 opencv的matchTemplate

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

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

(图1)模板位于图像的最左上角时:
matlab的normxcorr2和 opencv的matchTemplate

(图2)模板位于图像的最右下角时:
matlab的normxcorr2和 opencv的matchTemplate

opencv—-matchTemplate

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

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

移动方式: 模板位于图像的最左上角时:
matlab的normxcorr2和 opencv的matchTemplate
移动方式: 模板位于图像的最右下角时:
matlab的normxcorr2和 opencv的matchTemplate

总结

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目的是模板匹配, 没毛病~