Como estimar a temperatura de cor do iluminante a partir de uma fotografia de uma tabela de cores padrão?


7

Estou trabalhando em uma câmera fotográfica digital. Preciso calcular a temperatura de cor do iluminante programaticamente usando algum algoritmo (não usando uma ferramenta de terceiros da Adobe ou etc.).

No meu caso, as imagens são capturadas usando minha câmera experimental / em desenvolvimento e o iluminante não é um iluminante padrão com uma temperatura de cor conhecida. Preciso disso para correção de cores / equilíbrio de branco. Estou procurando estimar a Temperatura da cor (grau Kelvin) de um iluminante de fonte de luz com base em algumas estatísticas dos dados RGB ou Raw Bayer da imagem capturada, como uma cartela de cores padrão (24 manchas de cor) sob esse iluminante.

Como posso estimar a temperatura da cor a partir desses dados da tabela de cores?

Qualquer ponteiro ou material de leitura ou algoritmo que fale sobre isso ajudaria.


Gostaria de oferecer uma resposta, mas estou curioso sobre uma coisa antes de fazê-lo. Você está tentando criar um algoritmo de balanço de branco automático ou está tentando fazer outra coisa? O balanço de branco não precisaria (ou poderá saber) a temperatura da cor de uma fonte de luz arbitrária, mas é possível equilibrar automaticamente uma imagem.
jrista

jrista: Eu sei que é possível fazer o balanceamento automático de branco sem conhecer a temperatura da cor do iluminante, obtendo apenas os coeficientes de escala usados ​​para dimensionar os valores RGB e executar AWB. Estou tentando fazer outra coisa.
goldenmean

11
@gloldenmean: Você pode explicar com mais detalhes o que você está tentando fazer? Eu acho que tenho uma idéia geral e provavelmente é possível, embora provavelmente exija algum trabalho algorítmico sofisticado para ser alcançado.
jrista

Respostas:


4

Para simplificar, use um cartão cinza neutro em vez de um verificador de cores. Ou use apenas um adesivo neutro do verificador de cores. Você precisa identificar na imagem a área que corresponde ao patch / cartão cinza relevante e, em seguida, calcular a média separadamente dos pixels brutos R, G e B nessa área. Verifique se nenhum desses pixels está saturado; caso contrário, comece novamente com uma exposição mais baixa.

Você acaba com um trigêmeo (R, G, B), que é a cor do seu iluminante no espaço de cores nativo da sua câmera. Converta então no espaço de cores padrão da CIE usando uma fórmula como

⎛X⎞   ⎛            ⎞ ⎛R⎞
⎜Y⎟ = ⎜ 3×3 matrix ⎟ ⎜G⎟
⎝Z⎠   ⎝            ⎠ ⎝B⎠

onde a matriz é a matriz de cores do seu sensor Bayer, que você provavelmente já conhece. A partir daqui, você pode calcular a temperatura de cor correlacionada usando fórmulas padrão.


2

O que você deseja fazer pode ser um espaço problemático muito complexo. A teoria das cores, a correção de cores / balanço de brancos, etc. é um campo muito complexo. Para garantir que eu entenda, você está tentando criar um algoritmo que possa definir adequadamente o balanço de branco de uma cena com base na fonte de luz iluminadora da cena. Pode ser possível fazer o que você precisa, e muitos dos algoritmos que você precisa usar devem estar disponíveis atualmente.

Alguns pontos a considerar e levar em consideração seu processamento:

  • Nenhuma fonte de luz na cena
    • Por exemplo: O sol iluminando uma cena por trás do fotógrafo
    • Outro exemplo: flash fora da cena ou outra iluminação
    • Este é provavelmente o maior problema e tornaria praticamente impossível fazer qualquer correção de cores baseada na fonte de luz
  • Várias fontes de luz
    • É possível que haja várias fontes de luz com a mesma temperatura de cor
    • De maior importância são várias fontes de luz com diferentes temperaturas de cor
    • Pergunta-chave: O que você deseja que aconteça se uma cena for iluminada com várias fontes de luz de cores diferentes?
  • Fontes de luz ambiente vs. ponto
    • Exemplo: o sol iluminando uma sala através de uma janela, com iluminação adicional iluminando as partes sombreadas
    • Pergunta-chave: Em qual fonte você deseja fazer o balanço de brancos?
  • Fontes de luz de cor radical
    • Às vezes, você tem cenas iluminadas por fontes de luz primárias de cores radicais
    • Por exemplo: vermelho, verde, azul, roxo, amarelo etc.
    • O plano Azul / Amarelo / Vermelho pode ser considerado extremo da temperatura normal da cor
    • O plano Verde / Roxo / Magenta pode ser considerado o extremo da tonalidade
    • Nenhuma cor saturada, primária ou secundária, é um bom alvo para equilibrar as cores de uma cena, pois provavelmente produziria um tom de cor pronunciado na imagem.
    • Pergunta-chave: O que você faz quando sua cena não possui iluminação ambiente ou primária comum e é iluminada total ou principalmente por cores radicais?

Se não excluirmos iluminação na cena e cores radicais do espaço problemático, provavelmente é possível identificar e medir a temperatura da cor das fontes de luz na cena. Atualmente, existem alguns algoritmos de detecção de formas bastante avançados que, desde que você tenha uma base decente ou formas conhecidas de fontes de luz, possibilitariam identificar todas as fontes de luz em uma cena. Depois de identificar cada fonte de luz, você provavelmente poderá usar algum tipo de cálculo de tristímulo para determinar a temperatura de cor da fonte de luz, utilizando os valores de subpixel verde, vermelho e azul ou valores de pixel RAW com os pesos adequados para gerar suas três luminâncias picos.

Seu algoritmo se torna particularmente complexo quando você envolve iluminação de cena radical ou não-padrão. As fontes de luz extremamente saturadas não atingem bons objetivos de balanço de branco, pois estão longe da faixa "branca" de uma gama de cores. É muito importante saber qual parte da sua cena é mais "neutra" para que você possa escolher um "cinza ou branco" adequado para basear o seu balanço de brancos, pois é fundamentalmente como o balanço de brancos funciona. Pode ser possível equilibrar a cor da cena com base em uma cor base diferente, como o vermelho, mas não sei exatamente como você precisaria modificar as fórmulas matemáticas existentes para acomodar essa abordagem (há uma quantidade razoável de matemática complexa envolvido na teoria das cores.)

A situação mais difícil é quando não há fontes de luz na cena. Se a cena for iluminada por uma fonte de luz fora da cena, seria praticamente impossível calcular sua temperatura de cor. Se você quiser adotar uma abordagem bastante radical ao design da câmera, poderá colocar alguns sensores básicos de medição de luz em todos os lados do corpo da câmera. Isso permitiria que a luz fosse medida de todas as direções, porém não seria totalmente precisa, e os ganhos para toda a complexidade extra provavelmente seriam menores. Outra abordagem pode ser criar um dispositivo de hotshoe que possa se conectar a vários medidores de ponto que forneçam leituras precisas de iluminação para a câmera para qualquer fonte de luz para a qual você aponte um medidor. Cenas com múltiplas fontes de luz ou fontes com cores radicais ainda gerariam um algoritmo muito complexo.

Tentar determinar a temperatura da cor das fontes de luz das cenas a partir de uma foto simples de um cartão de correção de cores, por exemplo, seria extremamente difícil, se não impossível. Você teria que fazer muitas suposições ou saber antecipadamente que tipo de luz estava iluminando sua cena. Geralmente, é por isso que as correções de balanço de branco / cor geralmente são feitas configurando o balanço de branco das cenas com base em uma cor neutra conhecida em uma cena. Fotografar uma paisagem duas vezes na mesma iluminação, uma vez e sem um cartão de correção de cores, permite escolher uma cor branca neutra ou pura válida durante o pós-processamento, que definirá o equilíbrio de cores adequado. Eu mesmo tenho o X-Rite ColorChecker Passport, que inclui duas linhas de amostras de correção de cores. Uma linha é para paisagens e a outra para retratos, e eles progridem de manchas de cores levemente frias para levemente quentes. Posso definir o tipo de equilíbrio de cores que desejo para as minhas cenas, o que tende a ser mais quente para a fotografia de paisagem e o branco mais neutro (5500k-6500k) para coisas como animais selvagens ou macro.

Se você estiver fazendo algo consideravelmente mais especializado, poderá definir um espaço menor de problema no qual poderá criar um algoritmo que faça o que você precisa. O espaço do problema teria que ser bastante estreito, com parâmetros e limites bastante bem definidos, a fim de gerar dados conhecidos suficientes para ajudar o algoritmo a tomar as decisões corretas ao balancear uma cena com branco. Qualquer cena sem fontes de luz primárias no quadro será muito difícil de realizar balanço de branco automático ou correção de cores.


Obrigado. Mais algumas perguntas, se você permitir. 1] Como gerar os 3 picos de luminância - É calculando a média dos dados R, G e B obtidos após o desmembramento? 2] O que você quer dizer com "média de amostras produzirá uma leitura bastante precisa da temperatura da cor"? Quais são as etapas de computação aqui?
goldenmean

1

Estou entendendo corretamente que o objetivo disso é que você está construindo uma nova câmera digital? Ou seja, trabalhando no desenvolvimento de firmware, e esse tipo de coisa?

Nesse caso, parece haver boas informações no artigo da Temperatura da cor da wikipedia , especificamente na seção Cálculo .

Isso não é algo que eu já fiz antes, então meu conhecimento é limitado. Eu deveria pensar, no entanto, que uma parte fundamental disso é saber do que é a imagem. Portanto, fotografar um cartão cinza branco ou neutro, com iluminação uniforme, seria uma escolha óbvia. E sua escolha de uma cartela de cores padrão também é boa, desde que o software saiba em qual parte do cartão qualquer conjunto de pixels em que você fará os cálculos se baseia. Portanto, se você planeja fazer várias fotos desse cartão em diferentes situações de iluminação, convém criar uma espécie de equipamento que possa manter o cartão no mesmo local em relação à câmera para cada foto, ou determine a posição do cartão (talvez com detecção de borda e / ou métodos semelhantes).

Obviamente, você também desejará verificar seus resultados em relação aos valores conhecidos ... um medidor de luz colorimétrico ou outro (s) dispositivo (s) desse tipo podem ser compras necessárias para realmente fazer isso da maneira certa. E existem tipos diferentes ... os destinados a fotógrafos (ou videógrafos ou fotógrafos de filmes) parecem aparecer com uma pesquisa no google , enquanto outros que podem ser mais orientados para o laboratório também existem . Conheço alguém com um medidor, por exemplo, que tem uma pequena esfera (aproximadamente 1 cm de diâmetro) no final de uma haste, que depois se conecta a uma porta USB do computador e mede a intensidade da luz em várias frequências, fornecendo uma verdadeira análise espectral de uma fonte de luz. Não sei exatamente como esse dispositivo é chamado, mas provavelmente poderia descobrir se isso é útil.

Claro, esses dispositivos também precisam fazer isso de alguma forma, então talvez apenas aprender a teoria e a matemática disso funcione? :) Vários itens úteis (e tenho certeza que alguns menos úteis) podem ser encontrados com uma pesquisa no google . Eu imagino que você tenha alguma pesquisa séria pela frente, além do escopo do que você poderá obter respostas difíceis aqui. Espero que isso lhe dê alguns pontos de partida.


@ Sim: pretendo fixar o cartão em um torno preso a uma mesa, o dispositivo da câmera também é fixado em um grampo e altera as fontes de luz.
goldenmean
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.