geometric_transform#
- scipy.ndimage.geometric_transform(input, mapping, output_shape=None, output=None, order=3, mode='constant', cval=0.0, prefilter=True, extra_arguments=(), extra_keywords=None)[Quelle]#
Wendet eine beliebige geometrische Transformation an.
Die angegebene Abbildungsfunktion wird verwendet, um für jeden Punkt im Ausgabearray die entsprechenden Koordinaten im Eingabearray zu finden. Der Wert des Eingabearrays an diesen Koordinaten wird durch Spline-Interpolation der angeforderten Ordnung bestimmt.
- Parameter:
- inputarray_like
Das Eingabearray.
- mapping{callable, scipy.LowLevelCallable}
Ein aufrufbares Objekt, das ein Tupel der Länge gleich dem Rang des Ausgabearrays akzeptiert und die entsprechenden Eingabekoordinaten als Tupel der Länge gleich dem Rang des Eingabearrays zurückgibt.
- output_shapetuple von ints, optional
Form-Tupel.
- outputarray oder dtype, optional
Das Array, in das die Ausgabe platziert werden soll, oder der Datentyp des zurückgegebenen Arrays. Standardmäßig wird ein Array mit demselben Datentyp wie input erstellt.
- orderint, optional
Die Ordnung der Spline-Interpolation, Standard ist 3. Die Ordnung muss im Bereich 0-5 liegen.
- mode{‘reflect’, ‘grid-mirror’, ‘constant’, ‘grid-constant’, ‘nearest’, ‘mirror’, ‘grid-wrap’, ‘wrap’}, optional
Der Parameter mode bestimmt, wie das Eingabearray über seine Grenzen hinaus erweitert wird. Standard ist ‘constant’. Das Verhalten für jeden gültigen Wert ist wie folgt (weitere Plots und Details zu Randmodi)
- ‘reflect’ (d c b a | a b c d | d c b a)
Die Eingabe wird erweitert, indem über den Rand des letzten Pixels gespiegelt wird. Dieser Modus wird auch manchmal als halb-Sample-symmetrisch bezeichnet.
- ‘grid-mirror’
Dies ist ein Synonym für ‘reflect’.
- ‘constant’ (k k k k | a b c d | k k k k)
Die Eingabe wird erweitert, indem alle Werte außerhalb des Rands mit demselben konstanten Wert gefüllt werden, der durch den Parameter cval definiert ist. Außerhalb der Grenzen der Eingabe wird keine Interpolation durchgeführt.
- ‘grid-constant’ (k k k k | a b c d | k k k k)
Die Eingabe wird erweitert, indem alle Werte außerhalb des Rands mit demselben konstanten Wert gefüllt werden, der durch den Parameter cval definiert ist. Die Interpolation erfolgt auch für Abtastpunkte außerhalb des Umfangs der Eingabe.
- ‘nearest’ (a a a a | a b c d | d d d d)
Die Eingabe wird erweitert, indem das letzte Pixel wiederholt wird.
- ‘mirror’ (d c b | a b c d | c b a)
Die Eingabe wird erweitert, indem über die Mitte des letzten Pixels gespiegelt wird. Dieser Modus wird auch manchmal als ganz-Sample-symmetrisch bezeichnet.
- ‘grid-wrap’ (a b c d | a b c d | a b c d)
Die Eingabe wird erweitert, indem zum gegenüberliegenden Rand umgebrochen wird.
- ‘wrap’ (d b c d | a b c d | b c a b)
Die Eingabe wird durch Umwickeln zum gegenüberliegenden Rand erweitert, jedoch so, dass der letzte und der erste Punkt genau übereinanderliegen. In diesem Fall ist nicht eindeutig definiert, welcher Abtastpunkt am Überlappungspunkt gewählt wird.
- cvalskalar, optional
Wert, mit dem die Ränder der Eingabe gefüllt werden, wenn mode ‘constant’ ist. Standard ist 0.0.
- prefilterbool, optional
Bestimmt, ob das Eingabearray vor der Interpolation mit
spline_filtervorab gefiltert wird. Der Standardwert ist True, was ein temporäres float64 Array gefilterter Werte erstellt, wennorder > 1. Wenn dieser Wert auf False gesetzt wird, wird die Ausgabe leicht unscharf sein, wennorder > 1, es sei denn, die Eingabe wurde vorab gefiltert, d.h. sie ist das Ergebnis des Aufrufs vonspline_filterauf die ursprüngliche Eingabe.- extra_argumentstuple, optional
Zusätzliche Argumente, die an mapping übergeben werden.
- extra_keywordsdict, optional
Zusätzliche Schlüsselwörter, die an mapping übergeben werden.
- Rückgabe:
- outputndarray
Die gefilterte Eingabe.
Siehe auch
Hinweise
Diese Funktion akzeptiert auch Low-Level-Callback-Funktionen mit einer der folgenden Signaturen, die in
scipy.LowLevelCallableeingekapselt sind.int mapping(npy_intp *output_coordinates, double *input_coordinates, int output_rank, int input_rank, void *user_data) int mapping(intptr_t *output_coordinates, double *input_coordinates, int output_rank, int input_rank, void *user_data)
Die aufrufende Funktion iteriert über die Elemente des Ausgabearrays und ruft die Callback-Funktion für jedes Element auf. Die Koordinaten des aktuellen Ausgabeelements werden über
output_coordinatesübergeben. Die Callback-Funktion muss die Koordinaten zurückgeben, an denen die Eingabe ininput_coordinatesinterpoliert werden muss. Die Ränge der Eingabe- und Ausgabearrays sind durchinput_rankundoutput_rankgegeben.user_dataist der Zeiger auf die Daten, der unverändert anscipy.LowLevelCallableübergeben wird.Die Callback-Funktion muss einen ganzzahligen Fehlerstatus zurückgeben, der Null ist, wenn etwas schief gelaufen ist, und sonst Eins. Wenn ein Fehler auftritt, sollten Sie normalerweise den Python-Fehlerstatus mit einer aussagekräftigen Nachricht festlegen, bevor Sie zurückkehren. Andernfalls wird eine Standardfehlermeldung von der aufrufenden Funktion gesetzt.
Zusätzlich werden einige andere Low-Level-Funktionszeigerspezifikationen akzeptiert, diese sind jedoch nur aus Kompatibilitätsgründen vorhanden und sollten nicht in neuem Code verwendet werden.
Für komplexwertige input transformiert diese Funktion die Real- und Imaginärkomponenten unabhängig voneinander.
Hinzugefügt in Version 1.6.0: Unterstützung für komplexe Werte hinzugefügt.
Beispiele
>>> import numpy as np >>> from scipy.ndimage import geometric_transform >>> a = np.arange(12.).reshape((4, 3)) >>> def shift_func(output_coords): ... return (output_coords[0] - 0.5, output_coords[1] - 0.5) ... >>> geometric_transform(a, shift_func) array([[ 0. , 0. , 0. ], [ 0. , 1.362, 2.738], [ 0. , 4.812, 6.187], [ 0. , 8.263, 9.637]])
>>> b = [1, 2, 3, 4, 5] >>> def shift_func(output_coords): ... return (output_coords[0] - 3,) ... >>> geometric_transform(b, shift_func, mode='constant') array([0, 0, 0, 1, 2]) >>> geometric_transform(b, shift_func, mode='nearest') array([1, 1, 1, 1, 2]) >>> geometric_transform(b, shift_func, mode='reflect') array([3, 2, 1, 1, 2]) >>> geometric_transform(b, shift_func, mode='wrap') array([2, 3, 4, 1, 2])