Effiziente Verwendung mehrerer Numpy-Slices für zufälliges Bildschneiden
Einführung:
In maschinelles Lernen und Computer Vision In Anwendungen ist das Zuschneiden von Bildern eine entscheidende Aufgabe für die Vorverarbeitung von Bildern vor dem Modelltraining oder der Inferenz. Das Zuschneiden hilft dabei, relevante Bereiche von Interesse zu extrahieren und die Rechenkomplexität bei der Verarbeitung großer Bilder zu reduzieren.
Effizienter Zuschneideansatz:
Schleifenbasierte Zuschneidemethoden, wie in der Frage gezeigt, können sein rechenineffizient für große Datenmengen. Um dieses Problem anzugehen, können wir die erweiterte Indizierung und die Strided-basierten Methoden von Numpy nutzen.
Nutzung der Strided-basierten Methode:
Numpys Funktion np.lib.stride_tricks.as_strided ermöglicht das Extrahieren von Strided Ansichten eines Arrays ohne Kopieren von Daten. Diese Technik kann mit der view_as_windows-Funktion von scikit-image kombiniert werden, um Schiebefenster über dem Eingabebild-Array zu erstellen.
Erklärung von Schiebefenstern:
view_as_windows erstellt ein Array von Ansichten in der Eingabe Array, wobei jede Ansicht ein Schiebefenster darstellt. Das Argument window_shape gibt die Form der Schiebefenster an. Indem wir 1 für Achsen übergeben, über die wir nicht gleiten möchten, können wir Singleton-Dimensionen erstellen, die später indiziert werden können, um die gewünschten zugeschnittenen Fenster zu erhalten.
Code-Implementierung:
Der folgende Code demonstriert den effizienten Zuschneideansatz mithilfe von Schiebefenstern:
<code class="python">from skimage.util.shape import view_as_windows # Get sliding windows w = view_as_windows(X, (1, 16, 16, 1))[..., 0, :, :, 0] # Index and retrieve specific windows out = w[np.arange(X.shape[0]), x, y] # Rearrange format out = out.transpose(0, 2, 3, 1)</code>
Dieser Code generiert effizient zufällige (x_offset, y_offset) Paare für jedes Bild und extrahiert die entsprechenden 16x16-Zuschnitte in ein Array mit Formen (4, 16, 16, 3) ohne unnötigen Speicheraufwand.
Das obige ist der detaillierte Inhalt vonWie kann ich zufällige Bildfelder mithilfe von NumPy-Slicing effizient zuschneiden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!