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的范围,并使用非标准化版本,但仍然不起作用。为什么?
谢谢你的帮助