Come posso calcolare la temperatura di colore della sorgente luminosa che illumina un'immagine?


14

Come posso calcolare la temperatura di colore (equivalente del corpo nero) della sorgente luminosa che illumina una determinata immagine? Di seguito sono riportati screenshot di Adobe Lightroom che manipolano la temperatura del colore e uno spostamento negli istogrammi RGB. Dati i componenti RGB dell'immagine, come posso calcolarlo? Dovrei aspettarmi un solo valore: la temperatura equivalente del corpo nero della fonte di illuminazione, giusto?

4600K 23810K


Non sono sicuro che abbia senso. La temperatura di colore è una proprietà della luce, come le lampade utilizzate per illuminare una scena mentre l'immagine viene scattata. Non so se le immagini stesse abbiano una temperatura di colore. Ad esempio, qual è la temperatura di colore di una semplice immagine verde? Il verde non è nemmeno nello spettro del corpo nero. È stato prodotto da un oggetto verde scuro illuminato da una sorgente ad alta temperatura o da un oggetto verde chiaro illuminato da una sorgente a bassa temperatura?
endolith

L'ultima parte della mia domanda - "Dovrei aspettarmi un singolo valore - La temperatura equivalente del corpo nero della fonte di illuminazione, giusto?" Sono stato poco chiaro? In tal caso, non esitare a suggerire modifiche. Se hai una superficie verde, dovrebbe apparire diversa a seconda della fonte di illuminazione. Sto cercando di vedere il verde e calcolare la temperatura (equivalente del corpo nero) della fonte di illuminazione - Come fanno Photoshop e Light Room ?. Anche un semplice oggetto verde non deve apparire come - # 00FF00 (rgb hex).
Lord Loh.

@endolith - Ho apportato alcune modifiche. Pensi che la domanda sia più chiara ora?
Lord Loh.

Ok, ha più senso, ma non sono ancora sicuro che sia possibile. Due tonalità di verde illuminate da diverse fonti di temperatura di colore non possono produrre immagini di output identiche? Quindi, come si può dire la temperatura di colore dell'illuminante senza conoscere le proprietà dell'oggetto e della fotocamera?
endolith

@endolith - Can it? Non sono sicuro. Penso che potrebbe. Le telecamere hanno il controllo del bilanciamento del bianco incorporato. Ma la maggior parte delle immagini ha più sfumature e questo sembra essere analizzato con istogrammi - stocasticamente. Quindi potrebbe esserci un intervallo di confidenza di essere a una temperatura particolare. Inoltre, anche le fotocamere e le immagini hanno alcuni metadati. Ho la sensazione che l'equazione per questo sia un impulso esperto - qualcuno (esperto) l'ha calibrato per dare un numero. Proprio come * C o * F - Chi ha deciso che il punto di congelamento dell'acqua deve essere impostato su 0 * C o 32 * F?
Lord Loh.

Risposte:


10

Questo documento (download pdf) fornisce le seguenti formule per il calcolo della temperatura di colore correlata (CCT). Non dicono esplicitamente (o l'ho perso), ma il loro esempio mi porta a dedurre che stanno assumendo valori RGB nell'intervallo 0-255.

1. Convertire i valori RGB in valori tristimulus CIE (XYZ) come segue:

X=(-0,14,282 mila)(R)+(1,54,924 mila)(sol)+(-0,95,641 mila)(B)
Y=(-0,32,466 mila)(R)+(1,57,837 mila)(sol)+(-0,73,191 mila)(B)=iollumionun'nce
Z=(-0,68,202 mila)(R)+(0,77,073 mila)(sol)+(0,56,332 mila)(B)

2. Calcola i valori di cromaticità normalizzati:

X=X/(X+Y+Z)
y=Y/(X+Y+Z)

3. Calcola il valore CCT da:

CCT=449n3+3525n2+6.823,3n+5.520,33

dove n=(X-0,3320)/(0,1858-y)

Che possono essere combinati per formare la seguente equazione:

CCT=449n3+3525n2+6.823,3n+5.520,33
dove n=((0,23,881 mila)R+(0,25,499 mila)sol+(-0,58,291 mila)B)/((0,11,109 mila)R+(-0,85,406 mila)sol+(0,52,289 mila)B)

Non sono sicuro di applicarlo a un'immagine, ma se vuoi solo un singolo numero generalizzante, potresti forse usare una sorta di media? O trova un valore RGB "medio" accettabile per l'immagine (es. Il centroide) e usa quello per calcolare una temperatura o (un'opzione molto più computazionalmente costosa) calcola la temperatura per ogni pixel nell'immagine e prendi la media di quei risultati .

Inoltre, tieni presente che CCT è solo una metrica approssimativa per la maggior parte dei colori, poiché solo una singola curva nello spazio colore rappresenta in realtà il colore che può essere ottenuto da un radiatore del corpo nero del mondo reale. Pertanto, per tutti gli altri colori, la temperatura di colore calcolata è semplicemente un'approssimazione della temperatura del corpo nero che rappresenta più da vicino. Pertanto, per alcuni colori (in particolare i verdi) può effettivamente essere un valore alquanto insignificante, almeno in senso fisico. Questo è ben illustrato nella seguente immagine (dall'articolo di Wikipedia sulla temperatura del colore ).

La linea nera nell'immagine rappresenta il Locus Planckiano di colori che potrebbero essere effettivamente prodotti dalla radiazione del corpo a blocchi. Le linee di incrocio più piccole rappresentano le isoterme dell'approssimazione CCT nelle vicinanze.

Inoltre, poiché la tua domanda si riferisce specificamente ad Adobe Lightroom, ho trovato questo mentre cercavo :

I cursori [in Adobe Lightroom] non regolano la temperatura del corpo nero della luce, ma la compensazione applicata all'immagine per compensare la temperatura del corpo nero della luce. Questo è il contrario.

Quindi tieni presente che la temperatura del colore che vedi sul cursore Lightroom non sarà la stessa di quella calcolata dalle formule precedenti.


Si noti che la trasformazione RGB-XYZ utilizzata in precedenza sembra essere specifica dello spazio colore utilizzato da un determinato hardware. Sicuramente non è corretto per sRGB, che è probabilmente quello che verrà usato nel caso di OP. Fare riferimento alle trasformazioni corrette nello standard sRGB
awdz9nld,

Si noti inoltre che il componente Y in CIE 1931 denota luminanza, in contrapposizione all'illuminamento
awdz9nld,

0

Ho calcolato alcuni colori in base alle tue formule e come vedo in alcuni casi funziona, mentre in altri casi - come rosso (255 0 0) e blu (0 0 255) - dà una risposta sbagliata:

  • bianco (255 255 255): n = 0.4049, CCT = 8890.77 K -> sembra essere corretto
  • giallo (255255 0): n = -0.6646, CCT = 2410.65 K -> sembra essere corretto
  • verde (0 255 0): n = -0.2986, CCT = 3785.42 K -> sembra essere corretto
  • ciano (0 255 255): n = 0.9902, CCT = 16168,7 K -> sembra essere corretto
  • magenta (255 0 255): n = -0.5428, CCT = 2783.54 K -> sembra essere corretto

tuttavia:

  • rosso (255 0 0): n = 2.1497, CCT = 40938,6 K -> sembra essere sbagliato

  • blu (0 0 255): n = -1.1148, CCT = 1672.45 K -> sembra essere sbagliato

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.