scipy.signal.

correlate2d#

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

Kreuzkorrelation von zwei 2-dimensionalen Arrays.

Kreuzkorreliert in1 und in2 mit einer Ausgabegröße, die durch mode bestimmt wird, und Randbedingungen, die durch boundary und fillvalue bestimmt werden.

Parameter:
in1array_like

Erster Input.

in2array_like

Zweiter Input. Sollte dieselbe Anzahl von Dimensionen wie in1 haben.

modestr {‘full’, ‘valid’, ‘same’}, optional

Ein String, der die Größe der Ausgabe angibt

full

Die Ausgabe ist die vollständige diskrete lineare Kreuzkorrelation der Eingaben. (Standard)

valid

Die Ausgabe besteht nur aus den Elementen, die nicht von der Null-Pufferung abhängen. Im Modus 'valid' muss entweder in1 oder in2 in jeder Dimension mindestens so groß sein wie der andere.

same

Die Ausgabe hat die gleiche Größe wie in1 und ist zentriert bezüglich der 'full'-Ausgabe.

boundarystr {‘fill’, ‘wrap’, ‘symm’}, optional

Ein Flag, das angibt, wie mit Rändern umgegangen werden soll

fill

Füllt Eingabearrays mit `fillvalue`. (Standard)

wrap

Kreisförmige Randbedingungen.

symm

Symmetrische Randbedingungen.

fillvalueSkalar, optional

Wert, mit dem aufzufüllende Eingabearrays gefüllt werden. Standard ist 0.

Rückgabe:
correlate2dndarray

Ein 2-dimensionales Array, das einen Teil der diskreten linearen Kreuzkorrelation von in1 mit in2 enthält.

Hinweise

Bei Verwendung des "same"-Modus mit Eingaben gerader Länge unterscheiden sich die Ausgaben von correlate und correlate2d: Es gibt einen 1-Index-Offset zwischen ihnen.

Beispiele

Verwenden Sie die 2D-Kreuzkorrelation, um die Position einer Vorlage in einem verrauschten Bild zu finden.

>>> 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