Vor kurzem wurde ich Spezialist für Bildverarbeitung in einem Universitätslabor und hatte die Möglichkeit, die Bildentropie zu überprüfen, also fasste ich sie zusammen.
Entropie steht für "Zufälligkeit" und findet sich auch in der Thermodynamik und statistischen Mechanik. Die Entropie wird auch als Indikator für die Informationsmenge in einem Bild verwendet.
Die Definition der Bildentropie ist wie folgt.
Wenn der Ton (Pegel) des Bildes ein K-Wert-Bild mit 0 bis (k-1) ist und die Erscheinungswahrscheinlichkeit des Pegels $ i $ $ P_i $ ist, beträgt die Informationsmenge pro Pixel
Ich habe versucht, die Entropiefunktion des Binärbildes zu zeichnen.
import numpy as np
import matplotlib.pyplot as plt
P0 = np.arange(0,1, 0.01) #Erscheinungswahrscheinlichkeit der Stufe 0 P0
P1 = 1 - P0 #Erscheinungswahrscheinlichkeit der Stufe 1 P1
#Berechnung der Entropie
H = -P0 * np.log2(P0) -P1 * np.log2(P1)
#Einstellungen für die Grafikzeichnung
plt.plot(P0, H)
plt.xlabel("P0")
plt.ylabel("H")
plt.title('Entropy')
#Etikett zeichnen
plt.legend()
#Ausführung der Grafikzeichnung
plt.show()
Ausführungsergebnis Aus der obigen Abbildung ist ersichtlich, dass die Entropie maximiert ist, je näher an $ P_0 = 0,0 $ oder $ P_0 = 1,0 $ liegt, und wenn $ P_0 = 0,5 $ ist, wird die Entropie maximiert. Mit anderen Worten, je näher es an Weiß oder Schwarz ist, desto kleiner ist die Entropie, und wenn die Erscheinungswahrscheinlichkeit von Weiß und Schwarz jeweils 50% beträgt, nimmt die Entropie zu.
Dies bedeutet, dass je komplizierter die Farbnutzung des Bildes ist, desto größer die Informationsmenge ist und je einfacher die Farbnutzung des Bildes ist, desto geringer ist die Informationsmenge, was intuitiv ist.
Als nächstes finden wir die Entropie des Bildes der Schwarz-Weiß-Lina.
import cv2
import matplotlib.pyplot as plt
import numpy as np
img = cv2.imread('./img_data/lena_gray.jpg') #Bitte ändern Sie den Bus der Datei entsprechend
#Berechnung des Histogramms (Anzahl der Pixel jeder Farbe)
histgram = [0]*256
for i in range(256):
for j in range(256):
histgram[img[i, j, 0]] += 1
#Berechnung der Entropie
size = img.shape[0] * img.shape[1]
entropy = 0
for i in range(256):
#Level i Erscheinungswahrscheinlichkeit p
p = histgram[i]/size
if p == 0:
continue
entropy -= p*math.log2(p)
plt.imshow(img)
print('Entropie:{}'.format(entropy))
Ausführungsergebnis
Ich konnte nur die Super-Grundlagen der Entropie schreiben, aber ich bin froh, dass ich sie durch Programmierung überprüfen konnte. Wenn Sie Fehler haben, weisen Sie bitte darauf hin.
Recommended Posts