scipy.signal.

correlate2d#

scipy.signal.correlate2d(in1, in2, mode='full', boundary='fill', fillvalue=0)[源代码]#

对两个二维数组进行互相关运算。

in1in2 进行互相关运算,输出大小由 mode 决定,边界条件由 boundaryfillvalue 决定。

参数:
in1array_like

第一个输入。

in2array_like

第二个输入。应与 in1 具有相同的维度数。

modestr {‘full’, ‘valid’, ‘same’}, 可选

一个字符串,指示输出的大小

full

输出是输入的完整离散线性互相关。(默认)

valid

输出仅包含不依赖于零填充的那些元素。在“valid”模式下,in1in2 在每个维度上都必须至少与另一个一样大。

same

输出的大小与 in1 相同,相对于“full”输出居中。

boundarystr {‘fill’, ‘wrap’, ‘symm’}, 可选

一个标志,指示如何处理边界

fill

使用 fillvalue 填充输入数组。(默认)

wrap

循环边界条件。

symm

对称边界条件。

fillvalue标量, 可选

用于填充输入数组的值。默认为 0。

返回:
correlate2dndarray

一个二维数组,包含 in1in2 的离散线性互相关的子集。

注释

当使用具有偶数长度输入的“same”模式时,correlatecorrelate2d 的输出不同:它们之间存在 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()
../../_images/scipy-signal-correlate2d-1.png