Ich habe versucht, die Entropie des Bildes mit Python zu finden

Einführung

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.

Was ist Entropie?

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 $ I = log_2(1/P_i) = -log_2P_i [bit] $ Da die Informationsmenge auf dem gesamten Bildschirm Entropie ist, ist $ P_i $, wenn die Gesamtzahl der Pixel $ N $ und die Anzahl der Pixel auf der Ebene $ i $ $ N_i $ beträgt $ P_i = N_i/N $ Entropie $ H = - \ sum P_ilog_2P_i [Bit / Pixel] $

Finden Sie die Entropiefunktion eines Binärbildes (Schwarzweißbild)

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.

Finden Sie die Entropie eines Schwarzweißbildes

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

Zusammenfassung

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

Ich habe versucht, die Entropie des Bildes mit Python zu finden
Ich habe versucht, das Bild mit Python + OpenCV "gammakorrektur" zu machen
Ich habe versucht, mit TensorFlow den Durchschnitt mehrerer Spalten zu ermitteln
Ich habe versucht, das Bild mit Python + OpenCV zu "glätten"
Ich habe versucht, das Bild mit Python + OpenCV zu "differenzieren"
Ich habe versucht, die Trapezform des Bildes zu korrigieren
Ich habe versucht, das Bild mit Python + OpenCV zu "binarisieren"
Ich habe versucht, die Effizienz der täglichen Arbeit mit Python zu verbessern
Ich habe versucht, den Authentifizierungscode der Qiita-API mit Python abzurufen.
Ich habe versucht, die Standardrolle neuer Mitarbeiter mit Python zu optimieren
Ich habe versucht, die Filminformationen der TMDb-API mit Python abzurufen
Ich habe versucht, eine CSV-Datei mit Python zu berühren
[OpenCV / Python] Ich habe versucht, Bilder mit OpenCV zu analysieren
Ich habe versucht, Soma Cube mit Python zu lösen
Ich habe versucht, das Problem mit Python Vol.1 zu lösen
Ich habe versucht, die String-Operationen von Python zusammenzufassen
[Python] Ich habe versucht, das Mitgliederbild der Idolgruppe mithilfe von Keras zu beurteilen
Ich habe versucht, die Tweets von JAWS DAYS 2017 mit Python + ELK einfach zu visualisieren
Ich habe versucht, die Literatur des neuen Corona-Virus mit Python automatisch an LINE zu senden
Ich habe versucht zu simulieren, wie sich die Infektion mit Python ausbreitet
[Python] Ich habe versucht, die folgende Beziehung von Twitter zu visualisieren
Ich habe versucht, mit Pillow mit dem Bild zu spielen
Ich habe untersucht, wie der Arbeitsablauf mit Excel x Python optimiert werden kann
Ich habe untersucht, wie der Arbeitsablauf mit Excel x Python ④ optimiert werden kann
Ich habe versucht herauszufinden, wie der Arbeitsablauf mit Excel x Python optimiert werden kann
Ich habe versucht, das Artikel-Update des Livedoor-Blogs mit Python und Selen zu automatisieren.
Ich habe untersucht, wie der Arbeitsablauf mit Excel x Python optimiert werden kann
Ich habe untersucht, wie der Arbeitsablauf mit Excel x Python optimiert werden kann
Ich habe versucht, die Verarbeitungsgeschwindigkeit mit dplyr von R und pandas von Python zu vergleichen
Beim 15. Offline-Echtzeitversuch habe ich versucht, das Problem des Schreibens mit Python zu lösen
Ich habe versucht, das Ranking des Qiita-Adventskalenders mit Python zu kratzen
Ich habe versucht, die Anfängerausgabe des Ameisenbuchs mit Python zu lösen
Ich habe versucht, die Bewässerung des Pflanzgefäßes mit Raspberry Pi zu automatisieren
Ich habe versucht, das SD-Boot-Image von LicheePi Nano zu erstellen
Ich möchte den Anfang des nächsten Monats mit Python ausgeben
Ich habe versucht, mit Python eine Liste von Primzahlen zu erstellen
Ich habe versucht, das Bild mit OpenCV im "Skizzenstil" zu verarbeiten
Ich habe versucht zu beheben "Ich habe versucht, die Wahrscheinlichkeit eines Bingospiels mit Python zu simulieren"
Ich habe versucht herauszufinden, ob ReDoS mit Python möglich ist
Ich habe versucht, das Bild mit OpenCV im "Bleistift-Zeichenstil" zu verarbeiten
Ich habe versucht, die Größe des logischen Volumes mit LVM zu erweitern
Ich habe versucht, automatisch Bilder von Kanna Hashimoto mit Python zu sammeln! !!
Ich habe versucht, mit Python + OpenCV eine Bildähnlichkeitsfunktion zu erstellen
PhytoMine-I hat versucht, mit Python die genetischen Informationen der Pflanze zu erhalten
Ich habe versucht, das Problem von F02 zu lösen, wie man mit Python offline in Echtzeit schreibt
Ich schrieb einen Test in "Ich habe versucht, die Wahrscheinlichkeit eines Bingospiels mit Python zu simulieren".
Ich habe Hunderte Millionen SQLite mit Python ausprobiert
Ich habe versucht, Bilder mit CIFAR-10 mit Keras-Learning- zu erkennen.
Ich habe versucht, Bilder von CIFAR-10 mit Keras-Bilderkennung zu erkennen.
Ich habe versucht, die Daten mit Zwietracht zu speichern
Ich habe versucht, das Umfangsverhältnis mit 100 Millionen Stellen zu ermitteln
Ich habe versucht, CloudWatch-Daten mit Python abzurufen
Ich habe versucht, LLVM IR mit Python auszugeben
Ich habe versucht, die Herstellung von Sushi mit Python zu automatisieren
Ich habe versucht, den Bildfilter von OpenCV zu verwenden
Ich habe versucht, die Texte von Hinatazaka 46 zu vektorisieren!