Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Farbmessung, Umrechnung Spektrum in RGB und L*a*b*

812 views
Skip to first unread message

Stefan

unread,
Jul 4, 2012, 3:53:26 AM7/4/12
to
Hallo,

wir kämpfen hier momentan mit einem Minolta CM-700D.

Wenn die Doku dazu von einem anständigen Japaner gemacht wurde, müsste
der sich inzwischen ein langes Messen in den Bauch gerammt haben, aber
Schwamm drüber.

Jedenfalls haben wir hier ein dickes Handbuch, in dem die Kommunikation
zwischen PC und dem CM-700D beschrieben ist. Warum das als
"confidential" markiert ist, ist mir allerdings unverständlich.

Das Ding ist ein Farbspektrometer und liefert offenbar 32 Spektrallinien
im sichtbaren Bereich. Die entsprechenden Werte können wir auch
auslesen, soweit kein Problem.

Aber der Kunde will L*a*b* haben, was das Gerät auf dem internen
LCD-Display auch anzeigt, was man aber anscheinend nicht auslesen kann,
bzw. was in der vorliegenden Doku nicht beschrieben ist. Vieleicht gibt
es ja noch eine Top-Secret Doku ;-)

Wir haben uns inzwischen die Kommunikation zwischen der Minolta
Demo-Software und dem Gerät per Com-Port-Sniffer angesehen (die
Kommunikation läuft über Bluetooth). Demnach bekommt auch die
Demo-Software von Minolta nur die Spektren, aber keine fertigen L*a*b*
Werte.

Jetzt sollte es aber je grundsätzlich kein Problem sein, das gemessene
Spektrum in RGB Werte und dann in L*a*b* umzurechnen.
RGB -> L*a*b* ist kein Problem, das haben wir bereits früher gemacht.

Was ich jetzt benötige sind die Filterkurven für RGB, damit ich aus dem
Spektrum die RGB-Werte berechnen kann:

also etwa so: (Pseudo-Pascal)

var RR,GG,BB,W : array[0..31] of extended;
R,G,B : extended;

// RR,GG,BB : Filterkurven, W: Messwerte bzw. Spektralanteile [0..31]

R := 0; G := 0; B := 0;

for i := 0 to 31 do
begin
R := R + RR[i] * W[i];
G := G + GG[i] * W[i];
B := B + BB[i] * W[i];
end;

Hat jemand eine gute Quelle für die Filterfunktionen, aus denen ich
meine Arrays RR,GG und BB bestimmen kann?

Gruß

Stefan

Waldemar Krzok

unread,
Jul 4, 2012, 3:59:17 AM7/4/12
to
Habe nicht viel Ahnung in der Materie, aber hast du schon mal
http://de.wikipedia.org/wiki/Lab-Farbraum
als Start für Wissen-bootstrapping versucht?

Waldemar


--
My jsme Borgové. Sklopte štíty a vzdejte se. Odpor je marný.


Uwe Hercksen

unread,
Jul 4, 2012, 4:05:44 AM7/4/12
to

Stefan schrieb:

> Hat jemand eine gute Quelle für die Filterfunktionen, aus denen ich
> meine Arrays RR,GG und BB bestimmen kann?

Hallo,

vielleicht findet sich hier ein weiterführender Link:
http://de.wikipedia.org/wiki/RGB-Farbraum
allerdings stellt sich beim Lesen gleich die Frage welcher RGB Farbraum
es denn sein soll, ein bestimmter oder wählbar aus verschiedenen Varianten?

Bye

Marc Santhoff

unread,
Jul 4, 2012, 4:07:12 AM7/4/12
to
Am Wed, 04 Jul 2012 09:53:26 +0200 schrieb Stefan:

> Was ich jetzt benötige sind die Filterkurven für RGB, damit ich aus dem
> Spektrum die RGB-Werte berechnen kann:
>
> also etwa so: (Pseudo-Pascal)

[... ]

> Hat jemand eine gute Quelle für die Filterfunktionen, aus denen ich
> meine Arrays RR,GG und BB bestimmen kann?

Vielleicht dort:

<http://www.efg2.com/>

Marc

Marc Santhoff

unread,
Jul 4, 2012, 4:11:45 AM7/4/12
to

Stefan

unread,
Jul 4, 2012, 4:34:13 AM7/4/12
to
Der ist bekannt, aber die Filterkurven habe ich dort noch nicht gefunden.

Gruß

Stefan

Peter Bösche

unread,
Jul 4, 2012, 5:07:53 AM7/4/12
to
On Wed, 04 Jul 2012 09:53:26 +0200, Stefan
<Hier-steht-absichtlich-keine-E-Mail-Adresse.xy> wrote:

>Hallo,
>
>Das Ding ist ein Farbspektrometer und liefert offenbar 32 Spektrallinien
>im sichtbaren Bereich. Die entsprechenden Werte können wir auch
>auslesen, soweit kein Problem.
>
>Aber der Kunde will L*a*b* haben, was das Gerät auf dem internen
>LCD-Display auch anzeigt, was man aber anscheinend nicht auslesen kann,
>bzw. was in der vorliegenden Doku nicht beschrieben ist. Vieleicht gibt
>es ja noch eine Top-Secret Doku ;-)
>...
>Jetzt sollte es aber je grundsätzlich kein Problem sein, das gemessene
>Spektrum in RGB Werte und dann in L*a*b* umzurechnen.
>RGB -> L*a*b* ist kein Problem, das haben wir bereits früher gemacht.
>

Hi,
ich denke, jede Spekrtallinie hat eine Farbe (a,b) und eine
Helligkeit(L). RGB-Werte ihrerseits sind abhängig vom verwendeten
Farbraum und ergeben entsprechend unterschiedliche Lab-Werte.

Peter

Marc Santhoff

unread,
Jul 4, 2012, 5:13:30 AM7/4/12
to
Dann hast Du diese Seite auch schon gesehen:

<http://www.efg2.com/Lab/ScienceAndEngineering/Spectra.htm>

Marc

Stefan

unread,
Jul 4, 2012, 8:20:55 AM7/4/12
to
Nein, jede Spektrallinie entspricht einer Wellenlänge, d.h. einer
monochromatischen Farbe bzw. einem Wellenlängenintervall.

L*a*b* ist eine Farbdarstellung, mit der der Farbeindruck, also das
Gefühl des Betrachters durch die drei Parameter L*a*b* ausgedrückt wird.

Daneben gibt es andere Farbdarstellungen, z.B. RGB, bei denen eine Farbe
durch die Überlagerung von drei Spektralanteilen Rot Grün und Blau
erzeugt wird.

Dahinter steht, dass man zumindest theoretisch für die Erzeugung jedes
beliebigen Farbeindruckes nicht das komplette Spektrum benötigt, sondern
lediglich drei Spektrallinien überlagern muss. Maßstab ist dabei das
menschliche Auge bzw. das menschliche Farbempfinden.

Wenn man nun ein Farbspektrum in eine Darstellung wie RGB oder L*a*b*
umrechnen will, benötigt man Filterkurven, die das menschliche Auge
nachbilden. Und genau diese Filterkurven suche ich.

Gruß

Stefan



Stefan

unread,
Jul 4, 2012, 8:24:59 AM7/4/12
to
Hm, ich habs noch nicht ganz verstanden, könnte aber genau das sein, was
ich suche. Muss ich aber erstmal ausprobieren.

Danke erstmal

Gruß

Stefan

Marc Santhoff

unread,
Jul 4, 2012, 8:38:02 AM7/4/12
to
Am Wed, 04 Jul 2012 14:24:59 +0200 schrieb Stefan:

> Am 04.07.2012 11:13, schrieb Marc Santhoff:
>> Am Wed, 04 Jul 2012 10:34:13 +0200 schrieb Stefan:
>>
>>> Am 04.07.2012 10:07, schrieb Marc Santhoff:

>>> Der ist bekannt, aber die Filterkurven habe ich dort noch nicht
>>> gefunden.
>>
>> Dann hast Du diese Seite auch schon gesehen:
>>
>> <http://www.efg2.com/Lab/ScienceAndEngineering/Spectra.htm>

> Hm, ich habs noch nicht ganz verstanden, könnte aber genau das sein, was
> ich suche. Muss ich aber erstmal ausprobieren.

Nun ja, die Kernaussagen sind:

- da gibt es den Quelltext zum download
- "The purpose of this program is to display RGB colors as a function of
wavelength for visible light (380 to 780 nm)."
- "There is no unique one-to-one mapping between wavelength and RGB
values."

Was draus machen mußt Du natürlich selbst. ;)

Marc

gupemo

unread,
Jul 4, 2012, 10:34:15 AM7/4/12
to
Hallo Stefan,
...googeln oder so nach "RGB LAB" ist Dein Freund...
-
Du musst im CIE Farbraum "ja nur" von Lab nach RGB umrechnen, um mit
Deinem Minolta gluecklich zu werden ("de.wikipedia.org/wiki/Lab-Farbraum").
Deine gesuchte Augenempfindlichkeitskurve ist die V-Lambda Beziehung.
Für erstere Umrechnung wird der CIE Farbraum aber, soweit ich das sehe,
gar nicht verlassen, und es nur eine Farbkoordinatenumrechnung
erforderlich. siehe hierzu die Wikipediaseite.
Als ich vor kurzem ein (anderes) Minolta Photometer mit einem Tek J16
mit radiometrischem Kopf verglichen habe, war deutlich mehr Umrechnung
notwendig, weil der Herr Lambert und die V-Lambda Bez. auch noch
beruecksichtigt werden mussten.
Gruß Peter

gupemo

unread,
Jul 4, 2012, 10:58:40 AM7/4/12
to
Nachtrag:
Pardon, man sollte den Ursprungstext doch nochmals lesen.
Also benötigst Du "nur" die V-Lambda Kurve. Googeln hilft hier aber
auch, ich habe nur die passende URL nicht mehr hier. Es gibt im Net eine
numerische Tabelle der V-Lambda Kurve zu finden, wie Du sie suchst.
Gruß Peter


Stefan

unread,
Jul 4, 2012, 11:20:39 AM7/4/12
to
Prima, danke für die Info. Die Bezeichnung V-Lambda Kurve fehlte mir.
Werd ich gleich mal nach googeln.

Gruß

Stefan DF9BI

gupemo

unread,
Jul 4, 2012, 12:38:11 PM7/4/12
to

Stefan

unread,
Jul 4, 2012, 12:42:30 PM7/4/12
to
Hallo,

auf den ersten Blick sehe ich da noch ein kleines Problem, und zwar
benötige ich drei Kurven, jeweils für R G und B. Momentan sehe ich nur
eine Gesamtkurve für das gesamte Spektrum des sichtbaren Lichts.

Gruß

Stefan DF9BI



Wolfgang.Draxinger

unread,
Jul 4, 2012, 1:08:27 PM7/4/12
to
On Wed, 04 Jul 2012 09:53:26 +0200
Stefan <Hier-steht-absichtlich-keine-E-Mail-Adresse.xy> wrote:

> Demnach bekommt auch die Demo-Software von Minolta nur die Spektren,
> aber keine fertigen L*a*b* Werte.

Was an sich ja sinnvoll ist, da man ja vielleicht den
Farbwiedergabeindex einer Lichtquelle bestimmen will und dafür braucht
man das ganze Spektrum, nicht nur ein Farbtriplett.

> Jetzt sollte es aber je grundsätzlich kein Problem sein, das
> gemessene Spektrum in RGB Werte und dann in L*a*b* umzurechnen.
> RGB -> L*a*b* ist kein Problem, das haben wir bereits früher gemacht.

Welches RGB? Es gibt so viele verschiedene RGB-Farbräume, das man da
leicht den Überblick verliert.

Ausserdem deckt RGB nicht den gesamten von L*a*b abgedeckten Farbraum
ab?

> Was ich jetzt benötige sind die Filterkurven für RGB, damit ich aus
> dem Spektrum die RGB-Werte berechnen kann:

Wieso? Wieso gehst Du nicht direkt nach L*a*b? L*a*b ist ein
Kontaktfarbraum, d.h. aus I(\lambda) kann man direkt nach CIE XYZ oder
eben L*a*b umrechnen. Für jede der Spektrallinien gibt es eine Position
in der a*b-Ebene. Durch ein gewichtetes Mittel kommt man am
entsprechenden Punkt in a*b heraus. Die totale Intensität ist dann L.

http://www.fho-emden.de/~hoffmann/cielab03022003.pdf


Wolfgang

Ingo Thies

unread,
Jul 4, 2012, 4:36:02 PM7/4/12
to
Am 2012-07-04 09:53, schrieb Stefan:

> Jetzt sollte es aber je grundsätzlich kein Problem sein, das gemessene
> Spektrum in RGB Werte und dann in L*a*b* umzurechnen.
> RGB -> L*a*b* ist kein Problem, das haben wir bereits früher gemacht.
>
> Was ich jetzt benötige sind die Filterkurven für RGB, damit ich aus dem
> Spektrum die RGB-Werte berechnen kann:

Der Standardweg geht über CIE 1931 (richtig, 1931; es gibt modernere
Versionen des CIE-Standardfarbraums, aber der alte gilt nach wie vor als
Referenz für z.B. alle photometrischen Größen).

Um aus dem Spektrum die Koordinaten X,Y,Z zu gewinnen, benötigt man die
CIE Color Matching Functions, die Du auf

http://cvrl.ioo.ucl.ac.uk/

als downloadbare ASCII-Dateien findest (auch fast alles andere,
nebenbei). Diese werden numerisch intergriert (d.h. bei 32 Spektral-Bins
einfach aufsummiert), und daraus die Chromatizitäten x,y,z
(kleingeschrieben) bestimmt:

x = X/(X+Y+Z), y=Y/(X+Y+Z)
z = 1-x-y

http://en.wikipedia.org/wiki/CIE_1931_color_space

Dies ist bereits der wichtigste und rechenaufwendigste Schritt. Daraus
kann man die RGB-Werte und die L*a*b*-Werte über analytische Formeln
gewinnen:

http://en.wikipedia.org/wiki/SRGB
http://en.wikipedia.org/wiki/Lab_color_space

Für RGB würde ich nicht die Wikipedia-Matrizen nehmen (auch wenn die aus
offiziellen Quellen stammen), sondern die von Bruce Lindbloom:

http://www.brucelindbloom.com

Da findet man unter Math alles, was man braucht. Anschließend die
Gammakorrektur (steht auch bei Wikipedia unter SRGB) nicht vergessen.
L*a*b* aus X,Y,Z funktioniert ähnlich, allerdings braucht man da nicht
mal Matrixrechnung.

Die Formeln kann man ggf. sogar in einem Excel-Spreadsheet unterbringen
(Integration entweder durch einfaches Summieren oder ggf. über
Simpsonregel; komplexere Algorithmen wären hier totaler Overkill), oder
sich ein eigenes Programm schreiben. Evtl. geistert sogar der eine oder
andere (dann vermutlich eher C/C++ als Pascal)-Code dazu herum.

Der Umweg über XYZ wirkt zunächst mal unintuitiv (intuitiv wäre es eher,
R,G,B direkt aus den Spektren herzuleiten, aber das hat andere
Nachteile), aber er hat den Vorteil, dass die Luminanz in einer einzigen
Variablen (Y; die Y-CMF ist zugleich die photopische
Empfindlichkeitskurve des Durschnittsauges). Zumindest hat der
CIE-1931-Farbraum eine gewisse Prominenz (jeder dürfte dieses
"Farb-Steak" schonmal gesehen haben).

HTH,

Ingo


Ingo Thies

unread,
Jul 4, 2012, 4:46:24 PM7/4/12
to
Am 2012-07-04 18:42, schrieb Stefan:

> auf den ersten Blick sehe ich da noch ein kleines Problem, und zwar
> benötige ich drei Kurven, jeweils für R G und B. Momentan sehe ich nur
> eine Gesamtkurve für das gesamte Spektrum des sichtbaren Lichts.

Dazu noch ein Nachtrag zu meinem Posting (Links siehe dort) gerade eben.
Was Du suchst sind die color matching functions (CMFs) für X, Y, Z,
wovon die Y-CMF gerade die V-Lambda-Kurve ist. Mit X, Y, Z kann man
direkt L*a*b* berechnen, RGB braucht man dazu gar nicht. Wobei XYZ
durchaus entfernt mit RGB vergleichbar (aber eben nicht gleich) ist.

Gruß,
Ingo


Johann Klammer

unread,
Jul 4, 2012, 5:23:43 PM7/4/12
to
0 new messages