¿Cómo calculo la temperatura de color de la fuente de luz que ilumina una imagen?

14

¿Cómo puedo calcular la temperatura de color (equivalente al cuerpo negro) de la fuente de luz que ilumina una imagen determinada? A continuación se muestran capturas de pantalla de Adobe Lightroom manipulando la temperatura de color y un cambio en los histogramas RGB. Dados los componentes RGB de la imagen, ¿cómo hago para calcularla? Debería esperar un solo valor: la temperatura equivalente del cuerpo negro de la fuente de iluminación, ¿verdad?

4600K 23810K

Lord Loh
fuente
No estoy seguro de que tenga sentido. La temperatura de color es una propiedad de la luz, como las lámparas utilizadas para iluminar una escena mientras se toma la imagen. No sé si las imágenes tienen una temperatura de color. Como, ¿cuál es la temperatura de color de una imagen verde lisa? El verde ni siquiera está en el espectro del cuerpo negro. ¿Fue producido por un objeto verde oscuro iluminado por una fuente de alta temperatura, o un objeto verde claro iluminado por una fuente de baja temperatura?
endolito
La última parte de mi pregunta: "Debería esperar un solo valor: la temperatura equivalente del cuerpo negro de la fuente de iluminación, ¿verdad?" ¿No he sido claro? Si es así, no dude en sugerir modificaciones. Si tiene una superficie verde, se verá diferente dependiendo de la fuente de iluminación. Estoy tratando de ver el verde y calcular la temperatura (equivalente al cuerpo negro) de la fuente de iluminación: ¿cómo lo hacen Photoshop y Light Room? Incluso un objeto verde simple no aparecerá como - # 00FF00 (rgb hex).
Lord Loh
@endolith: hice algunos cambios. ¿Crees que la pregunta es más clara ahora?
Lord Loh
Ok, eso tiene más sentido, pero todavía no estoy seguro de que sea posible. ¿No pueden dos tonos de verde iluminados por diferentes fuentes de temperatura de color producir imágenes de salida idénticas? Entonces, ¿cómo puede saber la temperatura de color del iluminante sin conocer las propiedades del objeto y la cámara?
endolito
@endolith: ¿puede? No estoy seguro. Creo que puede ser Las cámaras tienen un control de balance de blancos incorporado. Pero la mayoría de las imágenes tienen múltiples tonos y esto parece analizarse con histogramas, estocásticamente. Por lo tanto, puede haber un intervalo de confianza de estar a una temperatura particular. Además, las cámaras y las imágenes también tienen algunos metadatos. Tengo la sensación de que la ecuación para esto es un manejo experto: alguien (experto) lo calibró para dar un número. Al igual que * C o * F - ¿Quién decidió que el punto de congelación del agua se establecerá en 0 * C o 32 * F?
Lord Loh

Respuestas:

10

Este documento (descarga en pdf) proporciona las siguientes fórmulas para calcular la temperatura de color correlacionada (CCT). No dicen explícitamente (o me lo perdí), pero su ejemplo me lleva a inferir que están asumiendo valores RGB en el rango de 0-255.

1. Convierta los valores RGB a valores de triestímulo CIE (XYZ) de la siguiente manera:

X=(-0.14282)(R)+(1.54924)(sol)+(-0.95641)(si)
Y=(-0.32466)(R)+(1.57837)(sol)+(-0,73191)(si)=yolltumetroyonorteunnorteCmi
Z=(-0,68202)(R)+(0.77073)(sol)+(0.56332)(si)

2. Calcule los valores de cromaticidad normalizados:

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

3. Calcule el valor de CCT a partir de:

CCT=449norte3+3525norte2+6823,3norte+5520.33

dónde norte=(X-0,3320)/ /(0.1858-y)

Que se puede combinar para formar la siguiente ecuación:

CCT=449norte3+3525norte2+6823,3norte+5520.33
dónde norte=((0.23881)R+(0.25499)sol+(-0,58291)si)/ /((0.11109)R+(-0,85406)sol+(0.52289)si)

No estoy seguro de aplicar esto a una imagen, pero si solo desea un único número generalizador, ¿podría usar algún tipo de promedio? Encuentre un valor RGB "promedio" aceptable para la imagen (por ejemplo, el centroide) y úselo para calcular una temperatura o (una opción mucho más costosa computacionalmente) calcule la temperatura para cada píxel en la imagen y tome el promedio de esos resultados .

Además, tenga en cuenta que CCT es solo una métrica aproximada para la mayoría de los colores, ya que solo una sola curva en el espacio de color representa el color que se puede obtener de un radiador de cuerpo negro del mundo real. Por lo tanto, para todos los demás colores, la temperatura de color calculada es simplemente una aproximación de la temperatura del cuerpo negro que más se representa. Por lo tanto, para algunos colores (especialmente los verdes) en realidad puede ser un valor algo sin sentido, al menos en un sentido físico. Esto se ilustra bien en la siguiente imagen (del artículo de Wikipedia sobre la temperatura del color ).

La línea negra en la imagen representa el Locus de colores de Planckian que en realidad podría ser producido por la radiación corporal en bloque. Las líneas de cruce más pequeñas representan las isotermas de la aproximación CCT cerca del adiós.

Además, dado que su pregunta hace referencia específicamente a Adobe Lightroom, encontré esto mientras buscaba:

Los controles deslizantes [en Adobe Lightroom] no ajustan la temperatura del cuerpo negro de la luz, sino la compensación aplicada a la imagen para compensar la temperatura del cuerpo negro de la luz. Esto va al revés.

Tenga en cuenta que la temperatura de color que ve en el control deslizante de Lightroom no será la misma que la calculada a partir de las fórmulas anteriores.

Sam Maloney
fuente
Tenga en cuenta que la transformación RGB-XYZ utilizada anteriormente parece ser específica del espacio de color utilizado por un determinado hardware. Ciertamente, no es correcto para sRGB, que es lo que probablemente se usa en el caso de OP. Consulte las transformaciones correctas en el estándar sRGB
awdz9nld
Tenga en cuenta también que el componente Y en CIE 1931 denota luminancia, en oposición a la iluminancia
awdz9nld
0

He calculado algunos colores según sus fórmulas y, como veo en algunos casos, funciona, mientras que en otros casos, como el rojo (255 0 0) y el azul (0 0 255), da una respuesta incorrecta:

  • blanco (255 255 255): n = 0.4049, CCT = 8890.77 K -> parece ser correcto
  • amarillo (255 255 0): n = -0.6646, CCT = 2410.65 K -> parece ser correcto
  • verde (0 255 0): n = -0.2986, CCT = 3785.42 K -> parece ser correcto
  • cian (0 255 255): n = 0.9902, CCT = 16168.7 K -> parece ser correcto
  • magenta (255 0 255): n = -0.5428, CCT = 2783.54 K -> parece ser correcto

sin embargo:

  • rojo (255 0 0): n = 2.1497, CCT = 40938.6 K -> parece estar equivocado

  • azul (0 0 255): n = -1.1148, CCT = 1672.45 K -> parece estar equivocado

Tamas
fuente