Discussion:
[OT ]Welenlänge->RGB
(zu alt für eine Antwort)
Jakob Keres
2006-07-31 13:51:23 UTC
Permalink
Hallo zusammen,

hat jemand zufällig eine Klasse parat, die aus der Wellenlänge den
RGB-Wert berechnet. Meinetwegen auch aus eine Lookup-Table oder so.

Viele Grüße
Jakob
Ingo R. Homann
2006-07-31 14:41:19 UTC
Permalink
Hi,
Post by Jakob Keres
Hallo zusammen,
hat jemand zufällig eine Klasse parat, die aus der Wellenlänge den
RGB-Wert berechnet. Meinetwegen auch aus eine Lookup-Table oder so.
Leider kenne ich keine direkte Antwort. Aber google doch mal nach den
Farbräumen "HSV" bzw. "HSI". Der "Hue"-Kanal ist genau das, was Du
suchst (ausser, dass Du ihn noch linear transformieren (auf Deutsch: mit
einem Faktor multiplizieren und einen Offset addieren :-) musst. Die
Faktoren sollten sich dabei extrem einfach (durch Blick auf ein
Spektrogramm) ermitteln lassen).

Hth,
Ingo
Ralf Ullrich
2006-07-31 16:39:47 UTC
Permalink
Post by Ingo R. Homann
Hi,
Post by Jakob Keres
Hallo zusammen,
hat jemand zufällig eine Klasse parat, die aus der Wellenlänge den
RGB-Wert berechnet. Meinetwegen auch aus eine Lookup-Table oder so.
Leider kenne ich keine direkte Antwort. Aber google doch mal nach den
Farbräumen "HSV" bzw. "HSI". Der "Hue"-Kanal ist genau das, was Du suchst
(ausser, dass Du ihn noch linear transformieren (auf Deutsch: mit einem
Faktor multiplizieren und einen Offset addieren :-) musst. Die Faktoren
sollten sich dabei extrem einfach (durch Blick auf ein Spektrogramm)
ermitteln lassen).
Bist du sicher mit der linearen Transformation?

Ich meine wenn Hue beispielsweise von 0 bis 255 geht, dann sind h und (h +
128) % 256 Komplementärfarben. Ist das bei den Wellenlängen so
gewährleistet?


Zum OP: Nur die reinen Farben könnten wenn überhaupt eine Entsprechung als
Wellenlänge haben*. Die meisten Farben sind jedoch (wie im realen Leben)
aus mehreren Wellenlängen (um nicht zu sagen einem ganzen Spektrum)
zusammengesetzt.

Damit wird deine RGB umrechnung recht simpel:

Seien r,g,b die Grundfarbenanteile einer Farbe f in 0 bis 100% und R,G,B
das Farbspektrum wie es ein idealer Monitor für die Grundfarben Rot, Grün
und Blau ausstrahlt. Dann ist das Farbspektrum F der Farbe f, weil es sich
um ein additives Farbmodell handelt einfach:

F(f) = r(f)*R + g(f)*G + b(f)*B

Die Wellenlängen eines Regenbogens kannst du daraus aber IMHO ebenfalls
nicht berechnen.


BTW: AFAIK ist die Intepretation des Wellenlängenbereichs des sichtbaren
Lichts als kontinuierliches Regenbogenspektrum eine physiologische
Illusion, da unser Auge eigentlich ebenfalls nur auf bestimmten
Wellenlängen empfindlich ist.

Daher die neugierige Frage: Was willst du eigentlich mit der Umrechnung
anfangen?

cu


* haben sie aber IMHO nicht, da die Farbmodelle eben Vereinfachungen sind,
die über die Physik der Wellenlängen und die Sinneswahrnehmung im Auge
vereinfachende Annahmen einführen, die nichts mehr mit der Realtität zu
tun haben. Beispielsweise gibt es physikalisch keinen Farbkreis, in
unserer Wahrnehmung scheint er aber unausweichlich zu sein.
Stefan Ram
2006-07-31 18:58:08 UTC
Permalink
Post by Ralf Ullrich
Seien r,g,b die Grundfarbenanteile einer Farbe f in 0 bis 100% und R,G,B
das Farbspektrum wie es ein idealer Monitor für die Grundfarben Rot, Grün
und Blau ausstrahlt. Dann ist das Farbspektrum F der Farbe f, weil es sich
F(f) = r(f)*R + g(f)*G + b(f)*B
Die Wellenlängen eines Regenbogens kannst du daraus aber IMHO ebenfalls
nicht berechnen.
Ich würde umgekehrt vorgehen:

Seien sr, sg und sb die Empfindlichkeiten der drei
Zäpfchentypen des Auges für Licht in Abhängigkeit von der
Frequenz, dann erhalte ich für jede Regenbogenfrequenz f das
Tripel (R, G, B) als (sr(f), sg(f), sb(f)). sr, sg und sb kann
man der gängigen Literatur entnehmen, wobei man künstliche
Mittelwerte heranzieht, da einzelne Menschen ja individuelle
Abweichungen haben.

Diese Abbildung ist nicht surjektiv: Bestimmte Mischfarben
findet man nicht im Regenbogen.
Post by Ralf Ullrich
BTW: AFAIK ist die Intepretation des Wellenlängenbereichs des sichtbaren
Lichts als kontinuierliches Regenbogenspektrum eine physiologische
Illusion, da unser Auge eigentlich ebenfalls nur auf bestimmten
Wellenlängen empfindlich ist.
Man kann sagen "Illusion", man könnte aber auch sagen
"Wahrnehmung" oder "Empfindung". Die drei Wellenlängen des
Auges überlappen sich, und es gibt Unregelmäßigkeit: Der
Rot-Sensor spricht nochmal auf das tiefe Blau an, das deswegen
als Violett erscheint. Außerdem sind viele Menschen irgendwie
farbenblind, während andere noch einen vierten Typ von
Zäpfchen haben. Die Umwandlung von Regenbogenfarben nach RGB
muß sich daher an einem mittleren Menschen orientieren, für
alle anderen weicht ein Regenbogen auf einem RGB-Monitor mehr
oder weniger von dem direkt gesehenen Regenbogen ab.

(Dies schrieb ich ohne Recherchen aus dem Gedächtnis, weswegen
für alles die Einschränkungen "WIMRE" und "AFAIK" gelten.)
Stefan Ram
2006-08-05 22:33:21 UTC
Permalink
Post by Stefan Ram
als Violett erscheint. Außerdem sind viele Menschen irgendwie
farbenblind, während andere noch einen vierten Typ von
Zäpfchen haben. Die Umwandlung von Regenbogenfarben nach RGB
Ich bin ja hier nun schon fast etwas vom Thema "Java" entfernt,
aber weil es so gut dazu paßt: Hier

http://scienceblogs.com/cognitivedaily/2006/07/do_women_perceive_color_differ_1.php

wird beschrieben, wie Menschen mit verschiedenen
Pigmentausstattungen Farben, und insbesondere ein Spektrum,
wahrnehmen:

»Four-pigment females perceived significantly more bands
of color than both three-pigment males and females.«
Stefan Ram
2006-08-24 16:35:29 UTC
Permalink
Post by Stefan Ram
Ich bin ja hier nun schon fast etwas vom Thema "Java" entfernt,
aber weil es so gut dazu paßt: Hier
http://scienceblogs.com/cognitivedaily/2006/07/do_women_perceive_color_differ_1.php
Ein neuer Monitor soll alle Wellenlängen direkt ausgeben
können:

http://news.bbc.co.uk/2/hi/technology/5263108.stm

Allerdings wird dabei übersehen, daß Farben nicht nur aus
Licht einer einzigen Wellenlänge bestehen, sondern auch aus
beliebigen Mischungen von Wellenlängen verschiedener Frequenz.

Daher bräuchte man einen Monitor, bei dem jeder Punkt eine
ganze Energiedichte über dem Spektrum darstellen kann (oder
man muß das wieder mit "Dithering" annähern). Was aber dann
auch von der Software diese große Informationsmenge verlangt.

Da das Auge aber nur Sensoren für drei oder vier Frequenzen
hat (vereinfacht gesagt), ist ein RGB-Monitor doch schon eine
gute Annäherung, so daß sich größerer Aufwand nicht unbedingt
mehr lohnt. Abweichungen kommen eher dadurch zustande, daß bei
der Ermittlung der RGB-Werte ein Durchschnittsauge
zugrundegelegt wird, das vom Auge des Monitorbetrachters
abweichen kann.

Eine Verbesserung mit weniger Hardwareaufwand wäre möglich,
wenn man bei jedem Menschen die Empfindlichkeit und Art seiner
Sensoren ausmäße (manche Menschen haben zwei, andere vier
Farbsensortypen) und dann per Software die ausgegebenen
RGB-Werte so anpaßte, daß die Abweichung zur beabsichtigten
Farbe unter Einbeziehung dieser Meßwerte minimiert wird.
Solch eine Messung ist heute noch nicht so möglich.
Ralf Ullrich
2006-08-24 18:36:25 UTC
Permalink
Post by Stefan Ram
Ein neuer Monitor soll alle Wellenlängen direkt ausgeben
http://news.bbc.co.uk/2/hi/technology/5263108.stm
Allerdings wird dabei übersehen, daß Farben nicht nur aus
Licht einer einzigen Wellenlänge bestehen, sondern auch aus
beliebigen Mischungen von Wellenlängen verschiedener Frequenz.
Ich denke es wird bei der Aussage aus dem Artikel "When pure white light
from a light emitting diode (LED) hits the grate it is split into the full
spectrum of colours like a rainbow produced by a prism." vielmehr
übersehen, als dass Farben nicht nur aus einer einzigen Wellenlänge
bestehen.

Die "Mikroprismen" des neuen Verfahrens können ja keine neuen Wellenlängen
zum Spektrum der Lichquelle hinzuerfinden, sondern nur vorhandene daraus
selektieren.

"Weiße" LEDs haben aber meines Wissens kein "weißes" Spektrum sondern
eines mit zwei Maxima (um Blau und Gelb) und sie erscheinen nur unseren
Rezeptoren im Auge als Weiß.

Ein Betrug, der mit dem Verfahren sofort auffallen würde, wenn mit einem
LED-beleuchteten Display eine rote Rose dargestellt werden soll.


Meines Wissens müsste ähnliche Probleme mit allen Kaltlichtquellen
auftreten. Wir kämen also mit dem neuen Verfahren zurück zum Problem der
heißen Lampen, das wir von Projektoren zur Genüge kennen.

cu
Stefan Ram
2006-08-26 13:27:11 UTC
Permalink
Post by Ralf Ullrich
Ein Betrug, der mit dem Verfahren sofort auffallen würde, wenn mit einem
LED-beleuchteten Display eine rote Rose dargestellt werden soll.
Dann gibt es ja noch die Frage der Dynamik, bei der
herkömmliche Bildmedien gegenüber der direkten Betrachtung
unterlegen sind.

Wenn man Bilder mehrerer Belichtungen überlagert

http://www.flickr.com/groups/hdr/discuss/40580/

, kann man die Dynamik einer Aufnahme erhöhen. Es gibt dann
auch wieder "HDR-Displays"

http://de.wikipedia.org/wiki/High_Dynamic_Range

, die solch einen größeren Kontrastumfang anzeigen können.

Durch eine berechnete Ersatzdarstellung kann man auf normalen
Monitoren einen Eindruck von HDR-Bildern erhalten, z.B.:

http://www.flickr.com/photos/jeffclow/76478916/
Hauke Ingmar
2006-08-26 22:55:59 UTC
Permalink
Moin!
Post by Stefan Ram
Post by Ralf Ullrich
Ein Betrug, der mit dem Verfahren sofort auffallen würde, wenn mit einem
LED-beleuchteten Display eine rote Rose dargestellt werden soll.
Dann gibt es ja noch die Frage der Dynamik, bei der
herkömmliche Bildmedien gegenüber der direkten Betrachtung
unterlegen sind.
Wenn man Bilder mehrerer Belichtungen überlagert
http://www.flickr.com/groups/hdr/discuss/40580/
, kann man die Dynamik einer Aufnahme erhöhen. Es gibt dann
auch wieder "HDR-Displays"
http://de.wikipedia.org/wiki/High_Dynamic_Range
, die solch einen größeren Kontrastumfang anzeigen können.
Durch eine berechnete Ersatzdarstellung kann man auf normalen
http://www.flickr.com/photos/jeffclow/76478916/
Ich glaube, das letzte Bild zeichnet etwas anderes aus als das, was Du dort
oben nennst. HDR ist der falsche Ausdruck; der Schaffer des Bildes meinte
DRI. Dies bezeichnet hier nur eine Methode, gewisse Beschneidungen des
Dynamikumfangs der Eingabedaten zu umgehen, indem man einfach mehrere
Bilder verschiedener Belichtungen zusammensetzt und damit den Dynamikumfang
der Ausgabedaten erreicht.

http://de.wikipedia.org/wiki/Dynamic_Range_Increase

Eine Digitalkamera hat je nach Qualität vielleicht einen Dynamikumfang von
4-6 Blendenstufen (1:16 ~ 1:64). Wenn man diese ausnutzt, hat man in den
dunklen Bereichen aber immer noch viel Rauschen, in den hellen evtl.
Clipping, effektiv nutzbar ist also noch viel weniger. Einfache Lösung: Bei
statischen Bildern macht man einfach mehrere Bilder mit unterschiedlicher
Belichtung, nutzt jeweils den mittleren Bereich der Belichtung und setzt
sie entsprechend zusammen.
Das hat mit "berechneter Ersatzdarstellung" nichts zu tun, sondern ist nur
ein Trick, um die Beschränkung der Eingabedaten zu umgehen.
Klar kann man auch durch solche Tricks in den Bereich der echten
HDR-Bildern kommen, da braucht man aber schon einen ganzen Haufen von
Bildern.

Bis denn
Stefan Ram
2006-11-03 05:02:48 UTC
Permalink
Post by Stefan Ram
Man kann sagen "Illusion", man könnte aber auch sagen
"Wahrnehmung" oder "Empfindung". Die drei Wellenlängen des
Hinzu kommt noch, daß die Wahrnehmung mit der Objekterkennung
verwoben ist:

»The participant''s task was to adjust the colour of the
onscreen banana until it blended exactly with the grey
background. It sounds easy, but the participants couldn't
do it because as they adjusted the colour, they
compensated not just for the banana's actual pink
pigmentation, but also for a yellowness that only existed
in their mind, thus leaving the banana with a slight
bluish hue.«

http://bps-research-digest.blogspot.com/2006/10/why-its-so-hard-to-find-blue-banana.html
Jakob Keres
2006-08-01 07:18:25 UTC
Permalink
Hi,

letztendlich möchte ich sowas wie ein Wärmebild erstellen, bei dem die
Farben von blau über grün und gelb ins rote gehen. Wenn das nun halt
nicht genau die Farben sind, die man bei Brechung durch ein Prisma
erhält, ist das auch kein Problem. D.h. mit HSV scheine ich schon klar
zu kommen.

Viele Grüße
Jakob
Ralf Ullrich
2006-08-01 09:25:38 UTC
Permalink
Post by Jakob Keres
Hi,
letztendlich möchte ich sowas wie ein Wärmebild erstellen, bei dem die
Farben von blau über grün und gelb ins rote gehen. Wenn das nun halt nicht
genau die Farben sind, die man bei Brechung durch ein Prisma erhält, ist
das auch kein Problem. D.h. mit HSV scheine ich schon klar zu kommen.
OK, du suchst also einen Weg eine Farbskala zu definieren, die den
gesamten Regenbogen umfasst. Nun Bilder dieser Art nennt man
Falschfarbenbilder, wobei die Engländer genauer sind und zwischen false
color image und pseudo color image unterscheiden. Letzteres willst du
machen.

Ein Beispiel wie die drei Funktionen für die Farben Rot, Grün und Blau
aussehen könnten um eine solche Skala zu erzeugen ist hier zu sehen:

Loading Image...

(aus http://www.profc.udec.cl/~gabriel/tutoriales/rsnote/cp10/cp10-4.htm )

Eine andere Methode wird hier beschrieben:

http://www.dca.fee.unicamp.br/dipcourse/html-dip/c4/s10/front-page.html

In Java könnte das dann so aussehen:

package de.jnana.dclj;

public abstract class PseudoColorScale {

private final double minValue;

private final double maxValue;

protected PseudoColorScale(double minValue, double maxValue) {
if (minValue >= maxValue) {
throw new IllegalArgumentException();
}
this.minValue = minValue;
this.maxValue = maxValue;
}

public PseudoColorScale getLinearInstance(double minValue, double maxValue) {
return new PseudoColorScale(minValue, maxValue) {

@Override
protected double calcRed(double normalized) {
if (normalized <= 0.4d) {
return 0d;
}
if (normalized >= 0.6d) {
return 1d;
}
return 5d * (normalized - 0.4d);
}

@Override
protected double calcGreen(double normalized) {
if ((normalized >= 0.2d) && (normalized <= 0.6d)) {
return 1d;
}
if (normalized >= 0.8d) {
return 0d;
}
if (normalized > 0.6d) {
return 5d * (0.8d - normalized);
} else {
return 5d * normalized;
}
}

@Override
protected double calcBlue(double normalized) {
if (normalized <= 0.2d) {
return 1d;
}
if ((normalized >= 0.4d) && (normalized <= 0.8d)) {
return 0d;
}
if (normalized > 0.8d) {
return 5d * (normalized - 0.8d);
} else {
return 5d * (0.2d - normalized);
}
}
};
}

public PseudoColorScale getSinusoidInstance(double minValue, double maxValue) {
return new PseudoColorScale(minValue, maxValue) {

@Override
protected double normalize(double value) {
return super.normalize(value) * Math.PI * 2d;
}

private double sinusoid(double x) {
return (1d + Math.sin(x)) / 2d;
}

@Override
protected double calcRed(double normalized) {
return -sinusoid(normalized);
}

@Override
protected double calcGreen(double normalized) {
return sinusoid(normalized + Math.PI);
}

@Override
protected double calcBlue(double normalized) {
return sinusoid(normalized);
}
};
}

public double[] calcColor(double value, double[] color) {
if ((minValue < value) || (maxValue > value)) {
throw new IllegalArgumentException("value");
}
double[] rv = color;
if (rv == null) {
rv = new double[3];
} else if (rv.length != 3) {
throw new IllegalArgumentException("color");
}

double normalized = normalize(value);
rv[0] = calcRed(normalized);
rv[0] = calcGreen(normalized);
rv[0] = calcBlue(normalized);
return rv;
}

protected double normalize(double value) {
return (value - minValue) / (maxValue - minValue);
}

protected abstract double calcRed(double normalized);

protected abstract double calcGreen(double normalized);

protected abstract double calcBlue(double normalized);

}

HTH

cu
Ralf Ullrich
2006-08-01 09:34:04 UTC
Permalink
Post by Ralf Ullrich
@Override
protected double calcGreen(double normalized) {
return sinusoid(normalized + Math.PI);
}
Ich glaube hier habe ich einen Fehler gemacht. Es müsste heißen:

protected double calcGreen(double normalized) {
return sinusoid(normalized - Math.PI/2d);
}
Ralf Ullrich
2006-08-01 10:43:19 UTC
Permalink
Irgendwie hatten sich doch einige Bugs in meinen Code eingeschlichen. Hier
nun ein funktionierendes Beispiel:

package de.jnana.dclj;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;

import javax.swing.JFrame;
import javax.swing.JPanel;

public abstract class PseudoColorScale {

private final double minValue;

private final double maxValue;

protected PseudoColorScale(double minValue, double maxValue) {
if (minValue >= maxValue) {
throw new IllegalArgumentException();
}
this.minValue = minValue;
this.maxValue = maxValue;
}

public static PseudoColorScale getLinearInstance(double minValue,
double maxValue) {
return new PseudoColorScale(minValue, maxValue) {

@Override
protected double calcRed(double normalized) {
if (normalized <= 0.4d) {
return 0d;
}
if (normalized >= 0.6d) {
return 1d;
}
return 5d * (normalized - 0.4d);
}

@Override
protected double calcGreen(double normalized) {
if ((normalized >= 0.2d) && (normalized <= 0.6d)) {
return 1d;
}
if (normalized >= 0.8d) {
return 0d;
}
if (normalized > 0.6d) {
return 5d * (0.8d - normalized);
} else {
return 5d * normalized;
}
}

@Override
protected double calcBlue(double normalized) {
if (normalized <= 0.2d) {
return 1d;
}
if ((normalized >= 0.4d) && (normalized <= 0.8d)) {
return 0d;
}
if (normalized > 0.8d) {
return 5d * (normalized - 0.8d);
} else {
return 5d * (0.4d - normalized);
}
}
};
}

public static PseudoColorScale getSinusoidInstance(double minValue,
double maxValue) {
return new PseudoColorScale(minValue, maxValue) {

@Override
protected double normalize(double value) {
return super.normalize(value) * Math.PI * 2d;
}

private double sinusoid(double x) {
return (1d + Math.sin(x)) / 2d;
}

@Override
protected double calcRed(double normalized) {
return sinusoid(normalized + Math.PI);
}

@Override
protected double calcGreen(double normalized) {
return sinusoid(normalized - Math.PI / 2d);
}

@Override
protected double calcBlue(double normalized) {
return sinusoid(normalized);
}
};
}

public double[] calcColor(double value, double[] color) {
if ((minValue > value) || (maxValue < value)) {
throw new IllegalArgumentException("value");
}
double[] rv = color;
if (rv == null) {
rv = new double[3];
} else if (rv.length != 3) {
throw new IllegalArgumentException("color");
}

double normalized = normalize(value);
rv[0] = calcRed(normalized);
rv[1] = calcGreen(normalized);
rv[2] = calcBlue(normalized);
return rv;
}

protected double normalize(double value) {
return (value - minValue) / (maxValue - minValue);
}

protected abstract double calcRed(double normalized);

protected abstract double calcGreen(double normalized);

protected abstract double calcBlue(double normalized);

public static void main(String[] args) {
class ColorPanel extends JPanel {
private PseudoColorScale scale;

ColorPanel(PseudoColorScale scale) {
this.scale = scale;
setPreferredSize(new Dimension(320, 120));
}

@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
double[] c = new double[3];
int w = getWidth();
int h = getHeight();
for (int v = 0; v < w; v++) {
scale.calcColor((double) v / (double) w, c);
g.setColor(new Color((float) c[0], (float) c[1],
(float) c[2]));
g.drawLine(v, 0, v, h);
}
}
}
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().setLayout(new BorderLayout());
frame.getContentPane().add(
new ColorPanel(PseudoColorScale.getLinearInstance(0d, 1d)),
BorderLayout.NORTH);
frame.getContentPane().add(
new ColorPanel(PseudoColorScale.getSinusoidInstance(0d, 1d)),
BorderLayout.SOUTH);
frame.pack();
frame.setVisible(true);
}
}

cu
Jakob Keres
2006-08-01 22:30:48 UTC
Permalink
Post by Ralf Ullrich
Irgendwie hatten sich doch einige Bugs in meinen Code eingeschlichen.
Okay, sehr cool, das sieht genau nach dem aus, wonach ich suchte...


Thx, Jakob
Ingo R. Homann
2006-08-01 07:52:15 UTC
Permalink
Hi,
Post by Ralf Ullrich
BTW: AFAIK ist die Intepretation des Wellenlängenbereichs des sichtbaren
Lichts als kontinuierliches Regenbogenspektrum eine physiologische
Illusion, da unser Auge eigentlich ebenfalls nur auf bestimmten
Wellenlängen empfindlich ist.
Dem würde ich so zustimmen. Ob es eine "Illusion" ist, eine
"physiologische Besonderheit" (wie Stefan Arbeitsspeicher sagt), oder
eine "physikalische Besonderheit" (wie ich sagen würde), sei mal dahin
gestellt und ist (vermutlich) für unsere Diskussion egal.
Post by Ralf Ullrich
Post by Ingo R. Homann
Leider kenne ich keine direkte Antwort. Aber google doch mal nach den
Farbräumen "HSV" bzw. "HSI". Der "Hue"-Kanal ist genau das, was Du
mit einem Faktor multiplizieren und einen Offset addieren :-) musst.
Die Faktoren sollten sich dabei extrem einfach (durch Blick auf ein
Spektrogramm) ermitteln lassen).
Bist du sicher mit der linearen Transformation?
Zum OP: Nur die reinen Farben könnten wenn überhaupt eine Entsprechung
als Wellenlänge haben*. Die meisten Farben sind jedoch (wie im realen
Leben) aus mehreren Wellenlängen (um nicht zu sagen einem ganzen
Spektrum) zusammengesetzt.
...
Ich meine wenn Hue beispielsweise von 0 bis 255 geht, dann sind h und (h
+ 128) % 256 Komplementärfarben. Ist das bei den Wellenlängen so
gewährleistet?
Nun, wenn ich das Farbspektrum mit den Wellenlängen richtig in
Erinnerung habe, dann entspricht das IIRC und AFAIK tatsächlich dem
H(SI/V)-Farbraum, insofern: "ja, ich bin relativ sicher".
Post by Ralf Ullrich
Seien r,g,b die Grundfarbenanteile einer Farbe f in 0 bis 100% und R,G,B
das Farbspektrum wie es ein idealer Monitor für die Grundfarben Rot,
Grün und Blau ausstrahlt. Dann ist das Farbspektrum F der Farbe f, weil
F(f) = r(f)*R + g(f)*G + b(f)*B
Äh - das beschreibt doch, wenn ich dich richtig verstehe, nur den
RGB-Farbraum!? Ich denke,...
Post by Ralf Ullrich
Die Wellenlängen eines Regenbogens kannst du daraus aber IMHO ebenfalls
nicht berechnen.
..genau! ACK. Wie kommst Du also jetzt von deiner obigen Formal auf die
Wellenlänge?
Post by Ralf Ullrich
Daher die neugierige Frage: Was willst du eigentlich mit der Umrechnung
anfangen?
Gute Frage!
Post by Ralf Ullrich
* haben sie aber IMHO nicht, da die Farbmodelle eben Vereinfachungen
sind, die über die Physik der Wellenlängen und die Sinneswahrnehmung im
Auge vereinfachende Annahmen einführen, die nichts mehr mit der
Realtität zu tun haben. Beispielsweise gibt es physikalisch keinen
Farbkreis, in unserer Wahrnehmung scheint er aber unausweichlich zu sein.
IMHO gibt es aber immerhin sehr wohl einen physikalischen Hintergrund
für den Farbkreis, denn die größere der beiden Wellenlängen, die wir als
"rot" wahrnehmen (da, wo sich der Farbkreis schließt (oder auch nicht
schließt)), ist IIRC ein vielfaches (oder nicht sogar genau das
doppelte?) der kleineren der beiden Wellenlängen! Es ist also wie gesagt
nicht nur einfach eine Illusion, sondern hat zumindest einen konkreten,
physikalischen Hintergrund. Letztendlich dürfte es auf Eigenfrequenzen
bzw. "Resonanzfrequenten" zurückzuführen sein. Und eine Welle der Länge
300nm hat nun mal mehr Ähnlichkeit (auch in hinsicht auf ihre
physikalischen Auswirkungen) mit einer Welle der Länge 600nm, als eine
Welle der Länge 450nm.

Dass genau genommen das eine "rot" nicht *gleich* dem anderen "rot" ist
(obwohl es so aussieht), ist völlg klar. Aber es hat halt einen
konkretern Hintergrund als einfach nur eine optische Täuschung.

Ciao,
Ingo

PS: Interessantes dazu auch unter http://de.wikipedia.org/wiki/Lichtspektrum
Nach kurzem Blick scheinen mir die Werte 350 und 700 besser zu passen...
Loading...