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.