Maison  >  Article  >  développement back-end  >  Comment recadrer efficacement des patchs d'images aléatoires à partir d'un tableau Numpy 4D à l'aide du découpage basé sur Strided ?

Comment recadrer efficacement des patchs d'images aléatoires à partir d'un tableau Numpy 4D à l'aide du découpage basé sur Strided ?

Susan Sarandon
Susan Sarandonoriginal
2024-11-03 14:05:03253parcourir

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

Découpage Numpy efficace pour un recadrage d'images aléatoire

Pour un recadrage efficace de patchs aléatoires 16x16 à partir d'un tableau Numpy 4D représentant plusieurs images couleur (où le la première dimension est le nombre d'images, et les deuxième et troisième sont la largeur et la hauteur égales), une approche basée sur les foulées peut être utilisée.

En utilisant np.lib.stride_tricks.as_strided ou scikit- image's view_as_windows

Ces méthodes créent des fenêtres coulissantes sous forme de vues dans le tableau d'entrée, réduisant ainsi la surcharge de mémoire. view_as_windows de Scikit-image simplifie la configuration en spécifiant la forme de la fenêtre sous la forme d'un tuple dont les éléments correspondent aux dimensions du tableau d'entrée. Les axes de glissement se voient attribuer des longueurs de fenêtre et les autres axes sont définis sur 1.

Exemple de code

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

Ce code génère quatre paires aléatoires (x_offset, y_offset). et extrait 4 patchs 16x16 aléatoires dans les paramètres donnés, avec une surcharge de mémoire minimale.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn