Effiziente Verwendung mehrerer Numpy-Slices für zufälliges Bildzuschneiden
Diese Frage sucht nach einer effizienten Möglichkeit, zufälliges Bildzuschneiden aus einem Numpy-Array mit 4 durchzuführen -dimensionale Bilder. Das Ziel besteht darin, aus jedem der vier Bilder 16x16-Fensterausschnitte zu extrahieren, um unterschiedliche Ausschnitte für jedes Bild sicherzustellen.
Eine vorgeschlagene Lösung verwendet eine einfache for-Schleife, um zufällige Offsets für jedes Bild zu generieren und diese Offsets auf Numpy-Slices anzuwenden . Um jedoch eine optimale Effizienz zu erreichen, ohne den Speicheraufwand zu beeinträchtigen, werden alternative Ansätze untersucht.
Nutzung von Strides und Fancy Indexing
Ein Ansatz besteht darin, Numpys stride_tricks.as_strided zu nutzen, um Sliding zu erzeugen Fenster, die als Ansichten des Eingabearrays dienen. Dies vermeidet Speicherduplizierung und sorgt für einen virtuellen freien Betrieb.
Die view_as_windows-Funktion von scikit-image vereinfacht diesen Prozess, indem sie Schiebefenster mit einer angegebenen Fenstergröße und einer Schiebeachse entlang anderer Dimensionen erstellt. Mit dieser Funktion können wir die gewünschten 16x16-Fensterausschnitte effizient extrahieren und dabei zufällige Offsets für jedes Bild sicherstellen.
Implementierung
Der bereitgestellte Python-Code demonstriert die Anwendung von view_as_windows auf Erzielen Sie einen zufälligen Bildzuschnitt bei gleichzeitiger Beibehaltung eines effizienten Speicherbedarfs:
<code class="python">from skimage.util.shape import view_as_windows # Obtain sliding windows w = view_as_windows(X, (1,16,16,1))[...,0,:,:,0] # Retrieve specific windows using random offsets out = w[np.arange(X.shape[0]), x, y] # Rearrange to match the output format of the loop-based approach out = out.transpose(0,2,3,1)</code>
Dieser Ansatz bietet eine effizientere Lösung für den zufälligen Bildzuschnitt im Vergleich zur schleifenbasierten Methode und geht gleichzeitig effektiv auf die Bedenken hinsichtlich des Speicheraufwands ein.
Das obige ist der detaillierte Inhalt vonWie kann man mehrere Bilder mit Numpy Slices effizient zuschneiden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!