scipy.signal.
correlate2d#
- scipy.signal.correlate2d(in1, in2, mode='full', boundary='fill', fillvalue=0)[源代码][源代码]#
对两个二维数组进行互相关。
通过 mode 确定输出大小,并根据 boundary 和 fillvalue 确定边界条件,对 in1 和 in2 进行互相关。
- 参数:
- 在1array_like
第一个输入。
- in2array_like
第二个输入。应与 in1 具有相同的维度。
- 模式str {‘full’, ‘valid’, ‘same’}, 可选
一个表示输出大小的字符串:
full
输出是输入的完整离散线性互相关。(默认)
valid
输出仅包含那些不依赖于零填充的元素。在’有效’模式下,in1 或 in2 在每个维度上都必须至少与其他一样大。
same
输出的大小与 in1 相同,相对于 ‘full’ 输出居中。
- 边界str {‘fill’, ‘wrap’, ‘symm’}, 可选
一个指示如何处理边界的标志:
fill
用 fillvalue 填充输入数组。(默认)
wrap
循环边界条件。
symm
对称边界条件。
- fillvalue标量,可选
用于填充输入数组的值。默认值为 0。
- 返回:
- correlate2dndarray
一个二维数组,包含 in1 与 in2 的离散线性互相关的一个子集。
注释
在使用偶数长度输入的“same”模式时,
correlate
和correlate2d
的输出有所不同:它们之间存在1个索引的偏移。示例
使用2D互相关在噪声图像中找到模板的位置:
>>> 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()