"Kabul Edildi" Yanıtı Yanlış ve Eksik
Doğru olan tek cevap @ jive-dadson ve @EddingtonsMonkey yanıtlarıdır ve @ nils-pipenbrinck desteğidir . Diğer cevaplar (kabul edilenler dahil) yanlış, alakasız, eski veya bozuk kaynaklara bağlantı vermek veya bunları alıntılamaktır.
Kısaca:
- sRGB , katsayılar uygulanmadan önce LINEARIZED olmalıdır .
- Parlaklık (L veya Y) ışık gibi doğrusaldır.
- Algılanan hafiflik (L *) insan algısı gibi doğrusal değildir.
- HSV ve HSL algılama açısından uzaktan bile doğru değildir.
- SRGB için IEC standardı 0.04045 eşik değerini belirtir (0.03928 DEĞİLDİR) (eski bir taslaktan alınmıştır).
- Yararlı (yani algılamaya göre) , Öklid mesafeleri, CIELAB gibi algısal olarak homojen bir Kartezyen vektör boşluğu gerektirir. sRGB bir değil.
Aşağıdaki doğru ve eksiksiz bir cevaptır:
Bu konu arama motorlarında yüksek göründüğü için, konuyla ilgili çeşitli kavram yanılgılarını netleştirmek için bu yanıtı ekliyorum.
Parlaklık algısal bir özelliktir, doğrudan bir ölçüsü yoktur.
Algılanan hafiflik CIELAB gibi bazı görme modelleri tarafından ölçülür, burada L * (Lstar) algısal hafifliğin bir ölçüsüdür ve insan görüşünün doğrusal olmayan tepki eğrisine yaklaşmak için doğrusal değildir.
Parlaklık , normal görme için spektral olarak ağırlıklandırılmış, ancak doğrusal olmayan hafiflik algısı için ayarlanmamış, ışığın doğrusal bir ölçümüdür.
Luma ( Y´ prime), bazı video kodlamalarında kullanılan gama kodlu, ağırlıklı bir sinyaldir. Doğrusal parlaklık ile karıştırılmamalıdır.
Gama veya transfer eğrisi (TRC) genellikle algısal eğriye benzeyen bir eğridir ve algılanan gürültüyü azaltmak ve / veya veri kullanımını (ve ilgili nedenleri) iyileştirmek için genellikle depolama veya yayın amacıyla görüntü verilerine uygulanır.
Algılanan hafifliği belirlemek için önce gama kodlu R´G´B´ görüntü değerlerini doğrusal parlaklığa ( L
veya Y
), ardından doğrusal olmayan algılanan hafifliğe ( L*
) dönüştürün
Aydınlatmayı Bulmak İçin:
... Görünüşe göre bir yerlerde kayboldu ...
Adım bir:
Tüm sRGB 8 bit tam sayı değerlerini ondalık 0.0-1.0 değerine dönüştürün
vR = sR / 255;
vG = sG / 255;
vB = sB / 255;
İkinci adım:
Gama kodlu RGB'yi doğrusal bir değere dönüştürün. Örneğin sRGB (bilgisayar standardı) yaklaşık V ^ 2.2 güç eğrisi gerektirir, ancak "doğru" dönüşüm şöyledir:
Burada V´, sRGB'nin gama kodlu R, G veya B kanalıdır.
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));
}
}
Adım üç:
Luminance (Y) değerini bulmak için sRGB için standart katsayıları uygulayın:
Yukarıdaki işlevleri kullanarak sözde kod:
Y = (0.2126 * sRGBtoLin(vR) + 0.7152 * sRGBtoLin(vG) + 0.0722 * sRGBtoLin(vB))
ALGILANAN IŞIKLIĞI BULMAK İÇİN:
Adım dört:
Parlaklığı Y yukarıdan alın ve L * 'ye dönüştürün
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 *, 0 (siyah) ile 100 (beyaz) arasında bir değerdir; burada 50, algısal "orta gri" dir. L * = 50, Y = 18.4'e veya başka bir deyişle, fotoğrafik pozlamanın ortasını temsil eden% 18'lik bir gri karta eşdeğerdir (Ansel Adams bölgesi V).
Referanslar:
IEC 61966-2-1:1999 Standard
Wikipedia sRGB
Wikipedia CIELAB
Wikipedia CIEXYZ
Charles Poynton'un Gamma SSS