Como calculo a temperatura de cor da fonte de luz que ilumina uma imagem?


14

Como posso calcular a temperatura da cor (equivalente ao corpo preto) da fonte de luz que ilumina uma determinada imagem? Abaixo estão as capturas de tela do Adobe Lightroom manipulando a temperatura da cor e uma mudança nos histogramas RGB. Dados os componentes RGB da imagem, como faço para calculá-la? Eu deveria esperar um valor único - A temperatura equivalente do corpo preto da fonte de iluminação, certo?

4600K 23810K


Não sei se isso faz sentido. A temperatura da cor é uma propriedade da luz, como as lâmpadas usadas para iluminar uma cena enquanto a imagem está sendo tirada. Não sei se as próprias imagens têm temperatura de cor. Como, qual é a temperatura da cor de uma imagem verde lisa? Verde nem está no espectro do corpo negro. Foi produzido por um objeto verde escuro iluminado por uma fonte de alta temperatura ou um objeto verde claro iluminado por uma fonte de baixa temperatura?
endolith

A última parte da minha pergunta - "Eu deveria esperar um valor único - A temperatura equivalente do corpo preto da fonte de iluminação, certo?" Eu não tenho certeza? Nesse caso, fique à vontade para sugerir edições. Se você tiver uma superfície verde, ela parecerá diferente dependendo da fonte de iluminação. Estou tentando ver o verde e calcular a temperatura (equivalente ao corpo preto) da fonte de iluminação - Como o Photoshop e o Light Room fazem isso ?. Mesmo um objeto verde liso não deve aparecer como - # 00FF00 (rgb hex).
Senhor Loh.

@ endolith - Fiz algumas alterações. Você acha que a pergunta está mais clara agora?
Senhor Loh.

Ok, isso faz mais sentido, mas ainda não tenho certeza de que seja possível. Dois tons de verde iluminados por diferentes fontes de temperatura de cor não podem produzir imagens de saída idênticas? Então, como você pode determinar a temperatura da cor do iluminante sem conhecer as propriedades do objeto e da câmera?
endolith

@endolith - Pode? Não tenho certeza. Eu acho que sim. As câmeras foram construídas no controle de balanço de branco. Mas a maioria das imagens tem várias tonalidades e isso parece ser analisado com histogramas - estocamente. Portanto, pode haver um intervalo de confiança de estar em uma temperatura específica. Além disso, câmeras e fotos também possuem alguns metadados. Tenho a sensação de que a equação para isso é uma unidade especializada - alguém (especialista) a calibrou para fornecer um número. Assim como * C ou * F - Quem decidiu que o ponto de congelamento da água deve ser definido como 0 * C ou 32 * F?
Senhor Loh.

Respostas:


10

Este documento (download em pdf) fornece as seguintes fórmulas para o cálculo da temperatura de cor correlacionada (CCT). Eles não dizem explicitamente (ou eu errei), mas o exemplo deles me leva a inferir que eles estão assumindo valores RGB no intervalo de 0 a 255.

1. Converta os valores RGB em valores tristimulus CIE (XYZ) da seguinte maneira:

X=(-0,14282)(R)+(1.54924)(G)+(-0,95641)(B)
Y=(-0,32466)(R)+(1.57837)(G)+(-0,73191)(B)=EueueuvocêmEunumance
Z=(-0,68202)(R)+(0,77073)(G)+(0,56332)(B)

2. Calcule os valores normalizados de cromaticidade:

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

3. Calcule o valor CCT de:

CCT=449n3+3525n2+6823,3n+5520,33

Onde n=(x-0,3320)/(0,1858-y)

Que pode ser combinado para formar a seguinte equação:

CCT=449n3+3525n2+6823,3n+5520,33
Onde n=((0,223881)R+(0,25499)G+(-0,58291)B)/((0.11109)R+(-0,85406)G+(0,52289)B)

Não tenho certeza sobre como aplicar isso a uma imagem, mas se você quiser apenas um número generalizado, talvez possa usar algum tipo de média? Encontre um valor RGB "médio" aceitável para a imagem (por exemplo, o centróide) e use-o para calcular uma temperatura ou (uma opção muito mais cara em termos de computação) calcule a temperatura de cada pixel da imagem e faça a média desses resultados .

Além disso, lembre-se de que o CCT é apenas uma métrica aproximada para a maioria das cores, pois apenas uma única curva no espaço de cores representa realmente a cor que pode ser obtida com um radiador de corpo preto do mundo real. Assim, para todas as outras cores, a temperatura calculada da cor é simplesmente uma aproximação da temperatura do corpo preto que ela representa mais de perto. Assim, para algumas cores (especialmente as verdes), pode realmente ser um valor um tanto sem sentido, pelo menos no sentido físico. Isso está bem ilustrado na imagem a seguir (do artigo da Wikipedia sobre temperatura de cor ).

A linha preta na imagem representa o Locus Planckiano de cores que realmente poderiam ser produzidas pela radiação do corpo do bloco. As linhas de cruzamento menores representam as isotermas da aproximação da TCC nas proximidades.

Além disso, como sua pergunta faz referência específica ao Adobe Lightroom, encontrei isso ao pesquisar:

Os controles deslizantes [no Adobe Lightroom] ajustam não a temperatura do corpo preto da luz, mas a compensação aplicada à imagem para compensar a temperatura do corpo preto da luz. Isso acontece ao contrário.

Lembre-se de que a temperatura da cor que você vê no controle deslizante do Lightroom não será a mesma que a calculada a partir das fórmulas acima.


Esteja ciente de que a transformação RGB-XYZ usada acima parece ser específica para o espaço de cores usado por um determinado hardware. Certamente não está correto para o sRGB, que é o que provavelmente está sendo usado no caso do OP. Consulte as transformações corretas no padrão sRGB
awdz9nld

Observe também que o componente Y na CIE 1931 denota luminância, em oposição à iluminação #
awdz9nld

0

Calculei algumas cores de acordo com suas fórmulas e, como vejo em alguns casos, funciona, enquanto em outros casos - como vermelho (255 0 0) e azul (0 0 255) -, ele fornece uma resposta errada:

  • branco (255 255 255): n = 0,4049, CCT = 8890,77 K -> parece estar correto
  • amarelo (255 255 0): n = -0,6646, CCT = 2410,65 K -> parece estar correto
  • verde (0 255 0): n = -0,2986, CCT = 3785,42 K -> parece estar correto
  • ciano (0 255 255): n = 0,9902, CCT = 16168,7 K -> parece estar correto
  • magenta (255 0 255): n = -0,5428, CCT = 2783,54 K -> parece estar correto

Contudo:

  • vermelho (255 0 0): n = 2.1497, CCT = 40938,6 K -> parece estar errado

  • azul (0 0 255): n = -1.1148, CCT = 1672,45 K -> parece estar errado

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.