J'ai essayé de trouver l'entropie de l'image avec python

introduction

Récemment, je suis devenu spécialiste du traitement d'image dans un laboratoire universitaire, et j'ai eu l'occasion de revoir l'entropie des images, alors je l'ai résumé.

Qu'est-ce que l'entropie?

L'entropie signifie «désordre» et peut également être trouvée dans la thermodynamique et la mécanique statistique. L'entropie est également utilisée comme indicateur de la quantité d'informations dans une image.

La définition de l'entropie d'image est la suivante. Si le ton (niveau) de l'image est une image de valeur K avec 0 à (k-1) et que la probabilité d'apparition du niveau $ i $ est $ P_i , la quantité d'informations par pixel est $ I = log_2(1/P_i) = -log_2P_i [bit] $$ Puisque la quantité d'informations sur tout l'écran est de l'entropie, si le nombre total de pixels est $ N $ et le nombre de pixels au niveau $ i $ est $ N_i $, $ P_i $ sera $ P_i = N_i/N $ Entropie $ H = - \ sum P_ilog_2P_i [bit / pixel] $

Trouver la fonction d'entropie d'une image binaire (image en noir et blanc)

J'ai essayé de dessiner la fonction d'entropie de l'image binaire.

import numpy as np
import matplotlib.pyplot as plt

P0 = np.arange(0,1, 0.01) #Probabilité d'apparition de niveau 0 P0
P1 = 1 - P0 #Probabilité d'apparition de niveau 1 P1

#Calcul de l'entropie
H = -P0 * np.log2(P0) -P1 * np.log2(P1)

#Paramètres de dessin graphique
plt.plot(P0, H)
plt.xlabel("P0")
plt.ylabel("H")
plt.title('Entropy')

#Dessiner une étiquette
plt.legend()
#Exécution du dessin graphique
plt.show()

Résultat d'exécution D'après la figure ci-dessus, on peut voir que plus près de $ P_0 = 0,0 $ ou $ P_0 = 1,0 $, plus l'entropie est petite, et lorsque $ P_0 = 0,5 $, l'entropie est maximisée. En d'autres termes, plus il est proche du blanc ou du noir, plus l'entropie est petite, et lorsque la probabilité d'apparition du blanc et du noir est de 50% chacun, l'entropie augmente.

Cela signifie que plus l'utilisation des couleurs de l'image est compliquée, plus la quantité d'informations est grande et plus l'utilisation des couleurs de l'image est simple, plus la quantité d'informations est petite.

Trouvez l'entropie d'une image en noir et blanc

Ensuite, trouvons l'entropie de l'image de la lena en noir et blanc.

import cv2
import matplotlib.pyplot as plt
import numpy as np

img = cv2.imread('./img_data/lena_gray.jpg') #Veuillez changer le bus du fichier le cas échéant

#Calcul de l'histogramme (nombre de pixels de chaque couleur)
histgram = [0]*256
for i in range(256):
    for j in range(256):
        histgram[img[i, j, 0]] += 1

#Calcul de l'entropie
size = img.shape[0] * img.shape[1]
entropy = 0

for i in range(256):
    #Probabilité d'apparition de niveau i p
    p = histgram[i]/size
    if p == 0:
        continue
    entropy -= p*math.log2(p)

plt.imshow(img)
print('Entropie:{}'.format(entropy))

Résultat d'exécution

Résumé

Je ne pouvais écrire que les super bases de l'entropie, mais je suis content d'avoir pu l'examiner grâce à la programmation. Si vous avez des erreurs, veuillez les signaler.

Recommended Posts

J'ai essayé de trouver l'entropie de l'image avec python
J'ai essayé la "correction gamma" de l'image avec Python + OpenCV
J'ai essayé de trouver la moyenne de plusieurs colonnes avec TensorFlow
J'ai essayé de "lisser" l'image avec Python + OpenCV
J'ai essayé de "différencier" l'image avec Python + OpenCV
J'ai essayé de corriger la forme trapézoïdale de l'image
J'ai essayé de "binariser" l'image avec Python + OpenCV
J'ai essayé d'améliorer l'efficacité du travail quotidien avec Python
J'ai essayé d'obtenir le code d'authentification de l'API Qiita avec Python.
J'ai essayé de rationaliser le rôle standard des nouveaux employés avec Python
J'ai essayé d'obtenir les informations sur le film de l'API TMDb avec Python
J'ai essayé de toucher un fichier CSV avec Python
[OpenCV / Python] J'ai essayé l'analyse d'image de cellules avec OpenCV
J'ai essayé de résoudre Soma Cube avec python
J'ai essayé de résoudre le problème avec Python Vol.1
J'ai essayé de résumer les opérations de chaîne de Python
[Python] J'ai essayé de juger l'image du membre du groupe d'idols en utilisant Keras
J'ai essayé de visualiser facilement les tweets de JAWS DAYS 2017 avec Python + ELK
J'ai essayé d'envoyer automatiquement la littérature du nouveau virus corona à LINE avec Python
J'ai essayé de simuler la propagation de l'infection avec Python
[Python] J'ai essayé de visualiser la relation de suivi de Twitter
J'ai essayé de jouer avec l'image avec Pillow
J'ai étudié comment rationaliser le flux de travail avec Excel x Python ②
J'ai étudié comment rationaliser le flux de travail avec Excel x Python ④
J'ai essayé de savoir comment rationaliser le flux de travail avec Excel x Python ⑤
J'ai essayé d'automatiser la mise à jour de l'article du blog Livedoor avec Python et sélénium.
J'ai étudié comment rationaliser le flux de travail avec Excel x Python ①
J'ai étudié comment rationaliser le flux de travail avec Excel x Python ③
J'ai essayé de comparer la vitesse de traitement avec dplyr de R et pandas de Python
Le 15e temps réel hors ligne, j'ai essayé de résoudre le problème de l'écriture avec python
J'ai essayé de gratter le classement du calendrier de l'avent Qiita avec Python
J'ai essayé de résoudre l'édition du débutant du livre des fourmis avec python
J'ai essayé d'automatiser l'arrosage du pot avec Raspberry Pi
J'ai essayé de créer l'image de démarrage SD de LicheePi Nano
Je veux sortir le début du mois prochain avec Python
J'ai essayé de créer une liste de nombres premiers avec python
J'ai essayé de traiter l'image en "style croquis" avec OpenCV
J'ai essayé de corriger "J'ai essayé la simulation probabiliste du jeu de bingo avec Python"
J'ai essayé de savoir si ReDoS est possible avec Python
J'ai essayé de traiter l'image dans un "style de dessin au crayon" avec OpenCV
J'ai essayé d'agrandir la taille du volume logique avec LVM
J'ai essayé de collecter automatiquement des images de Kanna Hashimoto avec Python! !!
J'ai essayé de créer une fonction de similitude d'image avec Python + OpenCV
PhytoMine-I a essayé d'obtenir les informations génétiques de la plante avec Python
J'ai essayé de résoudre le problème de F02 comment écrire en temps réel hors ligne avec Python
J'ai écrit un doctest dans "J'ai essayé de simuler la probabilité d'un jeu de bingo avec Python"
J'ai essayé des centaines de millions de SQLite avec python
J'ai essayé la reconnaissance d'image de CIFAR-10 avec Keras-Learning-
J'ai essayé la reconnaissance d'image de CIFAR-10 avec la reconnaissance d'image Keras-
J'ai essayé de sauvegarder les données avec discorde
J'ai essayé de trouver le rapport de circonférence par 100 millions de chiffres
J'ai essayé d'obtenir des données CloudWatch avec Python
J'ai essayé de sortir LLVM IR avec Python
J'ai essayé d'automatiser la fabrication des sushis avec python
J'ai essayé d'utiliser le filtre d'image d'OpenCV
J'ai essayé de vectoriser les paroles de Hinatazaka 46!