TM_SQDIFF_NORMED是什么方法,原理
时间: 2024-03-11 13:44:08 浏览: 20
`cv2.TM_SQDIFF_NORMED` 是一种模板匹配算法,基于平方差匹配(Sum of Squared Differences, SSD)的基础上进行了归一化,使得匹配结果的范围在 0 到 1 之间。该算法的匹配结果越接近 0,表示匹配程度越高。
该算法的具体计算过程如下:
1. 首先,将模板和待匹配图像的像素值分别减去它们的均值,使它们的平均值为 0。
2. 然后,将模板放在待匹配图像的每个位置上,计算模板和图像像素值之间的平方差。
3. 最后,将每个位置的平方差相加并归一化,得到归一化平方差匹配度(Normalized Sum of Squared Differences, NSSD)。
具体计算公式如下:
$$
NCC(x,y) = \frac{\sum_{i,j}(T(i,j)-I(x+i,y+j))^2}{\sqrt{\sum_{i,j}(T(i,j))^2}\sqrt{\sum_{i,j}(I(x+i,y+j))^2}}
$$
其中,$T(i,j)$ 表示模板中位置 $(i, j)$ 的像素值,$I(x+i,y+j)$ 表示在图像上位置 $(x+i,y+j)$ 的像素值。
在匹配过程中,我们需要寻找 NSSD 最小的位置,即匹配程度最高的位置。因为 NSSD 越小,表示模板和图像之间的差异越小,匹配程度越高。
需要注意的是,由于 NSSD 的值是越小越好,因此在使用 `cv2.TM_SQDIFF_NORMED` 算法时,我们需要使用 `cv2.minMaxLoc` 函数找到 NSSD 的最小值及其位置,而不是最大值。
相关问题
Cv2.MatchTemplate 函数的method 匹配方法包括:cv2.TM_CCOEFF、cv2.TM_CCOEFF_NORMED、cv2.TM_CCORR、cv2.TM_CCORR_NORMED、cv2.TM_SQDIFF、cv2.TM_SQDIFF_NORMED。代表什么含义
这些匹配方法代表了不同的相似度计算方式,用于在模板匹配中比较模板和图像的相似度。其中,TM_CCOEFF、TM_CCOEFF_NORMED、TM_CCORR、TM_CCORR_NORMED、TM_SQDIFF、TM_SQDIFF_NORMED分别代表相关系数匹配、归一化相关系数匹配、相关性匹配、归一化相关性匹配、平方差匹配、归一化平方差匹配。
results = cv.matchTemplate(img, temp1, cv.TM_SQDIFF_NORMED)中的results储存的是什么信息
在OpenCV中,`cv.matchTemplate()`函数用于在输入图像中搜索模板图像的匹配位置。该函数返回一个结果矩阵,其中每个元素表示输入图像与模板图像在对应位置的匹配程度。
在你提供的代码中,`results`是用来存储匹配结果的变量。它是一个矩阵,每个元素表示对应位置的匹配结果。具体来说,`results`矩阵的大小与输入图像的大小相同,每个元素的值表示在该位置的匹配程度。
在使用`cv.TM_SQDIFF_NORMED`方法进行模板匹配时,`results`矩阵中的元素值越小,表示相应位置与模板的差异越小,匹配程度越高。因此,你可以通过查找`results`矩阵中最小值的位置来找到最佳匹配位置。
例如,可以使用以下代码找到最佳匹配位置:
```python
min_val, max_val, min_loc, max_loc = cv.minMaxLoc(results)
best_match_loc = min_loc
```
在这个示例中,`cv.minMaxLoc()`函数用于找到`results`矩阵中的最小值和对应的位置。然后,`best_match_loc`变量存储了最佳匹配位置的坐标。
请注意,匹配结果矩阵的大小与输入图像大小相同,因此你可以使用它来可视化匹配结果或进一步分析。