Maison >développement back-end >Tutoriel Python >Comment recadrer efficacement des patchs 16x16 aléatoires à partir de plusieurs images à l'aide de Numpy Slices ?

Comment recadrer efficacement des patchs 16x16 aléatoires à partir de plusieurs images à l'aide de Numpy Slices ?

Patricia Arquette
Patricia Arquetteoriginal
2024-11-03 00:39:29799parcourir

How to Efficiently Crop Random 16x16 Patches from Multiple Images Using Numpy Slices?

Recadrage d'images aléatoires efficace avec plusieurs tranches Numpy

Étant donné un tableau Numpy 4D représentant des images en couleur, l'objectif est de sélectionner efficacement des images aléatoires Recadrages 16x16 de chaque image, avec des emplacements de recadrage uniques pour chaque image.

Une approche naïve utilisant une boucle for entraîne une surcharge de mémoire et des calculs inutiles. Pour optimiser ce processus, nous exploitons la méthode np.lib.stride_tricks.as_strided ou la fonction view_as_windows de scikit-image.

Utilisation de view_as_windows

La fonction view_as_windows crée des fenêtres qui se chevauchent dans un tableau d'entrée, créant efficacement des vues dans les données d'origine sans allocation de mémoire supplémentaire. En spécifiant une forme de fenêtre de (1, 16, 16, 1), nous créons des fenêtres coulissantes le long des deuxième et troisième axes (largeur et hauteur) avec un pas de 1.

Pour indexer les fenêtres spécifiques en fonction sur des paires de décalages aléatoires (x, y), nous utilisons les étapes suivantes :

  1. Générer le tableau de fenêtres : w = view_as_windows(X, (1,16,16,1))[...,0,:,:,0]
  2. Indexez les fenêtres en fonction des décalages aléatoires : out = w[np.arange(X.shape[ 0]), x, y]
  3. Transposez le résultat pour qu'il corresponde au format de sortie souhaité : out = out.transpose(0,2,3,1)

Cette méthode fournit une approche efficace pour recadrer plusieurs images avec des décalages variables, réduisant ainsi la surcharge de mémoire et le temps de calcul par rapport à l'approche itérative.

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