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.
fonte
Respostas:
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
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.
fonte
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:
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.
fonte
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.
fonte