Processando arquivos RAW da câmera Raspberry Pi HQ

imagem


Quando a maioria das pessoas tira uma foto, elas só precisam apertar o botão do obturador em sua câmera ou telefone, e uma imagem pronta para ver, geralmente no conhecido formato JPEG, aparece quase que instantaneamente na tela. No entanto, em alguns casos, é necessário mais controle sobre a produção desse mesmo JPEG. Por exemplo, você pode querer aumentar ou diminuir a atividade da função de remoção de ruído ou pode sentir que as cores não estão corretas.



E então os arquivos RAW vêm ao resgate. Neste contexto, uma imagem raw é uma transferência direta de dados recebidos dos pixels da matriz da foto, e não passou por processamento adicional... Normalmente, esses arquivos estão em um formato de imagem Bayer relativamente padrão, em homenagem a Bryce Bayer, que inventou a técnica em 1974 enquanto trabalhava para a Kodak. A ideia é evitar que o processador de processamento de imagem (ISP) integrado converta a imagem Bayer bruta em visível, mas faça você mesmo usando um programa separado, geralmente chamado de conversor RAW.





Uma imagem Bayer registra apenas uma cor para cada pixel, conforme mostrado.



Às vezes, a imagem bruta é comparada à tecnologia de negativo fotográfico antigo e, embora muitos fabricantes de câmeras usem seus próprios formatos, o tipo mais comum de arquivo RAW é o negativo digital (ou DNG ), descrito pela Adobe em 2004. A questão permanece - como obter arquivos DNG do Raspberry Pi para que possam ser processados ​​usando seu conversor RAW favorito.



Obtendo imagem raw do Raspberry Pi



Muitos leitores estarão familiarizados com o aplicativo raspistill, que recebe imagens JPEG de uma câmera. Raspistill tem um comando -r que acrescenta dados brutos ao final do arquivo JPEG. Os visualizadores de JPEG ainda exibirão esse arquivo normalmente, ignorando os muitos megabytes de dados brutos anexados na parte de trás. Esse arquivo JPEG + RAW pode ser obtido usando o comando no terminal:



raspistill -r -o image.jpg


Infelizmente, o formato JPEG + RAW é exatamente o que sai da câmera e não é compatível com o conversor RAW. Para usá-lo, precisamos convertê-lo para o formato DNG.



PyDNG



Este utilitário converte o arquivo JPEG + RAW nativo do Raspberry Pi em DNG. PyDNG pode ser baixado de github.com/schoolpost/PyDNG, há também uma instrução mais detalhada lá. Resumindo, precisamos seguir estas etapas:



git clone https://github.com/schoolpost/PyDNG
cd PyDNG
pip3 install src/.  #  PyDNG  Python3


PyDNG pode ser usado como parte de scripts Python maiores ou executado por conta própria. Continuando com o exemplo raspistill, podemos inserir a linha de entrada:



python3 examples/utility.py image.jpg


O arquivo DNG resultante pode ser processado com vários conversores RAW. Alguns deles são gratuitos (por exemplo, RawTherapee ou dcraw, embora o último não seja mais desenvolvido ou suportado), e existem muitas opções comerciais conhecidas (Adobe Camera Raw ou Lightroom).



Equilíbrio de branco e matrizes de cores



Um dos problemas ao lidar com arquivos RAW com o Raspberry Pi neste momento é obter cores significativas. Antes disso, as imagens eram renderizadas com um viés verde, uma vez que nenhum equilíbrio de cores foi feito, e o verde geralmente é o canal de cor mais sensível. Para piorar as coisas, uma vez que os valores RGB na imagem bruta simplesmente refletem a sensibilidade dos pixels do sensor a diferentes comprimentos de onda, eles, a priori, não se correlacionam com precisão com as cores que percebemos com nossos olhos. É aqui que o equilíbrio de branco e as matrizes de cores são úteis.



Precisamos dos multiplicadores de branco corretos para fazer as partes neutras da cena parecerem neutras. Podemos usar um palpite do raspistill sobre eles, contido no arquivo JPEG + RAW (ou você pode medir seu próprio valor em algum lugar da imagem - por exemplo, em um cartão cinza). Em seguida, matrizes e tabelas de pesquisa são necessárias para converter as cores da câmera em sRGB ou Adobe RGB.



resultados



Tentativas anteriores de converter RAW e os resultados obtidos após a aplicação da versão atualizada do PyDNG.











































Arquivos DCP



Para pessoas familiarizadas com arquivos DNG, fornecemos links para arquivos DCP (DNG Camera Profile) com um perfil de câmera (em formato binário). Experimente arquivos diferentes, encorajamos os usuários a experimentar, criar seus próprios arquivos e publicar os resultados!



  1. O perfil de cor base integrado no PyDNG, cujos resultados são mostrados acima. É relativamente pequeno e pode ser visto como um arquivo JSON .
  2. Perfil maior aprimorado com tabelas de referência para renderização equilibrada de cores.
  3. Semelhante ao anterior , mas com algumas correções para melhorar a cor da pele e do céu.


No entanto, esses arquivos têm várias peculiaridades:



  • Eles são calibrados para uma câmera Raspberry Pi de alta qualidade específica, não para um módulo "típico" comum.
  • As fontes de luz estavam ao nosso alcance - em particular, a lâmpada D65 parece ser transmitida de forma um pouco imprecisa.
  • A calibração funciona apenas se a temperatura da cor não difere muito das duas fontes de cor envolvidas na calibração - em nosso caso, é a faixa de 2900K a 6000K.


Portanto, ainda há espaço para melhorias. No entanto, testes em muitos módulos mostraram que esses parâmetros são um avanço significativo.



Agradecimentos



Jack Hogan pela calibração da matriz de cores com DCamProf, Zsabe Nagi por adicionar novos recursos ao PyDNG.



Materiais adicionais



  • Existem muitos recursos por aí que descrevem a conversão de uma imagem Bayer bruta em uma imagem RGB ou YUV visível. Por exemplo, um artigo no blog de Jack .
  • Para compreender a função das matrizes de cores que desempenham em um arquivo DNG, consulte suas especificações . Em particular, isso é abordado no Capítulo 6.



All Articles