Cartonașarea tonurilor este o tehnică folosită pentru a converti o imagine dintr-o zonă dinamică extinsă (HDR) care nu poate fi reprezentată pe ecranul unui monitor de calculator într-un interval mai limitat [0; 1].
Dacă tocmai ați tăiat culoarea de-a lungul acestor margini, este foarte puțin probabil ca o imagine imputabilă să fie primită, deci trebuie să selectați un anumit interval pentru conversie. Aceasta se poate realiza prin calcularea luminozității medii a imaginii, a histogramei de luminozitate sau prin luarea unei intrări de utilizator etc. De asemenea, în grafica computerelor luați în considerare luminozitatea cadrelor anterioare și luminozitatea, care este folosit pentru "ochiul virtual" al playerului.
Să analizăm în detaliu modul în care este efectuată Cartografierea tonurilor.
1) Convertiți culoarea pixelilor (RGB) la o valoare de luminanță.
În modelul color XYZ, componenta Y este valoarea luminanței,
Lw = Y = m21 * R + m22 * G + m23 * B,
unde m22, m22, m23 este rândul 3x3 al matricei de transformare a spațiului de culoare RGB -> XYZ, care este specifică dispozitivului particular de afișare. Pentru spațiul de culoare sRGB, care corespunde majorității monitoarelor de utilizare "home"
Lw = Y = 0,212671 * R + 0,71560 * G + 0,072169 * B,
este, de asemenea, adesea folosit
Lw = 0,27 * R + 0,67 * G + 0,06 B.
2) Calculul valorii medii a luminozității (Laverage).
N - numărul de puncte din imagine
Lw (x, y) - valoarea luminozității "lumii" HDR la punctele x, y
a) În medie, logic.
Ponderea = exp (1 / N * suma 1. N (ln (epsilon + Lw (x, y)))
epsilon este o valoare mică pentru a evita singularitatea la punctul ln (0)
b) Valoarea medie.
Ponderea = suma 1. N (Lw (x, y)) / N,
3) Convertirea HDR în domeniul dinamic al monitorului [0..1] - Ld (x, y).
L (x, Y) = (a / Lampă) * Lw (x, y),
reversul Lw (x, y) față de valoarea medie a luminanței,
a este un factor care permite controlul caracterului compresiei HDR, de obicei 0,18
RGB (x, y) = nRGB (x, y) * Lw (x, y) este valoarea pixelilor RGB
nRGB (x, y) = RGB (x, y) / Lw (x, y) este valoarea normalizată a RGB
dRGB (x, y) este valoarea RGB convertită în intervalul dinamic [0. 1]
Funcții de conversie:
a) Ld (x, y) = L (x, y) / (1 + L (x, y))
apoi:
(x, y) = nRGB (x, y) = Ld (x, y) = (nRGB y))
= RGB (x, y) * (a / Lampă) * (1 / (1 + L (x, y))
b) Ld (x, y) = L (x, y) * (1 + L (x, y) / Lwhite ^ 2) / (1 + L
Lwhite - valoarea maximă a luminozității, care va fi afișată în culoarea albă, limita superioară a domeniului dinamic al monitorului.
apoi:
(x, y) = (nRGB (x, y)) * (a / Lampă) * ((1 + L (x, y) / Lwhite ^ x, y))
RGB (x, y) * (a / Lampă) * ((1 + L (x, y) / Lwhite ^ 2) / (1 + L
Un exemplu de shader de cartografiere a tonurilor poate fi găsit în SDX-ul DirectX în exemplul de iluminare HDR și în SDK-ul NVidia.
Ce este Maparea tonurilor?