这个图像核相关矩阵代表什么?

What does this image-kernel correlation matrix represent?

我正在试验一些计算机视觉技术,特别是特征检测。我正在尝试通过在图像和特征内核之间进行自动关联来识别特征。

但是,生成的相关矩阵对我来说没有意义...任何人都可以帮助我了解如何解释或可视化该矩阵,以便清楚地了解特征所在的位置吗?

特征内核:

原图:

代码:

import cv2
import pprint
import numpy
import scipy.ndimage
from matplotlib import pyplot as plt
import skimage.feature

# load the image
img = cv2.imread('./lenna.jpg')[:,:,0]
f_kernel = cv2.imread('./lenna_feature.jpg')[:,:,0]

def matched_filter(img, f_kernel, detect_thres):
    result = scipy.ndimage.correlate(img, f_kernel)
    print("Feature Match Template")
    plt.imshow(skimage.feature.match_template(img, f_kernel))
    plt.show()
    return result

plt.imshow(matched_filter(img,f_kernel,1))
print("Correlation Matrix")
plt.show()

结果:

因此,在第一个结果图像中,在 (150,200) 处有一个明显的最大值点。我将此解释为该功能最有可能的位置。

然而,在第二个结果图像,相关矩阵结果中,没有明显的模式。我原以为会有一些明显的高相关点。

帮忙?

我无法重现您的结果。对我来说,第二张图的形状有点像莉娜。

反正你不想用相关性,你想用相关系数做模板匹配。纯相关性未归一化,因此它更像是一个平均滤波器而不是模板匹配。

编辑:添加了相关图像

skimage.feature.match_template computes the normalized cross correlation。也就是说,对于图像上的每个位置,图像块和模板都被归一化(减去均值并除以标准差),然后相乘并取平均值。这将计算图像块和模板的相关系数。相关系数是介于 1 和 -1 之间的值。相关系数为 1 表示图像块是模板的线性修改(即 constant1 * template + constant2)。

scipy.ndimage.correlate 计算相关性(与卷积相同,但不镜像内核)。也就是说,这里我们不首先对图像补丁进行归一化。图像具有较高值的​​地方也会自动具有较高的相关性,即使与模板完全不相似。