Wie kann ich zufällige Bildfelder mithilfe von NumPy-Slicing effizient zuschneiden?

Susan Sarandon
Freigeben: 2024-11-03 05:12:30
Original
980 Leute haben es durchsucht

How can I efficiently crop random image patches using NumPy slicing?

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

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!

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