有关归一化互相关的问题

时间:2020-02-13 15:13:47

标签: numpy normalization cross-correlation

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

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,并使用非标准化的版本,但是它仍然无法正常工作。为什么?

感谢您的帮助

0 个答案:

没有答案