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é.
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
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.
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
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