Forum: Mikrocontroller und Digitale Elektronik RGB --> XYZ Problem


von KlausMausi (Gast)


Lesenswert?

Hallo zusammen,

hab das hier n bisschen durchforstet, habe aber nichts gefunden, was mir 
wirklich hilft.

Ich habe das Problem, dass ich aus RGB Primärvalenzen XYZ Werte 
errechnen will.

Probiert habe ich das ganze mal am Adobe-RGB Farbraum (1998) mit 
folgenden Primärvalenzen:

  Rot   Grün   Blau   Weiß (D65)
x   0,640   0,210   0,150   0,3127
y   0,330   0,710   0,060   0,3290
z   0,030   0,080   0,790   0,3583

Jetzt will ich daraus die Matrix aufstellen und geh dabei nach folgender 
Seite vor:

http://www.brucelindbloom.com/index.html?Eqn_RGB_XYZ_Matrix.html

Mein Problem ist: Ich komme nicht auf die gegebene Umrechnungsmatrix von

0.5767309  0.1855540  0.1881852
0.2973769  0.6273491  0.0752741
0.0270343  0.0706872  0.9911085

sondern auf eine Matrix, die ungefähr um den Faktor 3,04 daneben liegt 
und finde den Fehler einfach nicht. Hat jemand ne Idee woran das liegen 
könnte?

Vielen Dank im Voraus
KlausMausi

von Karl H. (kbuchegg)


Lesenswert?

Hast du auch nicht vergessen, im letzten Schritt, bei der Berechnung von

  [S] = [X] * [Xwhite]

die Matrix [X] zu invertieren?

von KlausMausi (Gast)


Lesenswert?

Nope, Matrix wurde invertiert. Mich wundert halt, dass es ein Faktor 
ist, um den die gesamte Matrix falsch ist.

Oder hast du das grade durchgerechnet und kommst auf die Matrix, weil 
dann weiß ich wirklich nicht mehr weiter, wo mein Fehler liegt. Kann 
ansonsten gleich mal den gesamten Rechenweg posten

von Karl H. (kbuchegg)


Lesenswert?

KlausMausi schrieb:

> Oder hast du das grade durchgerechnet und kommst auf die Matrix

Nope.
Aber aus Erfahrung weiß ich, dass man das kleine -1 da ganz gerne 
übersieht.

> dann weiß ich wirklich nicht mehr weiter, wo mein Fehler liegt. Kann
> ansonsten gleich mal den gesamten Rechenweg posten

Das wär sowieso das gescheiteste.

von KlausMausi (Gast)


Lesenswert?

Also:

ausgehend von

 Rot   Grün   Blau   Weiß (D65)
x   0,640   0,210   0,150   0,3127
y   0,330   0,710   0,060   0,3290
z   0,030   0,080   0,790   0,3583


komme ich auf

     Rot     Grün    Blau
X   64/33    21/71    5/2
Y     1        1       1
Z   1/11      8/71   79/6


Dann ergibt sich für den S-Vektor

Sr = 0.09782649686
Sg = 0.2064026133
Sb = 0.02477088984

Daraus folgt als Matrix M (auf vier Stellen gerundet)

   0.1897   0.0610   0.0619
M= 0.0978   0.2064   0.0248
   0.0089   0.0233   0.3262

Folgende Faktoren ergeben sich:

Im Vergleich mit der Matrix, die eigentlich rauskommen sollte, ergibt 
sich dann

[errechnete Matrix] * (3.04) = [gegebene Matrix]

von Karl H. (kbuchegg)


Lesenswert?

KlausMausi schrieb:

> Dann ergibt sich für den S-Vektor
>
> Sr = 0.09782649686
> Sg = 0.2064026133
> Sb = 0.02477088984

Ich krieg da andere Werte raus

Xr = 0.64/0.33 = 1.93
Yr = 1
Zr = (1 - 0.64/0.33 - 0.33)/0.33 = -3.84

Xg = 0.21/0.71 = 0.29
Yg = 1
Zg = (1 - 0.21/0.71 - 0.71)/0.71 = -0.0081

Xb = 0.15/0.06 = 2.5
Yb = 1
Zb  (1 - 0.15/0.06 - 0.06)/0.06 = -26


Matrix zur Berechnung von S

   1.93   0.29    2.5
   1      1       1
   -3.84  -0.0081 -26

diese invertiert

   0.7609  -0.22   0.06
  -0.6487   1.188 -0.01
  -0.112    0.03  -0.04

multipliziert mit dem Weiß-Vektor  0.3127 0.3290 0.3583

ergibt

  Sr =  0.188696
  Sg =  0.182011
  Sb = -0.041706

von C. P. T. (jimpanse)


Lesenswert?

http://www.brucelindbloom.com/index.html?Eqn_ChromAdapt.html

Da stehen andere Werte für Weiß (D65).
Da passt der Faktor 3,04 ziemlich gut.

von KlausMausi (Gast)


Lesenswert?

Karl Heinz Buchegger schrieb:
> Xr = 0.64/0.33 = 1.93
> Yr = 1
> Zr = (1 - 0.64/0.33 - 0.33)/0.33 = -3.84
>
> Xg = 0.21/0.71 = 0.29
> Yg = 1
> Zg = (1 - 0.21/0.71 - 0.71)/0.71 = -0.0081
>
> Xb = 0.15/0.06 = 2.5
> Yb = 1
> Zb  (1 - 0.15/0.06 - 0.06)/0.06 = -26


Du teilst einmal zuviel durch 0.33/0.71/0.06 also bei der Z-Koordinate, 
oder seh ich das falsch

Z = (1 - x - y) / y und nicht (1-x/y - y)/y  oder?

von KlausMausi (Gast)


Lesenswert?

C. P. T. schrieb:
> Da stehen andere Werte für Weiß (D65).
> Da passt der Faktor 3,04 ziemlich gut.

Das würde das ganze natürlich erklären, also falsche beziehungsweise 
scho normierte Weißwerte bei Wikipedia

von Karl H. (kbuchegg)


Lesenswert?

KlausMausi schrieb:


> Du teilst einmal zuviel durch 0.33/0.71/0.06 also bei der Z-Koordinate,
> oder seh ich das falsch
>
> Z = (1 - x - y) / y und nicht (1-x/y - y)/y  oder?

Ja, da hab ich beim Abschreiben der Formeln auf den Notizblock einen 
Kopierfehler gemacht. Sorry.

von KlausMausi (Gast)


Lesenswert?

Nur nochmal zum Endverständnis, was den Weißwert angeht handelt es sich 
bei dem mit Faktor 3.04 einfach nur um einen Weißabgleich?

von Simon B. (nomis)


Lesenswert?

KlausMausi schrieb:
> Nur nochmal zum Endverständnis, was den Weißwert angeht handelt es sich
> bei dem mit Faktor 3.04 einfach nur um einen Weißabgleich?

Nein. Das ist einfach nur unterschiedlich normiert. Lindbloom normiert 
auf Y=1.0, Wikipedia auf (X+Y+Z) = 1.0.

Da die Lindbloom-Werte (X+Y+Z) = 3.0393 sind, kommt da dein Faktor her.

Viele Grüße,
        Simon

von Simon B. (nomis)


Lesenswert?

Simon Budig schrieb:
> KlausMausi schrieb:
>> Nur nochmal zum Endverständnis, was den Weißwert angeht handelt es sich
>> bei dem mit Faktor 3.04 einfach nur um einen Weißabgleich?
>
> Nein. Das ist einfach nur unterschiedlich normiert.

Vielleicht sollte ich noch dazuschreiben: Eine Skalierung des Wertes 
entspricht einer Intensitätsänderung. Dadurch wird kein Weißpunkt 
verschoben o.ä. (was bei einem Weißabgleich passiert).

Viele Grüße,
        Simon

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.