Hallo zusammen,
zurzeit schreibe ich an einer BA in der ich unteranderem einige Bilder analysieren möchte. Diese Analyse soll mir hauptsächlich den prozentualen Farbanteil eines Bildes liefern, um später diese Bilder besser gruppieren zu können. Der Code selbst ist für die schriftliche Ausarbeitung der BA nicht von Interesse, sondern dient zur Archivierung und Organisierung meiner Daten. Da ich aus Datenschutzgründen keine Bilder hochladen darf, kann hier ein beliebiges Bild verwendet werden. Der Code sollte jedoch folgende Punkte beinhalten, welcher mir bei der Sortierung helfen soll:
1.) Wenn möglich sollte dieser in Jupyter 6.0.3 geschrieben werden
Mein Ansatz bisher:
bild = plt.imread("image.png") # Bild einlesen
plt.imshow(bild)
bild_rot = bildl[:,:,0] # Die einzelnen Spalten (RGB) als arrays extrahieren
bild_gruen = bild[:,:,1]
bild_blau = bild[:,:,2]
print(bild_rot) # arrays ausgeben
print(bild_gruen)
print(bild_blau)
(das array kann variieren, es geht mir nur um den codeablauf)
[[0.06666667 0.09803922 0.09411765 ... 0.47058824 0.49019608 0.49019608]
[0.08235294 0.1254902 0.10588235 ... 0.4862745 0.5058824 0.49803922]
[0.03921569 0.07450981 0.09019608 ... 0.49411765 0.5058824 0.49803922]
...
[0.7058824 0.7058824 0.7058824 ... 0.5019608 0.5058824 0.50980395]
[0.7019608 0.69803923 0.69803923 ... 0.50980395 0.5058824 0.5019608 ]
[0.69803923 0.6901961 0.6901961 ... 0.5058824 0.49803922 0.49411765]]
[[0.3647059 0.36078432 0.35686275 ... 0.5176471 0.5176471 0.5254902 ]
[0.3647059 0.3529412 0.3529412 ... 0.52156866 0.52156866 0.53333336]
[0.36862746 0.3529412 0.36078432 ... 0.5294118 0.5294118 0.5372549 ]
...
[0.7490196 0.7490196 0.7490196 ... 0.5568628 0.5647059 0.5686275 ]
[0.7411765 0.7411765 0.7411765 ... 0.54901963 0.5568628 0.5647059 ]
[0.7372549 0.7372549 0.7372549 ... 0.5411765 0.5568628 0.56078434]]
[[0.68235296 0.68235296 0.6862745 ... 0.6784314 0.6862745 0.6862745 ]
[0.6784314 0.6901961 0.6901961 ... 0.6862745 0.6862745 0.6901961 ]
[0.68235296 0.69411767 0.6862745 ... 0.6901961 0.6901961 0.69411767]
...
[0.83137256 0.83137256 0.827451 ... 0.69411767 0.69411767 0.6901961 ]
[0.8235294 0.8235294 0.8235294 ... 0.6901961 0.6862745 0.6862745 ]
[0.81960785 0.8235294 0.81960785 ... 0.69411767 0.6862745 0.6862745 ]]
# hier scheitere ich an der Weiterverarbeitung der arrays
2.) Wenn möglich ein Durchschnitt der drei RGB Farbanteile
3.) Wenn ein beliebiger Farbanteil eines Pixels (z.B blau) größer als 1.1 dann wird eine Nachricht "Kategorie: blau_intensiv" angezeigt und erhält den Wert 1 (True)
3.1.) Wenn ein beliebiger Farbanteil eines Pixels (z.B blau) kleiner als 1.1 dann wird eine Nachricht "Kategorie: blau_arm" angezeigt und erhält den Wert 0 (False)
4.) Der Blaugrad zwischen "blau_intensiv" und "blau_arm" sollte mit drin sein
Idee: Zwei Variablen definieren und ins Verhältnis setzen?
Mfg
Xalagy
Prozentuale Anzeige der RGB Werte eines Bildes
Hi, Punkt 3 und 3.1 sind etwas seltsam.
Entweder liegen Farbwerte für RGB im Bereich von 0 bis 255 oder zwischen 0 und 1. (ersteres durch 255 geteilt). Deine Beispiele zeigen letzteres.
Dies bedeutet aber, dass ein beliebiger Farbanteil nicht größer als 1.1 sein kann.
Entweder liegen Farbwerte für RGB im Bereich von 0 bis 255 oder zwischen 0 und 1. (ersteres durch 255 geteilt). Deine Beispiele zeigen letzteres.
Dies bedeutet aber, dass ein beliebiger Farbanteil nicht größer als 1.1 sein kann.
Ich bin Pazifist und greife niemanden an, auch nicht mit Worten.
Für alle meine Code Beispiele gilt: "There is always a better way."
https://projecteuler.net/profile/Brotherluii.png
Für alle meine Code Beispiele gilt: "There is always a better way."
https://projecteuler.net/profile/Brotherluii.png
-
- User
- Beiträge: 510
- Registriert: Mittwoch 13. November 2019, 08:38
Code: Alles auswählen
print(bild.mean(axis=(0, 1)))
Es gibt Rechenformeln für so etwas. Die gehen so:
rot/(r+g+b)
grün/(r+g+b)
blau/(r+g+b)
Codemäßig ist das dann nur eine kleine Erweiterung deines Codes
und kann beispielhaft so aussehen.
Überprüfen kann man das mit einfarbigen Bildern.Beispiel: Ein rein gelbes Bild muss einen
Rot-Farbanteil und Grün-Anteil von jeweils 0.5 haben....der Blau-Anteil muß 0.0 sein
Abfangen braucht man nur reines schwarz(weil alle Farben=0 ->Division durch Null->mathematisch
nicht zulässig->Fehlermeldung)
rot/(r+g+b)
grün/(r+g+b)
blau/(r+g+b)
Codemäßig ist das dann nur eine kleine Erweiterung deines Codes
und kann beispielhaft so aussehen.
Code: Alles auswählen
import matplotlib.pyplot as plt
bild = plt.imread("bild.png") # Bild einlesen
bild_rot = bild[:,:,0] # Die einzelnen Spalten (RGB) als arrays extrahieren
bild_gruen = bild[:,:,1]
bild_blau = bild[:,:,2]
rm=bild_rot.mean()
gm=bild_gruen.mean()
bm=bild_blau.mean()
cols=rm+gm+bm
summe=(rm/cols)+(gm/cols)+(bm/cols)
print(" Rot-Anteil: ",rm/cols)
print("Grün-Anteil: ",gm/cols)
print("Blau-Anteil: ",bm/cols)
print("Anteilsumme: ",summe)
Rot-Farbanteil und Grün-Anteil von jeweils 0.5 haben....der Blau-Anteil muß 0.0 sein
Abfangen braucht man nur reines schwarz(weil alle Farben=0 ->Division durch Null->mathematisch
nicht zulässig->Fehlermeldung)