scipy.signal.
correlate2d#
- scipy.signal.correlate2d(in1, in2, mode='full', boundary='fill', fillvalue=0)[源代码]#
对两个 2 维数组进行互相关。
根据 mode 确定的输出大小以及根据 boundary 和 fillvalue 确定的边界条件,对 in1 和 in2 进行互相关。
- 参数:
- in1array_like
第一个输入。
- in2array_like
第二个输入。维度数目应与 in1 相同。
- modestr {‘full’, ‘valid’, ‘same’}, 可选
指示输出大小的字符串
full
输出是输入的完整离散线性互相关。(默认)
valid
输出仅包含不依赖于零填充的元素。在“有效”模式下,in1 或 in2 的每一维度都必须至少与另一维度一样大。
same
输出大小与 in1 相同,相对于“完整”输出居中放置。
- boundarystr {‘fill’, ‘wrap’, ‘symm’}, 可选
一个指示如何处理边界的标志
fill
用填充值填充输入数组。(默认)
wrap
循环边界条件。
symm
对称边界条件。
- fillvalue标量,可选
填充输入数组的填充值。默认值为 0。
- 返回:
- correlate2dndarray
一个包含 in1 与 in2 离散线性互相关子集的二维数组。
注释
在使用具有偶数长度输入的“相同”模式中,
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()