Considérez la vitesse de traitement pour déplacer le tampon d'image avec numpy.ndarray

Contexte

Lors du traitement d'une vidéo, vous souhaiterez peut-être mettre en mémoire tampon n images consécutives. Ainsi, lorsque vous voulez rouler le tampon et l'utiliser, vous devez décaler l'index du tampon.

Lors du traitement avec numpy, je pense qu'il existe les deux méthodes de traitement suivantes.

  1. Utilisez la méthode numpy.roll
  2. Décalez l'index du tableau et attribuez

Je souhaite utiliser la méthode de traitement la plus rapide possible, je vais donc considérer lequel de ces deux processus est le plus rapide.

environnement

résultat de l'inspection

J'ai essayé le processus suivant sur un ordinateur portable jupyter.

Définit le premier index du tableau sur l'index indiquant le nombre d'images

arr1 = np.zeros((30, 720, 1280))
# numpy.Utilisez la méthode du rouleau
%timeit np.roll(arr1, 1, axis = 0)
# 147 ms ± 1.73 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)

#Remplacer par décalage par index
%timeit arr1[1:,:,:] = arr1[0:-1,:,:]
# 189 ms ± 7.14 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)

Définit le dernier index du tableau sur l'index indiquant le nombre d'images

arr2 = np.zeros((720, 1280, 30))
# numpy.Utilisez la méthode du rouleau
%timeit np.roll(arr2, 1, axis = 2)
# 186 ms ± 2.71 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)

#Remplacer par décalage par index
%timeit arr2[:,:, 1:] = arr2[:,:,0:-1]
# 203 ms ± 1.06 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)

Il semble que l'utilisation de numpy.roll soit plus rapide à condition que la taille de l'image soit grande. De plus, il semble plus rapide de changer d'image au premier index.

Si l'image est petite

Lorsque l'image est très petite (20x20pixel), le résultat est que le décalage d'index est plus rapide, comme indiqué ci-dessous.

arr3 = np.zeros((30, 20, 20))
# numpy.Utilisez la méthode du rouleau
%timeit np.roll(arr3, 1, axis = 0)
# 17.1 µs ± 551 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)

#Remplacer par décalage par index
%timeit arr3[1:,:,:] = arr3[0:-1,:,:]
# 7.36 µs ± 90.1 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)

Points auxquels j'étais accro en termes de mise en œuvre du traitement

#erreur
arr[0:-2,:,:] = arr[1:-1,:,:]
arr[-1,:,:] = new_image

#Bonne réponse
arr[0:-1,:,:] = arr[1:,:,:]
arr[-1,:,:] = new_image

La définition du premier index sur -1 spécifie le dernier index.

arr[1:-1,:,:]Puis


 À première vue, il semble que vous puissiez spécifier du deuxième au premier (jusqu'au dernier index).
 En fait, puisque la seconde à la seconde est spécifiée, le mouvement est que la dernière image ne se déplace pas vers l'avant.



Recommended Posts

Considérez la vitesse de traitement pour déplacer le tampon d'image avec numpy.ndarray
J'ai essayé de comparer la vitesse de traitement avec dplyr de R et pandas de Python
Comment augmenter la vitesse de traitement de l'acquisition de la position des sommets
Dessin avec Matrix-Reinventor of Python Image Processing-
J'ai essayé d'obtenir les résultats de Hachinai en utilisant le traitement d'image
Comment couper la partie inférieure droite de l'image avec Python OpenCV
Essayez d'imaginer les données d'élévation du National Land Research Institute avec Python
[Reconnaissance d'image] Comment lire le résultat de l'annotation automatique avec VoTT
Coupez l'image aux coins arrondis avec pythonista
À propos de la vitesse de traitement de SVM (SVC) de scikit-learn
J'ai essayé de corriger la forme trapézoïdale de l'image
Traitement d'image? L'histoire du démarrage de Python pour
J'ai vérifié la vitesse de traitement de la numpy unidimensionnelle
Traitement d'image avec MyHDL
Extraire le tableau des fichiers image avec OneDrive et Python
Ajoutez des informations au bas de la figure avec Matplotlib
[Chapitre 5] Introduction à Python avec 100 coups de traitement du langage
[Chapitre 6] Introduction à scicit-learn avec 100 coups de traitement du langage
Convertissez l'image au format .zip en PDF avec Python
Essayez d'obtenir le contenu de Word avec Golang
[Chapitre 3] Introduction à Python avec 100 coups de traitement du langage
Traitement d'image avec Python
[Chapitre 2] Introduction à Python avec 100 coups de traitement du langage
[Chapitre 4] Introduction à Python avec 100 coups de traitement du langage
Traitement d'image avec PIL
Renvoyez les données d'image avec Flask of Python et dessinez-les dans l'élément canvas de HTML
J'ai essayé la "correction gamma" de l'image avec Python + OpenCV
J'ai essayé de trouver la moyenne de plusieurs colonnes avec TensorFlow
Recherche dans la base de données (vérification de la vitesse de traitement avec ou sans index)
Résumé de l'exploration d'image effectuée à la vitesse d'une seconde
Paramètres pour entrer et déboguer le contenu de la bibliothèque avec VS Code
Traitement linguistique 100 knocks-29: Obtenez l'URL de l'image du drapeau
Essayez d'automatiser le fonctionnement des périphériques réseau avec Python
Tentative d'ajuster automatiquement la vitesse des vidéos accélérées (partie 2)
[Jouons avec Python] Traitement d'image en monochrome et points
La fonction d'affichage d'image d'iTerm est pratique lors du traitement d'images.
Récupérez la source de la page à charger indéfiniment avec python.
Essayez d'extraire les caractéristiques des données de capteur avec CNN
Traitement d'image avec Python (partie 2)
opencv-python Introduction au traitement d'image
python3 Mesurez la vitesse de traitement.
Traitement d'image avec PIL (Pillow)
Point selon l'image
Traitement parallèle avec Parallel de scikit-learn
Traitement d'image avec Python (partie 1)
Traitement d'image avec Python (3)
[Python] Traitement d'image avec scicit-image
Que faire lorsqu'une partie de l'image d'arrière-plan devient transparente lorsque l'image transparente est combinée avec Oreiller
J'ai comparé la vitesse de Hash avec Topaz, Ruby et Python
Comprendre la fonction de convolution en utilisant le traitement d'image comme exemple
L'histoire de ne pas pouvoir exécuter pygame avec pycharm
Enregistrez le résultat de l'exploration avec Scrapy dans Google Data Store
Comparaison de vitesse du traitement de texte intégral de Wiktionary avec F # et Python
Familiarisez-vous avec (voulez être) autour du pipeline de spaCy
J'ai essayé d'automatiser l'arrosage du pot avec Raspberry Pi
[Statistiques] Saisir l'image de la théorie de la limitation du pôle central avec un graphe
Comment obtenir l'ID de Type2Tag NXP NTAG213 avec nfcpy
Affichez l'image de la caméra connectée à l'ordinateur personnel sur l'interface graphique.
J'ai essayé de créer l'image de démarrage SD de LicheePi Nano