Die Antwort "Akzeptiert" ist falsch und unvollständig
Die einzigen Antworten, die korrekt sind, sind die Antworten @ jive-dadson und @EddingtonsMonkey sowie zur Unterstützung von @ nils-pipenbrinck . Die anderen Antworten (einschließlich der akzeptierten) verweisen auf oder zitieren Quellen, die entweder falsch, irrelevant, veraltet oder fehlerhaft sind.
Kurz:
- sRGB muss LINEARISIERT sein, bevor die Koeffizienten angewendet werden.
- Die Luminanz (L oder Y) ist linear, ebenso wie das Licht.
- Die wahrgenommene Leichtigkeit (L *) ist nichtlinear, ebenso wie die menschliche Wahrnehmung.
- HSV und HSL sind in Bezug auf die Wahrnehmung nicht einmal annähernd genau.
- Der IEC-Standard für sRGB legt einen Schwellenwert von 0,04045 fest, der NICHT 0,03928 beträgt (der aus einem veralteten frühen Entwurf stammt).
- Die nützlichen (dh relativ zur Wahrnehmung) euklidischen Abstände erfordern einen wahrnehmungsmäßig einheitlichen kartesischen Vektorraum wie CIELAB. sRGB ist keiner.
Was folgt, ist eine korrekte und vollständige Antwort:
Da dieser Thread in Suchmaschinen häufig vorkommt, füge ich diese Antwort hinzu, um die verschiedenen Missverständnisse zu diesem Thema zu klären.
Helligkeit ist ein Wahrnehmungsattribut, es hat kein direktes Maß.
Die wahrgenommene Helligkeit wird von einigen Sehmodellen wie CIELAB gemessen. Hier ist L * (Lstar) ein Maß für die Wahrnehmungshelligkeit und nicht linear, um die nichtlineare Antwortkurve des menschlichen Sehens zu approximieren.
Die Luminanz ist ein lineares Maß für Licht, das für normales Sehen spektral gewichtet, aber für nichtlineare Wahrnehmung von Helligkeit nicht angepasst ist.
Luma ( Y´ prime) ist ein Gamma-codiertes, gewichtetes Signal, das in einigen Videocodierungen verwendet wird. Es ist nicht mit linearer Luminanz zu verwechseln.
Gamma oder Übertragungskurve (TRC) ist eine Kurve, die häufig der Wahrnehmungskurve ähnlich ist und üblicherweise auf Bilddaten zur Speicherung oder Ausstrahlung angewendet wird, um das wahrgenommene Rauschen zu reduzieren und / oder die Datennutzung (und verwandte Gründe) zu verbessern.
Um die wahrgenommene Helligkeit zu bestimmen , konvertieren Sie zuerst Gamma-codierte R´G´B´-Bildwerte in lineare Luminanz ( L
oder Y
) und dann in nichtlineare wahrgenommene Helligkeit ( L*
)
LUMINANZ FINDEN:
... weil es anscheinend irgendwo verloren gegangen ist ...
Schritt eins:
Konvertieren Sie alle sRGB 8-Bit-Ganzzahlwerte in eine Dezimalzahl von 0,0 bis 1,0
vR = sR / 255;
vG = sG / 255;
vB = sB / 255;
Schritt zwei:
Konvertieren Sie ein Gamma-codiertes RGB in einen linearen Wert. sRGB (Computer Standard) erfordert zum Beispiel eine Leistungskurve von ungefähr V ^ 2.2, obwohl die "genaue" Transformation lautet:
Wobei V´ der gamma-codierte R-, G- oder B-Kanal von sRGB ist.
Pseudocode:
function sRGBtoLin(colorChannel) {
// Send this function a decimal sRGB gamma encoded color value
// between 0.0 and 1.0, and it returns a linearized value.
if ( colorChannel <= 0.04045 ) {
return colorChannel / 12.92;
} else {
return pow((( colorChannel + 0.055)/1.055),2.4));
}
}
Schritt drei:
Um die Luminanz (Y) zu ermitteln, wenden Sie die Standardkoeffizienten für sRGB an:
Pseudocode mit den oben genannten Funktionen:
Y = (0.2126 * sRGBtoLin(vR) + 0.7152 * sRGBtoLin(vG) + 0.0722 * sRGBtoLin(vB))
Wahrgenommene Leichtigkeit zu finden:
Schritt vier:
Nehmen Sie die Luminanz Y von oben und transformieren Sie sie in L *
Pseudocode:
function YtoLstar(Y) {
// Send this function a luminance value between 0.0 and 1.0,
// and it returns L* which is "perceptual lightness"
if ( Y <= (216/24389) { // The CIE standard states 0.008856 but 216/24389 is the intent for 0.008856451679036
return Y * (24389/27); // The CIE standard states 903.3, but 24389/27 is the intent, making 903.296296296296296
} else {
return pow(Y,(1/3)) * 116 - 16;
}
}
L * ist ein Wert von 0 (schwarz) bis 100 (weiß), wobei 50 das wahrgenommene "mittlere Grau" ist. L * = 50 ist das Äquivalent von Y = 18,4 oder mit anderen Worten eine 18% ige Graukarte, die die Mitte einer fotografischen Belichtung darstellt (Ansel Adams Zone V).
Verweise:
IEC 61966-2-1:1999 Standard
Wikipedia sRGB
Wikipedia CIELAB
Wikipedia CIEXYZ
Charles Poyntons Gamma-FAQ