0

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

但是,生成的相关矩阵对我来说没有意义......谁能帮我理解如何解释或可视化这个矩阵,以便特征所在的位置很明显?

功能内核:

在此处输入图像描述

原图:

莱娜,原始图像

代码:

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) 处有一个明显的最大值点。我将此解释为该功能最可能的位置。

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

帮助?

4

2 回答 2

2

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

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

于 2020-04-27T23:41:28.347 回答
1

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

反正你不想用相关性,你想用相关系数做模板匹配。纯相关没有标准化,所以它是一个平均过滤器而不是模板匹配。

编辑:添加了关联图像

相关图像

于 2020-04-27T21:29:38.590 回答