Numpy 关于归一化互相关的问题

Numpy 关于归一化互相关的问题,numpy,normalization,cross-correlation,Numpy,Normalization,Cross Correlation,我试图理解模式匹配的互相关,所以我开发了一个简单的脚本来帮助我理解正在发生的事情。 我确实理解互相关的过程和匹配,但是归一化互相关的情况有点模糊,为什么它在我正在研究的问题上似乎效果更好,但是我确实理解它的数学。 问题陈述: 对于具有随机元素的长度为n的数组I,我从I的随机位置k提取一个m元素块。我想使用互相关法找到位置k。这是对图像进行模式匹配的1D等价物,但在1D中。同样,这只是一个练习。以下是我用于实现上述功能的完整代码: pattern_len = 4 img_len = 11 img

我试图理解模式匹配的互相关,所以我开发了一个简单的脚本来帮助我理解正在发生的事情。 我确实理解互相关的过程和匹配,但是归一化互相关的情况有点模糊,为什么它在我正在研究的问题上似乎效果更好,但是我确实理解它的数学。 问题陈述: 对于具有随机元素的长度为
n
的数组
I
,我从
I
的随机位置
k
提取一个
m
元素块。我想使用互相关法找到位置
k
。这是对图像进行模式匹配的1D等价物,但在1D中。同样,这只是一个练习。以下是我用于实现上述功能的完整代码:

pattern_len = 4
img_len = 11

img = numpy.random.rand((img_len))*numpy.random.rand(1)*10
it = numpy.random.randint(0, (img_len-pattern_len))

pattern = img[it:it+pattern_len]

match = numpy.zeros(img_len)

for i in range(0, img_len):
    a = 0
    b = 0
    c = 0
    for j in range(0, pattern_len):
        v = 0
        if (not (i+j > (img_len - 1))):
            v = img[i+j]
        a += v*pattern[j]
        b += v*v
        c += pattern[j]*pattern[j]

    #match[i] = a
    match[i] = a/numpy.sqrt(b*c)

id = numpy.argmax(match)

if (id == it):
    print("correct index found, it: {0}, index: {1}".format(it, id))
else:
    print("INcorrect index found, it: {0}, index: {1}".format(it, id))
我的问题是:如果我使用
match[i]=a
(互相关)而不是
match[i]=a/numpy.sqrt(a*b)
(标准化互相关),我大部分时间都会得到不正确的输出,但是如果我使用标准化版本,每次输出都是正确的。 就像我说的,我确实理解数学或者做规范化的互相关,但是我不理解在基本层面上,为什么非规范化版本不起作用。 我还尝试将两个输入标准化为-1到1的范围,并使用非标准化版本,但仍然不起作用。为什么?

谢谢你的帮助