Maison > développement back-end > Tutoriel Python > Comment recadrer efficacement plusieurs images à l'aide de Numpy Slices ?

Comment recadrer efficacement plusieurs images à l'aide de Numpy Slices ?

Mary-Kate Olsen
Libérer: 2024-11-02 02:36:03
original
388 Les gens l'ont consulté

How to Efficiently Crop Multiple Images Using Numpy Slices?

Utiliser efficacement plusieurs tranches Numpy pour un recadrage aléatoire d'images

Cette question cherche un moyen efficace d'effectuer un recadrage aléatoire d'images à partir d'un tableau numpy contenant 4 -images dimensionnelles. L'objectif est d'extraire des recadrages de fenêtre 16x16 de chacune des quatre images, garantissant des recadrages différents pour chaque image.

Une solution proposée utilise une boucle for simple pour générer des décalages aléatoires pour chaque image et appliquer ces décalages aux tranches numpy . Cependant, pour obtenir une efficacité optimale sans sacrifier la surcharge de mémoire, des approches alternatives sont explorées.

Exploiter les foulées et l'indexation sophistiquée

Une approche consiste à exploiter stride_tricks.as_strided de numpy pour créer des glissements. fenêtres qui agissent comme des vues dans le tableau d’entrée. Cela évite la duplication de mémoire et fournit une opération virtuellement gratuite.

La fonction view_as_windows de scikit-image simplifie ce processus en créant des fenêtres coulissantes avec une taille de fenêtre spécifiée et un axe coulissant le long d'autres dimensions. Grâce à cette fonction, nous pouvons extraire efficacement les recadrages de fenêtre 16x16 souhaités, garantissant des décalages aléatoires pour chaque image.

Implémentation

Le code Python fourni démontre l'application de view_as_windows pour obtenir un recadrage aléatoire des images tout en conservant une empreinte mémoire efficace :

<code class="python">from skimage.util.shape import view_as_windows

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

# Retrieve specific windows using random offsets
out = w[np.arange(X.shape[0]), x, y]

# Rearrange to match the output format of the loop-based approach
out = out.transpose(0,2,3,1)</code>
Copier après la connexion

Cette approche offre une solution plus efficace pour le recadrage aléatoire des images par rapport à la méthode basée sur la boucle tout en résolvant efficacement les problèmes de surcharge de mémoire.

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal