Hey , und danke dir nochmal für die Antwort. Die halbe Nacht habe ich noch dran gesessen um das weiter zu "verfeinern". Mir ist klar, dass ich als absoluter Einsteiger da noch nichts vernünftiges schreibe ^^, ich werde die Tage aber mir mal deine Tips anschauen , denn mir rennt die Zeit
Die eine Zählung die da gemacht wurde sollte auch eigentlich eine sein, die nicht nur schwarze Farben beinhaltet; ich hatte es aber glaube falsch kommentiert. Wenn ich mir deinen code so rasch anschaue , so verstehe ich da noch nicht so recht was da eigentlich passiert und ich glaube ich muss mir das mal ganz in Ruhe zu Gemüte führen.
Was ich gerade eher brauche ist, wie kann ich Bereiche definieren ? . Soweit funktioniert mein Programm ganz gut und klappt auch bei erstellten Testdateien. Da ich das mit dem RGB nicht so recht wusste wie ich das anstellen soll , habe ich auch einfach eine Farbtestdatei nur mit diesen drei Werten ohne Alphakanal(?) erstellt. Damit funktioniert dann auch mein kleines Demonstrationsbeispiel
zu der Bereichfrage:
also ich will sagen, dass in einem Farbdreieck die Farbe (man stelle sich ein rotes Farbdreieck vor) , immer dann gegeben ist, wenn sie innerhalb dieser drei Eckpunkte des Dreiecks liegen.
meine Eckpunkte, innerhalb deren Bereich alles rot ist sind: (254,3,4)-(254,38,5)-(252,8,42). ich weiß allerdings nicht wie ich das auf die schnelle schreibe. mir würde es wür das erste ausreichen , wenn ich einfach den Anfang (also wo ich r definiere) entsprechend umschreibe. auch wenn das vielleicht nicht elegant sein mag, für meine derzeitigen zwecke sollte es reichen
hier mal mein aktueller code (ich habe deine ideen wie gesagt noch nicht aufgenommen, da ich bei meinen sachen bisher allererste erfolgserlebnisse hatte (hatte ja netmal nen "hello word" programm geschrieben ^^); allerdings muss ich auch sagen, dass ich sie gerne aufnehmen möchte, sobald ich mich dem etwas mehr widmen kann. denn irgendwie macht mir programmieren spaß und vielleicht werd ich da mal etwas weiter mich reinfuchsen
:
Code: Alles auswählen
from PIL import Image
#Dieses Programm rastert das EBSD-Bild ab und wertet den Anteil absoluter Orientierungen, repraesentiert durch eine Farbe, aus.
img = Image.open("image5.png") # Eingabe der zu untersuchenden Grafikdatei (Datei im selben Ordner wie .py!)
r = (254,3,4) # Farbwert entspricht Absolutwert (001) entsprechend EBSD-Orientierungsdreieck
bl = (1,3,254) # Farbwert entspricht Absolutwert (111) entsprechend EBSD-Orientierungsdreieck
g = (4,254,4) # Farbwert entspricht Absolutwert (011) entsprechend EBSD-Orientierungsdreieck
b = (0,0,0) # Schwarzfarbauswahl entspricht dem Schwarz der Korngrenzen
#k=(0,0,0,255) #ALTERNATIVE KORNGRENZENFARBE, Wert kann beliebig angepasst werden; eine Aufnahme dieses Parameters erfordert allerdings eine zusaetzliche Funktion (trivial)
R=0 #counter rot ist Null
B=0 #counter blau ist Null
ABW=0 #counter abweichende Farbe (R,G,B) ist Null
G=0 #counter gruen ist Null
O=0 #schwarz
# Es erfolgt im Folgenden eine Abfrage ob das gefundene Pixel dem Farbwert entspricht, falls ja wird der entsprechende counter um 1 erhoeht
for pixel in img.getdata():
if pixel !=r and pixel !=bl and pixel !=g:
ABW +=1
elif pixel !=b and pixel !=g and pixel !=r:
B +=1
elif pixel !=b and pixel !=r and pixel !=bl:
G +=1
elif pixel !=b and pixel !=g and pixel !=bl:
R +=1
if pixel == (0,0,0):
O +=1
A=ABW+G+R+B #Berechnung der Gesamtpixelzahl
blackArea=(float(ABW)/float(A))*100 #Berechnung des Flaechenanteils abweichende Farbe
greenArea=(float(G)/float(A))*100 #Berechnung des Flaechenanteils Gruen
redArea=(float(R)/float(A))*100 #Berechnung des Flaechenanteils Rot
blueArea=(float(B)/float(A))*100 #Berechnung des Flaechenanteils Blau
P=(float(O)/float(A))*100 #Berechnung des Flaechenanteils schwarz
print("\n\n")
print("EBSD-Areacalc 1.0 Autor: noob")
print("\n\n")
print("\n Gesamtpixelzahl : "+str(A))
print("\n Anzahl abweichender Pixel: " +str(ABW)+ "\n Anzahl gruener Pixel: " +str(G)+ "\n Anzahl roter Pixel: " +str(R)+ "\n Anzahl blauer Pixel: " +str(B))
print("\n\n Anteil abweichender Orientierungen (inkl. Korngrenzen und zero solutions): \n\n "+str(float(blackArea))+" %"+ " (entspricht "+str(ABW)+ " Pixel der Gesamtflaeche)")
print("\n\n Anteil der Korngrenzen sowie der zero solutions an der EBSD-Gesamtbildflaeche:")
print("\n "+str(float(P))+" %")
print("\n\n Anteil der Orientierung an der EBSD-Gesamtbildflaeche:")
print("\n\n 011-Orientierung: "+str(float(greenArea))+" %")
print(" 001-Orientierung: "+str(float(redArea))+" %")
print(" 111-Orientierung: "+str(float(blueArea))+" %")