Gibt es irgendwo eine Beschreibung oder Algorithmus um eine gegeben Wellenlänge (des sichtbaren Lichts) in RGB-Werte umzurechnen/zuzuodnen? Eine habe ich gefunden in Form eines Fortran-Programms. Es geht, aber ich bin mir nicht sicher wie genau das ist. Schliesslich müsste man über die CIE XYZ Farben gehen.
Das anspruchsvollere Gegenteil. Ich möchte RGB in ein Spektrum umwandeln. Dabei soll das Spektrum möglichst kontinuierlich und "glatt" sein.
Es soll gelten: (R0, G0, B0) -> Spektrum -> Summe/Integral über Farben (R(lambda), G(lambda), B(lambda)) des Spektrums mal spektrale Intensität(lambda) -> (R1, G1, B1). Wobei für alle Farben RGB (mindestens für eine bestimmte Sättigung) gilt (R0, G0, B0) = (R1, G1, B1).
CIE sagt mir nichts. Aber letztendlich müsstest du über die spektralen Empfindlichkeitskurven des Auges integrieren. Problem: Diese sind von der Helligkeit abhängig und auch Betrachterspezifisch. Man kann also nur irgendeinen sinnvollen Mittelwert über alle Menschen bei durchschnittlicher Helligkeit verwenden. Du müsstest dir diese Kurven irgendwoher besorgen, ob als Funktion oder als Tabelle. Also Kurve in einem Diagramm habe ich sowas schon gesehen, schlimmstenfalls muss man sich da die Werte herausmessen.
Ist natürlich nicht eindeutig möglich. Im einfachsten Fall ist das Ergebnisspektrum einfach die lineare Überlagerung der Empfindkichkeitskurven des Auges jeweilt mit der RGB-Intensität multipliziert.
Je nach Einsatzzweck kann man hier verschiedenste Wege gehen. Idealerweise geht man von Empfindlichkeitsdistributionen f=C3=BCr jede der Grundfarben aus. F=C3=BCr jede Grundfarbe bildet man das Skalarprodukt aus Empfindlichkeitsdistribution und gegebenem Spektrum und erh=C3=A4lt so einen Zahlwert f=C3=BCr die gew=C3=BCnschte=
Grundfarbe.
Diese Aufgabe ist schlichtweg unm=C3=B6glich. Ein gegebenes RGB-Tupel kann durch eine praktisch unendliche Anzahl verschiedener Spektren erzeugt werden.
Geht man von den oben angesprochenen Empfindlichkeitsdistributionen aus k=C3=B6nnte man allenfalls diese Distributionen je nach Farbe skalieren und anschlie=C3=9Fend addieren.
Fakt ist nun mal, das RGB eine Ann=C3=A4herung an den menschlichen Sehapparat darstellt und nicht wirklich geeignet zur Representation von Spektren ist.
Ich habe mich mit dieser Problematik n=C3=A4her befasst, da ich in der
3D-Engine die ich momentan entwickle, auch die Beleuchtung durch Spektrallampen (wie z.B. Na-Dampf) akkurat wiedergeben wollte - letzendlich blieb mir nichts anderes =C3=BCbrig als zu tricksen, d.h. das Aussehen der Gegenst=C3=A4nde in bestimmtem Licht vorzuberechnen und entsprechende Texturen zus=C3=A4tzlich zu hinterlegen. Das in Echtzeit zu machen ist zwar nicht unm=C3=B6glich, resultiert aber in einem vielfach gr=C3=B6=C3=9Feren Speicherbedarf.
Nach welcher Variable integrierst Du da oben? Irgendwie wird mir das aus dieser Schreibweise nicht klar.
Und zu der anderen Frage. Nimm der Einfachheit halber an, die Empfindlichkeitsdistribution E(\lambda) =3D 1, d.h. das Ding reagiert auf alle Wellenl=C3=A4ngen gleich empfindlich (klar, sowas gibt es in der Praxis nicht, aber wir k=C3=B6nnen das der Einfachheit halber annehmen, mit einer Gau=C3=9Fschen Verteilung w=C3=BCrde es gena= uso funktionieren, wie mit jeder anderen Verteilung f=C3=BCr die gilt D(x)>0 und nach oben beschr=C3=A4nkt).
Nun die Frage: Wie viele Distributionen g_n(\lambda) gibt es, sodass f=C3=BCr ein gegebenes I
\int_{a}^{b} E(\lamda)*g_n(\lambda) d\lambda =3D I
E, g_n \in { Teilmenge von { |R -> |R } }
Diese Menge an Abbildungen ist =C3=BCberabz=C3=A4hlbar. Nun kann man nat=C3=BCrlich anfangen zu argumentieren, die Wellenl=C3=A4ngen seien j= a diskrete Vielfache von h-quer, aber auch rational betrachtet gibt es in der Oktave des EM-Spektrums das wir als sichtbares Lichts bezeichnen un=C3=BCberschaubar viele M=C3=B6glichkeiten einen gegebenen RGB-Farbeindruck herzustellen.
Ok, jetzt hab ich es verstanden. Das hilft zwar, aber nur ein wenig. Evtl. sollte man zus=C3=A4tzlich voraussetzen, dass die zweite Ableitung ebenfalls kaum variieren darf, d.h. es pro Kanal nur ein Maximum gibt.
Pardon. Ich integriere über lambda. Und I(lambda) ist das ubekannte Spektrum.
Wir haben ähnliche Sachen bei quantitativer Texturanalyse gemacht. Aus zweidimensionalen Polfiguren die dreidimensionale Orientierungsverteilungsfunktion rückrechnen. Es ist so, daß ein endlicher Satz Polfiguren mathematisch zu einer unendlichen Anzahl von Orientierungsverteilungen gehört. Der gemessene Kristall hat aber genau eine. Da mußte man Nebenbedingungen formulieren, die einigermaßen sinnvoll waren. Eine war: möglichst "glatte" Lösung. Dewegen habe ich mich überhaupt in die Diskussion eingeklinkt.
Unser Informationstheoretiker hat damals die Lösung mit maximaler (informationstheorietischer) Entropie favoriert. Auf das RGB-Problem übertragen würde das heißen: Das wahrscheinlichste Spektrum, das zu einem bestimmten RGB-Tripel führt ist, ist das mit der maximalen Entropie.
Vermutlich. Von den unendlichen Lösungen interessiert mich eine plausible. Da ich davon ausgehen dass die meisten täglichen Farbstoffe irgendwie kontinuierliche Spektren sollte die Lösung möglichst "glatt" sein.
Schaut man sich z.B. Spekten von Leuchtstofflampen an, dann bestehen diese - trotz einigermassen weissem Licht - aus einzelnen Peaks. Solche Spektren sind ausdrücklich nicht gemeint.
Mein erster Ansatz war, man zieht den Weissanteil von RGB ab und nimmt dann einen entsprechenden Anteil an weissen Licht (mit gleicher spektralen Intensität über alle Wellenlängen) und addiert oder subtrahiert dazu eine gaussförmige Kurve mit möglichst großem Sigma.
Ein Spektrum wie das von Natriumdampflampen mit deutlicher gelber Spektrallinie würde idealisert als RGB = (0, 1, 1) abgebildet werden. Das rekonstruierte Spektrum wäre ein breitbandiger Peak mit dem Maximum im gelben Bereich. Würde zwar nicht der Realität entsprechen, aber meine Hoffnung ist dass es für natürliche Farben mit nicht so extremer Sättigung (die meisten Farben auf Fotos haben nur weniger als 50% Sättigung) recht plausibel an das Orginal herankommt.
Nach grob ähnlichem Prinzip arbeitet der Algorithmus bechrieben auf
formatting link
Hier werden zu einem weissem Spektrum die Differenzanteile in Form von sechs Kurven für rot, grün, blau (welche entprechendes Licht nachbilden) und cyan, magenta und yellow (welche quasi entsprechende Absorbtionskurven nachbilden).
Ich auch nicht. Vorallem da ich gerade auf dem Schlauch stehe wie das mit "maximalen Entropie" gemeint ist.
Ich habe damals mit Reihenentwicklung gearbeitet und die Reihe so früh abgebrochen, daß (über-)bestimmte Gleichungssysteme entstanden. Bei RGB wäre das wohl eine Spektrum, daß durch eine Parabel 2. Ordnung beschrieben wird.
PolyTech Forum website is not affiliated with any of the manufacturers or service providers discussed here.
All logos and trade names are the property of their respective owners.