Spektrum in RGB

Hallo,

  1. 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.

  1. Das anspruchsvollere Gegenteil. Ich möchte RGB in ein Spektrum umwandeln. Dabei soll das Spektrum möglichst kontinuierlich und "glatt" sein.

  2. 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).
Reply to
Thomas Thiele
Loading thread data ...

Moin,

Thomas Thiele schrub:

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.

CU Rollo

Reply to
Roland Damm

"Thomas Thiele" schrieb:

Kommentarlos ein paar Links zu Farbmetriken:

formatting link
*.delphi.*&start=10&hl=de&scoring=d&rnum=19
formatting link
Grüße, Joachim

Reply to
Joachim Pimiskern

"Joachim Pimiskern" schrieb:

formatting link

Reply to
Joachim Pimiskern

Thomas Thiele schrieb:

ich gehe mal davon, daß der Quellcode nicht verfügbar ist?

Reply to
Andreas Demant

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.

Wolfgang Draxinger

--=20 E-Mail address works, Jabber: snipped-for-privacy@jabber.org, ICQ: 134682867

Reply to
Wolfgang Draxinger

Mathematisch wäre die Nebenbedingung durch

Integral (dI(lambda)/dlambda)^2 = min

formuliert. Gibt es dann unendlich verschiedene Lösungen?

Michael Dahms

Reply to
Michael Dahms

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.

Wolfgang Draxinger

--=20 E-Mail address works, Jabber: snipped-for-privacy@jabber.org, ICQ: 134682867

Reply to
Wolfgang Draxinger

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.

Wolfgang Draxinger

--=20 E-Mail address works, Jabber: snipped-for-privacy@jabber.org, ICQ: 134682867

Reply to
Wolfgang Draxinger

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.

Michael Dahms

Reply to
Michael Dahms

Na das ist doch mal eine brauchbare Einschr=C3=A4nkung und kommt dem tats=C3=A4chlichen Spektralverlauf vermutlich auch am n=C3=A4chsten.

Allerdings w=C3=BCsste ich aus dem Stegreif jetzt nicht, wie ich das in einem Algorithmus formulierte.

Wolfgang Draxinger

--=20 E-Mail address works, Jabber: snipped-for-privacy@jabber.org, ICQ: 134682867

Reply to
Wolfgang Draxinger

Andreas Demant schrieb:

formatting link
Nur, ist das halt nur ein grobe Näherung um Spektren zu zeichnen.

Reply to
Thomas Thiele

Wolfgang Draxinger schrieb:

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.

Reply to
Thomas Thiele

Ich auch nicht. Ist 20 Jahre her.

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.

Michael Dahms

Reply to
Michael Dahms

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.