Heim  >  Artikel  >  Backend-Entwicklung  >  Wie kann man mithilfe von Strided-Based Slicing zufällige Bildfelder aus einem 4D-Numpy-Array effizient zuschneiden?

Wie kann man mithilfe von Strided-Based Slicing zufällige Bildfelder aus einem 4D-Numpy-Array effizient zuschneiden?

Susan Sarandon
Susan SarandonOriginal
2024-11-03 14:05:03253Durchsuche

How to Efficiently Crop Random Image Patches from a 4D Numpy Array using Strided-Based Slicing?

Effizientes Numpy-Slicing für zufälliges Zuschneiden von Bildern

Für das effiziente Zuschneiden von zufälligen 16x16-Patches aus einem 4D-Numpy-Array, das mehrere Farbbilder darstellt (wobei die Die erste Dimension ist die Anzahl der Bilder und die zweite und dritte sind die gleiche Breite und Höhe. Ein schrittbasierter Ansatz kann verwendet werden.

Verwendung von np.lib.stride_tricks.as_strided oder scikit- image's view_as_windows

Diese Methoden erstellen Schiebefenster als Ansichten im Eingabearray und reduzieren so den Speicheraufwand. view_as_windows von Scikit-image vereinfacht die Einrichtung, indem es die Fensterform als Tupel angibt, dessen Elemente den Abmessungen des Eingabearrays entsprechen. Achsen zum Schieben werden Fensterlängen zugewiesen und andere Achsen werden auf 1 gesetzt.

Codebeispiel

<code class="python"># Import scikit-image for view_as_windows
from skimage.util.shape import view_as_windows

# Get sliding windows
w = view_as_windows(X, (1,16,16,1))[...,0,:,:,0]

# Generate random per-image offsets
x = np.random.randint(0,12,X.shape[0])
y = np.random.randint(0,12,X.shape[0])

# Index and extract specific windows
out = w[np.arange(X.shape[0]),x,y]

# Reformat if necessary
out = out.transpose(0,2,3,1)</code>

Dieser Code generiert vier zufällige (x_offset, y_offset) Paare und extrahiert 4 zufällige 16x16-Patches innerhalb der angegebenen Parameter mit minimalem Speicheraufwand.

Das obige ist der detaillierte Inhalt vonWie kann man mithilfe von Strided-Based Slicing zufällige Bildfelder aus einem 4D-Numpy-Array effizient zuschneiden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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