Jawaban "Diterima" Tidak Benar dan Tidak Lengkap
Satu-satunya jawaban yang akurat adalah jawaban @ jive-dadson dan @EddingtonsMonkey , dan dalam dukungan @ nils-pipenbrinck . Jawaban lain (termasuk yang diterima) adalah menautkan atau mengutip sumber yang salah, tidak relevan, usang, atau rusak.
Secara singkat:
- sRGB harus di- LINEARIZED sebelum menerapkan koefisien.
- Luminance (L atau Y) linier seperti cahaya.
- Perceived lightness (L *) tidak linier seperti halnya persepsi manusia.
- HSV dan HSL bahkan tidak akurat dalam hal persepsi.
- Standar IEC untuk sRGB menentukan ambang batas 0,04045 itu BUKAN 0,03928 (yang berasal dari konsep awal yang usang).
- Yang berguna (yaitu relatif terhadap persepsi) , jarak Euclidian membutuhkan ruang vektor Cartesian yang perseptual seragam seperti CIELAB. sRGB bukan satu.
Berikut ini adalah jawaban yang benar dan lengkap:
Karena utas ini sangat muncul di mesin pencari, saya menambahkan jawaban ini untuk mengklarifikasi berbagai kesalahpahaman pada subjek.
Kecerahan adalah atribut persepsi, tidak memiliki ukuran langsung.
Perceived lightness diukur oleh beberapa model penglihatan seperti CIELAB, di sini L * (Lstar) adalah ukuran dari lightness perseptual , dan non-linear untuk memperkirakan kurva respon non-linear penglihatan manusia.
Luminance adalah ukuran cahaya linier, berbobot spektral untuk penglihatan normal tetapi tidak disesuaikan untuk persepsi non-linear terhadap cahaya.
Luma ( Y´ prime) adalah sinyal yang dikodekan gamma, tertimbang yang digunakan dalam beberapa pengkodean video. Tidak perlu bingung dengan pencahayaan linier.
Gamma atau transfer curve (TRC) adalah kurva yang sering serupa dengan kurva persepsi, dan biasanya diterapkan pada data gambar untuk penyimpanan atau siaran untuk mengurangi noise yang dirasakan dan / atau meningkatkan pemanfaatan data (dan alasan terkait).
Untuk menentukan penerangan yang dirasakan , pertama-tama konversikan gamma yang dikodekan nilai-nilai gambar R´G´B menjadi luminance linier ( L
atau Y
) dan kemudian ke penerangan yang dirasakan non-linear ( L*
)
UNTUK MENCARI LUMINANCE:
... Karena ternyata itu hilang di suatu tempat ...
Langkah pertama:
Konversikan semua nilai integer sRGB 8 bit ke desimal 0,0-1.0
vR = sR / 255;
vG = sG / 255;
vB = sB / 255;
Langkah Dua:
Konversi gamma yang dikodekan RGB ke nilai linier. sRGB (standar komputer) misalnya membutuhkan kurva daya sekitar V ^ 2.2, meskipun transformasi "akurat" adalah:
Di mana V´ adalah saluran R, G, atau B yang disandikan gamma dari sRGB.
Kodesemu:
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));
}
}
Langkah ketiga:
Untuk menemukan Luminance (Y) terapkan koefisien standar untuk sRGB:
Kodesemu menggunakan fungsi di atas:
Y = (0.2126 * sRGBtoLin(vR) + 0.7152 * sRGBtoLin(vG) + 0.0722 * sRGBtoLin(vB))
UNTUK MENCARI LIGHTNESS YANG DAPAT DIBERI:
Langkah Empat:
Ambil luminance Y dari atas, dan ubah ke L *
Kodesemu:
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 * adalah nilai dari 0 (hitam) hingga 100 (putih) di mana 50 adalah "abu-abu tengah" perseptual. L * = 50 adalah setara dengan Y = 18,4, atau dengan kata lain kartu abu-abu 18%, mewakili bagian tengah dari eksposur fotografi (Ansel Adams zona V).
Referensi:
IEC 61966-2-1:1999 Standard
Wikipedia sRGB
Wikipedia CIELAB
Wikipedia CIEXYZ
FAQ Gamma Charles Poynton