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

04/07/2012 - 09:53 von Stefan | Report spam
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
 

Lesen sie die antworten

#1 Waldemar Krzok
04/07/2012 - 09:59 | Warnen spam
Am 04.07.2012 09:53, schrieb Stefan:
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?



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

Ähnliche fragen