Comment calculer la température de couleur de la source lumineuse éclairant une image?

14

Comment puis-je calculer la température de couleur (équivalent du corps noir) de la source lumineuse éclairant une image donnée? Vous trouverez ci-dessous des captures d'écran d'Adobe Lightroom manipulant la température des couleurs et un changement dans les histogrammes RVB. Étant donné les composants RVB de l'image, comment dois-je procéder pour le calculer? Je devrais m'attendre à une seule valeur - La température équivalente au corps noir de la source d'éclairage, non?

4600K 23810K

Lord Loh.
la source
Je ne suis pas sûr que cela ait du sens. La température de couleur est une propriété de la lumière, comme les lampes utilisées pour éclairer une scène pendant la prise de vue. Je ne sais pas si les images elles-mêmes ont une température de couleur. Par exemple, quelle est la température de couleur d'une image vert uni? Le vert n'est même pas dans le spectre du corps noir. A-t-il été produit par un objet vert foncé éclairé par une source à haute température, ou un objet vert clair éclairé par une source à basse température?
endolith
La dernière partie de ma question - "Je devrais m'attendre à une seule valeur - La température équivalente au corps noir de la source d'éclairage, non?" Ai-je été peu clair? Si oui, n'hésitez pas à suggérer des modifications. Si vous avez une surface verte, elle sera différente selon la source d'éclairage. J'essaie de voir le vert et de calculer la température (équivalent du corps noir) de la source d'éclairage - Comment font Photoshop et Light Room ?. Même un objet vert uni ne doit pas apparaître sous la forme - # 00FF00 (hex RVB).
Lord Loh.
@endolith - J'ai apporté quelques modifications. Pensez-vous que la question est plus claire maintenant?
Lord Loh.
D'accord, cela a plus de sens, mais je ne suis toujours pas sûr que ce soit possible. Deux nuances de vert éclairées par des sources de température de couleur différentes ne peuvent-elles pas produire des images de sortie identiques? Alors, comment pouvez-vous déterminer la température de couleur de l'illuminant sans connaître les propriétés de l'objet et de la caméra?
endolith
@endolith - Peut-il? Je ne suis pas sûr. Je pense que oui. Les caméras ont intégré le contrôle de la balance des blancs. Mais la plupart des images ont plusieurs nuances et cela semble être analysé avec des histogrammes - stochastiquement. Il pourrait donc y avoir un intervalle de confiance d'être à une température particulière. En outre, les caméras et les images ont également des métadonnées. J'ai le sentiment que l'équation pour cela est un entraînement expert - quelqu'un (expert) l'a calibré pour donner un nombre. Tout comme * C ou * F - Qui a décidé que le point de congélation de l'eau devait être réglé sur 0 * C ou 32 * F?
Lord Loh.

Réponses:

10

Ce document (téléchargement pdf) donne les formules suivantes pour calculer la température de couleur corrélée (CCT). Ils ne le disent pas explicitement (ou je l'ai manqué), mais leur exemple me conduit à déduire qu'ils supposent des valeurs RVB dans la plage de 0 à 255.

1. Convertissez les valeurs RVB en valeurs tristimulus CIE (XYZ) comme suit:

X=(-0,14282)(R)+(1.54924)(g)+(-0,95641)(B)
Oui=(-0,32466)(R)+(1.57837)(g)+(-0,73191)(B)=jellumjenunence
Z=(-0,68202)(R)+(0,77073)(g)+(0,56332)(B)

2. Calculez les valeurs de chromaticité normalisées:

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

3. Calculez la valeur CCT à partir de:

CCT=449n3+3525n2+6823,3n+5520.33

où n=(X-0,3320)/(0,1885-y)

Qui peut être combiné pour former l'équation suivante:

CCT=449n3+3525n2+6823,3n+5520.33
où n=((0,23881)R+(0,25499)g+(-0,58291)B)/((0.11109)R+(-0,85406)g+(0,52289)B)

Je ne suis pas sûr d'appliquer ceci à une image, mais si vous voulez juste un seul nombre généralisant, vous pourriez peut-être utiliser une sorte de moyenne? Soit trouver une valeur RVB "moyenne" acceptable pour l'image (par exemple le centroïde) et l'utiliser pour calculer une température ou (une option beaucoup plus coûteuse en calcul) calculer la température pour chaque pixel de l'image et prendre la moyenne de ces résultats .

En outre, gardez à l'esprit que la CCT n'est qu'une mesure approximative pour la plupart des couleurs, car seule une courbe unique dans l'espace colorimétrique représente réellement la couleur qui peut être obtenue à partir d'un radiateur de corps noir du monde réel. Ainsi, pour toutes les autres couleurs, la température de couleur calculée est simplement une approximation de la température du corps noir qu'elle représente le plus étroitement. Ainsi, pour certaines couleurs (en particulier les verts), cela peut en fait être une valeur quelque peu dénuée de sens, au moins dans un sens physique. Ceci est bien illustré dans l'image suivante (de l' article de wikipedia sur la température de couleur ).

La ligne noire de l'image représente le locus planckien des couleurs qui pourraient en fait être produites par le rayonnement du corps en bloc. Les lignes de croisement plus petites représentent les isothermes de l'approximation CCT à proximité.

De plus, comme votre question fait spécifiquement référence à Adobe Lightroom, j'ai trouvé cela en cherchant autour:

Les curseurs [dans Adobe Lightroom] ajustent non pas la température du corps noir de la lumière, mais la compensation appliquée à l'image pour compenser la température du corps noir de la lumière. Cela va dans l'autre sens.

Gardez donc à l'esprit que la température de couleur que vous voyez sur le curseur Lightroom ne sera pas la même que celles calculées à partir des formules ci-dessus.

Sam Maloney
la source
Veuillez noter que la transformation RGB-XYZ utilisée ci-dessus semble être spécifique à l'espace colorimétrique utilisé par un certain matériel. Ce n'est certainement pas correct pour sRGB, qui est probablement utilisé dans le cas d'OP. Reportez-vous aux transformations correctes dans la norme sRGB
awdz9nld
Notez également que la composante Y dans CIE 1931 dénote la luminance, par opposition à l'éclairement
awdz9nld
0

J'ai calculé certaines couleurs en fonction de vos formules, et comme je le vois dans certains cas, cela fonctionne, tandis que dans d'autres cas - comme le rouge (255 0 0) et le bleu (0 0 255) - cela donne une mauvaise réponse:

  • blanc (255 255 255): n = 0,4049, CCT = 8890,77 K -> semble correct
  • jaune (255 255 0): n = -0,6646, CCT = 2410,65 K -> semble correct
  • vert (0 255 0): n = -0,2986, CCT = 3785,42 K -> semble correct
  • cyan (0 255 255): n = 0,9902, CCT = 16168,7 K -> semble être correct
  • magenta (255 0 255): n = -0,5428, CCT = 2783,54 K -> semble être correct

pourtant:

  • rouge (255 0 0): n = 2.1497, CCT = 40938.6 K -> semble être faux

  • bleu (0 0 255): n = -1.1148, CCT = 1672.45 K -> semble être faux

Tamas
la source