Odpowiedź „zaakceptowana” jest nieprawidłowa i niekompletna
Jedynymi prawidłowymi odpowiedziami są odpowiedzi @ jive-dadson i @EddingtonsMonkey oraz wsparcie @ nils-pipenbrinck . Pozostałe odpowiedzi (w tym zaakceptowane) zawierają linki lub źródła, które są błędne, nieistotne, nieaktualne lub uszkodzone.
Krótko:
- sRGB musi zostać ZLINEARYZOWANY przed zastosowaniem współczynników.
- Luminancja (L lub Y) jest liniowa, podobnie jak światło.
- Postrzegana lekkość (L *) jest nieliniowa, podobnie jak ludzka percepcja.
- HSV i HSL nie są nawet zdalnie dokładne pod względem percepcji.
- Norma IEC dla sRGB określa próg 0,04045, NIE jest to 0,03928 (pochodzi z przestarzałego wczesnego szkicu).
- Przydatne (tj. W stosunku do percepcji) odległości euklidesowe wymagają percepcyjnie jednolitej kartezjańskiej przestrzeni wektorowej, takiej jak CIELAB. sRGB to nie jeden.
Poniżej znajduje się poprawna i pełna odpowiedź:
Ponieważ ten wątek pojawia się wysoko w wyszukiwarkach, dodaję tę odpowiedź, aby wyjaśnić różne nieporozumienia na ten temat.
Jasność jest atrybutem percepcyjnym, nie ma bezpośredniej miary.
Postrzegana jasność jest mierzona za pomocą niektórych modeli wizyjnych, takich jak CIELAB, tutaj L * (Lstar) jest miarą jasności percepcyjnej i jest nieliniowa w celu przybliżenia nieliniowej krzywej odpowiedzi na widzenie.
Luminancja jest liniową miarą światła, ważoną spektralnie dla normalnego widzenia, ale nieskorygowaną dla nieliniowego postrzegania jasności.
Luma ( liczba pierwsza Y ) to zakodowany gamma, ważony sygnał wykorzystywany w niektórych kodowaniach wideo. Nie należy go mylić z luminancją liniową.
Krzywa gamma lub transferowa (TRC) jest krzywą często podobną do krzywej percepcyjnej i jest powszechnie stosowana do danych obrazu w celu przechowywania lub nadawania w celu zmniejszenia postrzeganego szumu i / lub poprawy wykorzystania danych (i powiązanych przyczyn).
Aby określić postrzeganą jasność , najpierw przekonwertuj wartości obrazu R´G´B´ zakodowane gamma na liniową luminancję ( L
lub Y
), a następnie na nieliniową jasność postrzeganą ( L*
)
ABY ZNALEŹĆ LUMINANCJĘ:
... Ponieważ podobno gdzieś się zgubił ...
Krok pierwszy:
Konwertuj wszystkie 8-bitowe wartości całkowite sRGB na dziesiętne 0,0-1,0
vR = sR / 255;
vG = sG / 255;
vB = sB / 255;
Krok drugi:
Przekształć RGB zakodowany w gamma na wartość liniową. Na przykład sRGB (standard komputerowy) wymaga krzywej mocy około V ^ 2,2, chociaż „dokładna” transformacja to:
Gdzie V´ to zakodowany gamma kanał R, G lub B sRGB.
Pseudo kod:
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));
}
}
Krok trzeci:
Aby znaleźć Luminancję (Y), zastosuj standardowe współczynniki dla sRGB:
Pseudokod używający powyższych funkcji:
Y = (0.2126 * sRGBtoLin(vR) + 0.7152 * sRGBtoLin(vG) + 0.0722 * sRGBtoLin(vB))
ABY ZNALEŹĆ OCZYWISTĄ LEKKOŚĆ:
Krok czwarty:
Weź luminancję Y z góry i przekształć w L *
Pseudo kod:
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 * to wartość od 0 (czarna) do 100 (biała), gdzie 50 to percepcyjna „środkowa szarość”. L * = 50 to odpowiednik Y = 18,4, czyli innymi słowy 18% szara karta, reprezentująca środek ekspozycji fotograficznej (strefa V Ansela Adamsa).
Bibliografia:
IEC 61966-2-1:1999 Standard
Wikipedia sRGB
Wikipedia CIELAB
Wikipedia CIEXYZ
Charles Poynton's Gamma FAQ