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!