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
fullDie Ausgabe ist die vollständige diskrete lineare Kreuzkorrelation der Eingaben. (Standard)
validDie 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.
sameDie 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
fillFüllt Eingabearrays mit `fillvalue`. (Standard)
wrapKreisförmige Randbedingungen.
symmSymmetrische 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
correlateundcorrelate2d: 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()