Maison  >  Article  >  développement back-end  >  Comment puis-je recadrer efficacement des patchs d'image aléatoires à l'aide du découpage NumPy ?

Comment puis-je recadrer efficacement des patchs d'image aléatoires à l'aide du découpage NumPy ?

Susan Sarandon
Susan Sarandonoriginal
2024-11-03 05:12:30919parcourir

How can I efficiently crop random image patches using NumPy slicing?

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

Introduction :
Dans l'apprentissage automatique et la vision par ordinateur applications, le recadrage d’images est une tâche cruciale pour le prétraitement des images avant la formation ou l’inférence du modèle. Le recadrage permet d'extraire les régions d'intérêt pertinentes et de réduire la complexité informatique liée au traitement de grandes images.

Approche de recadrage efficace :
Les méthodes de recadrage basées sur des boucles, comme indiqué dans la question, peuvent être informatiquement inefficace pour les grands ensembles de données. Pour résoudre ce problème, nous pouvons utiliser l'indexation avancée de numpy et les méthodes basées sur la foulée.

Exploiter la méthode basée sur la foulée :
La fonction np.lib.stride_tricks.as_strided de Numpy permet d'extraire vues d'un tableau sans copier les données. Cette technique peut être combinée avec la fonction view_as_windows de scikit-image pour créer des fenêtres coulissantes sur le tableau d'images d'entrée.

Explication des fenêtres coulissantes :
view_as_windows crée un tableau de vues dans l'entrée. tableau, où chaque vue représente une fenêtre coulissante. L'argument window_shape spécifie la forme des fenêtres coulissantes. En passant 1 pour les axes sur lesquels nous ne voulons pas glisser, nous pouvons créer des dimensions singleton, qui peuvent ensuite être indexées pour obtenir les fenêtres recadrées souhaitées.

Implémentation du code :
Le code suivant démontre l'approche de recadrage efficace à l'aide de fenêtres coulissantes :

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

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

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

# Rearrange format
out = out.transpose(0, 2, 3, 1)</code>

Ce code génère efficacement des paires aléatoires (x_offset, y_offset) pour chaque image et extrait les recadrages 16x16 correspondants dans un tableau de formes (4, 16, 16, 3) sans encourir une surcharge de mémoire inutile.

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