scipy.signal.

correlate2d#

scipy.signal.correlate2d(in1, in2, mode='full', границе='fill', fillvalue=0)[источник]#

Взаимная корреляция двух двумерных массивов.

Взаимная корреляция in1 и in2 с размером выхода, определяемым mode, и граничные условия, определяемые границе и fillvalue.

Параметры:
in1array_like

Первый вход.

in2array_like

Второй вход. Должен иметь то же количество измерений, что и in1.

modestr {‘full’, ‘valid’, ‘same’}, необязательный

Строка, указывающая размер вывода:

full

Выходные данные представляют собой полную дискретную линейную взаимную корреляцию входных данных. (По умолчанию)

valid

Выходные данные состоят только из тех элементов, которые не зависят от дополнения нулями. В режиме '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()
../../_images/scipy-signal-correlate2d-1.png