scipy.signal.
correlate2d#
- scipy.signal.correlate2d(in1, in2, mode='full', boundary='fill', fillvalue=0)[源代码]#
对两个二维数组进行互相关运算。
对 in1 和 in2 进行互相关运算,输出大小由 mode 决定,边界条件由 boundary 和 fillvalue 决定。
- 参数:
- in1array_like
第一个输入。
- in2array_like
第二个输入。应与 in1 具有相同的维度数。
- modestr {‘full’, ‘valid’, ‘same’}, 可选
一个字符串,指示输出的大小
full
输出是输入的完整离散线性互相关。(默认)
valid
输出仅包含不依赖于零填充的那些元素。在“valid”模式下,in1 或 in2 在每个维度上都必须至少与另一个一样大。
same
输出的大小与 in1 相同,相对于“full”输出居中。
- boundarystr {‘fill’, ‘wrap’, ‘symm’}, 可选
一个标志,指示如何处理边界
fill
使用 fillvalue 填充输入数组。(默认)
wrap
循环边界条件。
symm
对称边界条件。
- fillvalue标量, 可选
用于填充输入数组的值。默认为 0。
- 返回:
- correlate2dndarray
一个二维数组,包含 in1 与 in2 的离散线性互相关的子集。
注释
当使用具有偶数长度输入的“same”模式时,
correlate
和correlate2d
的输出不同:它们之间存在 1 个索引的偏移量。示例
使用二维互相关来查找噪声图像中模板的位置
>>> import numpy as np >>> from scipy import signal, datasets, ndimage >>> rng = np.random.default_rng() >>> face = datasets.face(gray=True) - datasets.face(gray=True).mean() >>> face = ndimage.zoom(face[30:500, 400:950], 0.5) # extract the face >>> template = np.copy(face[135:165, 140:175]) # right eye >>> template -= template.mean() >>> face = face + rng.standard_normal(face.shape) * 50 # add noise >>> corr = signal.correlate2d(face, template, boundary='symm', mode='same') >>> y, x = np.unravel_index(np.argmax(corr), corr.shape) # find the match
>>> import matplotlib.pyplot as plt >>> fig, (ax_orig, ax_template, ax_corr) = plt.subplots(3, 1, ... figsize=(6, 15)) >>> ax_orig.imshow(face, cmap='gray') >>> ax_orig.set_title('Original') >>> ax_orig.set_axis_off() >>> ax_template.imshow(template, cmap='gray') >>> ax_template.set_title('Template') >>> ax_template.set_axis_off() >>> ax_corr.imshow(corr, cmap='gray') >>> ax_corr.set_title('Cross-correlation') >>> ax_corr.set_axis_off() >>> ax_orig.plot(x, y, 'ro') >>> fig.show()