Heim > Backend-Entwicklung > Python-Tutorial > Wie kann man mehrere Bilder mit Numpy Slices effizient zuschneiden?

Wie kann man mehrere Bilder mit Numpy Slices effizient zuschneiden?

Mary-Kate Olsen
Freigeben: 2024-11-02 02:36:03
Original
386 Leute haben es durchsucht

How to Efficiently Crop Multiple Images Using Numpy Slices?

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>
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage