• Herzlich willkommen im "neuen" DSLR-Forum!

    Wir hoffen, dass Euch das neue Design und die neuen Features gefallen und Ihr Euch schnell zurechtfindet.
    Wir werden wohl alle etwas Zeit brauchen, um uns in die neue Umgebung einzuleben. Auch für uns ist das alles neu.

    Euer DSLR-Forum-Team

  • In eigener Sache!

    Liebe Mitglieder, liebe Besucher und Gäste
    ich weiß, es ist ein leidiges Thema, aber ich muss es ansprechen: Werbung, Werbeblocker und Finanzierung des Forums.
    Bitte hier weiterlesen ...

  • DSLR-Forum Fotowettbewerb neu erfunden!
    Nach wochenlanger intensiver Arbeit an der Erneuerung des Formates unseres internen Fotowettbewerbes ist es Frosty als Moderator
    und au lait als Programmierer gelungen, unseren Wettbewerb auf ein völlig neues Level zu heben!
    Lest hier alle Infos zum DSLR-Forum Fotowettbewerb 2.0
    Einen voll funktionsfähigen Demowettbewerb kannst du dir hier ansehen.
  • Neuer Partner: AkkuShop.de
    Akkus, Ladegeräte und mehr (nicht nur) für Digitalkameras und Drohnen
  • Neuer Gutscheincode unseres Partners Schutzfolien24:
    DSLR-Forum2024
    Dauerhaft 10% Rabatt auf alle Displayschutzfolien der Eigenmarken "Upscreen", "Brotec", "Savvies".
    Der Code ist für alle Geräteklassen gültig.
  • Mitmachen beim DSLR-Forum Fotowettbewerb Mai 2024.
    Thema: "Diagonale"

    Jeden Monat attraktive Gewinnprämien, gesponsert von unserem Partner PixelfotoExpress.
    Alle Infos zum Mai-Wettbewerb hier!
WERBUNG

Helligkeit/Kontrast von Farben (RGB) berechnen ...

Also:

R,G,B = r,g,b/255 -->

L = 100 * DritteWurzel(0,22*R + 0,72*G + 0,07*B)

Sollten die drei Faktoren nicht = 1 ergeben in ihrer Summe? -
Bei |L2 - L1| >= 2 beginnen wir Kontrastunterschiede festzustellen/zu erkennen.
Und was ist nun der Unterschied zwischen H und L, abgesehen von der Justierung auf 0;1?

H = Wurzel(0.299 * r^2 + 0.587 * g^2 + 0.114 * b^2)

LG - Martin

PS: Genaue Werte:
0.2126729
0.7151522
0.0721750
 
Zuletzt bearbeitet:
Und was ist nun der Unterschied zwischen H und L, abgesehen von der Justierung auf 0;1?

Mit L kann man wahrgenommene Unterschiede der "Helligkeit" messen/berechnen. Falls die Erfinder von CIE Lab sauber gearbeitet haben, nimmt L damit eine Sonderstellung ein.

Mit H kann man (wie oben felix_hh so schön schrieb) schöne Graustufenbilder erstellen. Es gibt sicher noch ganz andere Möglichkeiten zur Erzeugung "schöner" Graustufenbilder. H ist irgendwie beliebig, willkürlich.
 
Zwischen H und L sind halt beachtliche Unterschiede. Ja - wenn Hochkomplexes in etwas Einfaches transformiert werden will :)

DANKE Euch!

dE = Wurzel((L1-L2)^2 + (a1-a2)^2 + (b1-b2)^2)
ist also der Farbunterschied (LAB).
Mit Alleinberücksichtigung von L ist's dann |L1-L2|.

http://www.cielab.de/delta_e.shtml

L = ca. 100 * DritteWurzel(0.22*R + 0.72*G + 0.07*B)
mit R,G,B = r,g,b/255 ...
Bei |L1 - L2| > 2 werden Unterschiede erkannt.
Gilt dies auch allgemein für dE > 2?
Und ist L für das Graukarten-Grau (#118,118,118) = ca. 77?
Für H dann = 118, für 0;1-Eichung = 46%?

Werde ich einmal testen :)

Lieben Dank - Martin

PS: ehrlich gesagt: es irritiert mich nun, dass in der Formel für L die r,g,b-Werte wieder ohne Quadrat vorkommen ... Die Vektor-Idee ist da wieder dahin :) Komplex - verwirrt, wie prophezeit ;)

...


...
 
Zuletzt bearbeitet:
Wenn du CIELAB aus RGB berechnen willst, dann musst du wie erwähnt erst mal ein definiertes sRGB haben. Oder ein AdobeRGB oder sonst einen definierten Farbraum. Aber gehen wir mal davon aus, dass du sRGB hast, also einen definierten Farbraum. Das muss man zunächst in lineare Werte umrechnen und anschließend in XYZ wandeln, da sRGB eben abschnittsweise definiert ist.

hier: https://www.w3.org/Graphics/Color/sRGB ist unter "Colorimetric definitions and digital encodings" der genaue Umrechenweg im Detail, inklusive Linearisierung.

D.h. die Farbwerte werden in den Bereich [0,1] gebracht und dann wird die sRGB-Kurve zurückgerechnet. Ganz am Ende steht hier dann sowas:

Code:
X          R'
Y  = [M] * G'
Z           B'

wobei M eine Transformationsmatrix ist und R'G'B' die linearisierten und zwischen 0 und 1 normierten Farbwerte in einem Vektor sind. Für M gilt hier für sRGB dann:

Code:
       0.4124564  0.3575761  0.1804375
M =    0.2126729  0.7151522  0.0721750
       0.0193339  0.1191920  0.9503041

Wir brauchen hier aber nur die Y- Werte, das vereinfacht den weiteren Rechenweg zu

Y = 0.2126729 * R' + 0.7151522 * G' + 0.0721750 * B'

Aus diesem Y kann man dann die Helligkeit L des Farbvektors berechnen.

Dafür muss man erst mal Y normieren:
Y' = Y/100.

Für Y' > 0,008526 gilt dann:
L = 116 * y' ^(1/3) - 16

Und für y' <= 0,008526 gilt:
L = (16 + 903,3 * Y') / 116

Damit hat man dann zumindest die Helligkeitswerte nach CIELab.

Hier: http://www.brucelindbloom.com/index.html?Equations.html finden sich die Formeln für Farbumrechnungen.
Matritzen für andere Farbräume: http://www.brucelindbloom.com/index.html?Eqn_RGB_XYZ_Matrix.html

und hier:http://www.easyrgb.com/?X=MATH findet man auch Codebeispiele, wenn man das z.B. per Software umsetzen möchte.
 
Approximation …

Ich habe einmal mit Photoshop herumgespielt und die Werte 0,0,b sowie 0,g,0 und r,0,0 angeschaut und dann aus den Lab-Daten das L herausgeschrieben. Mit dem heuristischen Ansatz «L = a * [r,g,b]^x» fand ich dann für verschiedene r, g und b mit den dazugehörigen L das a und das x heraus – es schwankt natürlich und ist nie konstant; aber nach vager Interpolation erhielt ich in etwa folgende Zusammenhänge:

Lr = ca. r^1.15/10.9
Lg = ca. g^0.95/2.2
Lb = ca. b^1.6/236

Für L(res), was dem L aus Lab entspricht, erhielt ich dann recht gute Werte mit folgender Formel:

L(res) = ca. Wurzel(Lr^2 + Lg^2 + Lb^2)

Beispiel: r=150, g=75, b=200
Lr = 29.18
Lg = 27.47
Lb = 20.36

L(res) = 45

L in Photoshop zeigt L = 46 an …

Vielleicht könnte man ja die Parameter noch justieren und erhielte dann noch bessere Werte?! Für 255,255,255 ergibt meine Formel dann 107 … wo 100 eigentlich das Maximum sein sollte … also halt doch 7% daneben :) Aber so für einen groben Überschlag? …
 
Also:

L = ca. Wurzel(r^2.3/118 + g^1.9/4.84 + b^3.2/55'700)

Das Komplexere will ich aber noch lesen!
Ob ich ohne ein konkretes Beispiel zum Ziel finde, kann ich noch nicht abschätzen .....

...
 
Approximation …

Ich habe einmal mit Photoshop herumgespielt und die Werte 0,0,b sowie 0,g,0 und r,0,0 angeschaut und dann aus den Lab-Daten das L herausgeschrieben.

Für solche Zwecke gibts in der Argyll-Suite übrigens das nette Kommandozeilentool icclu:

https://www.argyllcms.com/doc/icclu.html

Wenn du z.B.

icclu -ff -s 255 -pl sRGB.icm

eingibst, kannst du in den folgenden Zeilen RGB-Werte eingeben, die dann in Lab umgesetzt werden:

23 244 12
23.000000 244.000000 12.000000 [RGB] -> MatrixFwd -> 84.520457 -75.707722 77.544463 [Lab]


Die dahinterliegende Logik kannst du Graeme Gills Quelltext entnehmen.
 
Für solche Zwecke gibts in der Argyll-Suite übrigens das nette Kommandozeilentool icclu:

https://www.argyllcms.com/doc/icclu.html

Wenn du z.B.

icclu -ff -s 255 -pl sRGB.icm
3
eingibst, kannst du in den folgenden Zeilen RGB-Werte eingeben, die dann in Lab umgesetzt werden:

23 244 12
23.000000 244.000000 12.000000 [RGB] -> MatrixFwd -> 84.520457 -75.707722 77.544463 [Lab]


Die dahinterliegende Logik kannst du Graeme Gills Quelltext entnehmen.

Danke! Nur - die Programmiersprache verstehe ich leider kaum.
Meine Formel ergäbe hier 84,32 statt 84.520457. Wäre die dahinterliegende Logik denn eine einfache, und - eine andere als jene, die felix_hh vorschlug?

Liebe Grüße - Martin

...
 
WERBUNG
Zurück
Oben Unten