RegistrierenRegistrieren   LoginLogin   FAQFAQ    SuchenSuchen   
Spektrum eines Punktes auf TFT als Punkt in RGB ausgeben
 
Neue Frage »
Antworten »
    Foren-Übersicht -> Optik
Autor Nachricht
Pflunz



Anmeldungsdatum: 06.06.2013
Beiträge: 4

Beitrag Pflunz Verfasst am: 06. Jun 2013 22:55    Titel: Spektrum eines Punktes auf TFT als Punkt in RGB ausgeben Antworten mit Zitat

Hallo,

für meine Diplomarbeit messe ich das Spektrum an einem Punkt, und rastere anschließend zum nächsten Punkt, messer dort wieder das Spektrum, fahre zum nächsten Punkt usw.

Das heißt ich habe nun z.B. 400x400 "Pixel", bei denen ich das komplette Spektrum vorliegen habe.
Nun hat er gemeint es wäre "nett", wenn man nun daraus ein komplettes Bild erstellen würde. Ich programmiere in einer Sprache ähnlich zu C, bei der ich ein Bildpunkt computertypisch in 12 Byte (also 4Byte pro RGB Farbe) angegeben wird (Also z.B. (FFFF,0000,0000) für einen roten Punkt )

Nun wie bekomme ich aus dem Spektrum die RGB Werte heraus?

Ich hatte mir etwas gedacht, wie drei gaußförmige Kurven (um die jeweiligen rot, grün und blau-Wellenlängen) mit denen das Spektrum dann gewichtet und summiert wird.
Also wenn die Gaußkurve für rot von 600-750nm geht, hätte ich dann so etwas (mit S(lambda) die Anzahl der Counts in dem Spektrum bei lambda, die Vorfaktorene sollen dann die y-Werte der Gaußkurve sein):
0,01*S(600)+0,02*S(601)+0,035*S(602)+0,053*S(603)+...+0,01*S(750)

Nun bekomme ich so dann 3 Werte für die die 3 Farben, welche aber weit unter FFFF(=65535) oder auch weit über FFFF liegen können. Das heißt diese müssten dann auch noch irgendwie normiert werden. (Vllt. den Maximalwert der 3 Werte auf FFFF skalieren)

Jetzt ist das alles andere als wissenschaftlich, da die Kurven ja keine Gaußkurven sind, und ich auch nicht weiß, ob man diese auch einfach so berechnen kann.

Das einzige was ich bis jetzt gefunden habe, ist eine Umrechnung einer Wellenlänge in RGB Werte. Ich könnte so eine Art "look-up-Table" erstellen, und einfach zu jeder Wellenlänge die jeweiligen RGB Werte ausgeben. Allerdings weiß ich auch nicht ob ich dann die Werte einfach so Mitteln kann.

Hat da vielleicht jemand eine Ahnung wie ich vorgehen soll?
In meiner Gruppe hat leider niemand wirklich Ahnung von Optik unglücklich
jh8979
Moderator


Anmeldungsdatum: 10.07.2012
Beiträge: 8583

Beitrag jh8979 Verfasst am: 07. Jun 2013 01:04    Titel: Antworten mit Zitat

Es gibt mehrere Möglichkeiten denk ich, je nachdem was genau Du machen willst. In jedem Fall musst Du wohl irgendwann Wellenlänge in RGB umrechnen. Einen Fortran Code der dies tut gibt es hier:
http://www.physics.sfasu.edu/astro/color/spectra.html

Welche Wellenlänge also nehmen aus einem Spektrum?
1.) Am einfachsten: Nimm einfach die Wellenlänge bei der das Spektrum ein Maximum hat. Das liefert Dir auf jeden Fall ein Bild (vermutlich sogar ein gar nicht mal so schlechtes).
2.) Etwas aufwendiger: Es ist auch möglich (mit einigen Annahmen) aus einem gegebenen Farbspektrum die Wellenlänge zu berechnen die ein menschliches Auge wahrnehmen würde. Im wesentlichen ist dies Deine "Mitteln"-Idee richtig und sorgfältig angewendet auf die spektralen Absorbtioskurven der Zapfen im Auge. Wie das z.B. geht ist von Glenn Smith schön erklärt in "Human color vision and the unsaturated blue color of the daytime sky" (Am. J. Phys. 73, 590 (2005)). Es ist etwas Mathematik nötig, aber wirklich scher ist es nicht und als Diplomand sollte das kein Problem sein.

Deine Idee des "einfachen Mittelns" geht natürlich auch, wenn man richtig normiert. Jede Methode die einem Spektrum eine Wellenlänge (oder gleich einen RGB-Wert) zuordnet funktioniert um ein Bild zu produzieren. Aber je nachdem was man als Ergebnis möchte (irgendeine Visualisierung, Grauschema, Bild-wie-ein-Mensch-es-sehen-wuerde,..), muss man natürlich die "richtige" Methode benutzen.
Pflunz



Anmeldungsdatum: 06.06.2013
Beiträge: 4

Beitrag Pflunz Verfasst am: 07. Jun 2013 11:08    Titel: Antworten mit Zitat

Danke schonmal smile

zu 1)
Das war auch die ursprüngliche Idee, zu der ich auch einen Code geschrieben habe (ähnlich zu deinem verlinkten)
Doch das Problem hier ist einfach:
Es gibt dann kein weiß und auch kein schwarz.
Denn irgendwo findet sich immer ein Maximum, und liegt dieses bei z.B. grün, wird eben anstatt schwarz, grün dargestelt.


Deswegen die Idee, ich suche mir einfach die 3 Farben, die der Monitor zum darstellen aller Farben brauch, sprich RGB.
Das Bild, welches ich dann hinterher auf dem PC haben möchte, sollte schon ordentlich mit dem original korrelieren, aber es muss nicht exakt gleich sein. Wichtig ist eben dass man etwas grünes als grün, blaues als blau, und weißes als weiß erkennt.
Ich werde mal testen, wie das Bild aussieht, wenn man zu jeder Wellenlänge die RGB Werte berechnet, diese mit der Anzahl der Counts pro Wellenlänge multipliziert, summiert und durch die Summe aller Counts dividiert. Denn ich denke in dieser Wellenlänge-> RGB Geschichte stecken schon die Absorptionskurven drin.
Ich werde das wahrscheinlich am Montag implementiert haben, und melde mich wie es aussieht
Pflunz



Anmeldungsdatum: 06.06.2013
Beiträge: 4

Beitrag Pflunz Verfasst am: 12. Jun 2013 00:55    Titel: Antworten mit Zitat

Also,

habe die Funktion nun eingebaut, und es funktioniert soweit. Habe sämtliche farbigen Gegenstände im Labor gemessen, und so ausgegeben.

Wir sind uns übrigens mittlerweile einig, dass das einer Faltung des Spektrums mit den Empfindlichkeiten der 3 Zäpfchen entspricht.

Die Farben ähneln sehr, allerdings ändern sich die Farben schon alleine wenn sämtliche RGB Werte z.B. mit 1,2 multipliziert werden, was einfach an der nicht-linearität unserer Monitore liegt. Das ist auch in Ordnung.

Allerdings gibt es Probleme bei "weiß". Nehme ich das Spektrum der Halogenlampe auf, wird dieses als rot-braun dargestellt. Die Tage versuche ich es noch mit etwas gewichten, da prinzipiel immer rot relativ stark durchkommt. Aber so weit scheint es zu funktionieren.
Wenn jemand eine Idee zu "weiß" hat (entsprechend wird bei schwarz ja auch immer eine Farbe dargestellt ) gerne her damit.
Vielleicht muss ich auch einfach nur eine Kalibrierungsmessung vornehmen, und so die Gesamtintensität ausrechnen (denn mit der oberen Methode bekomme ich auch immer die gleichen RGB Werte, also Helligkeit, egal ob ich mit voller oder halber Stärke beleuchte)
Neue Frage »
Antworten »
    Foren-Übersicht -> Optik