Figura: Foto 1: Foto Nikon D610 com lente AF-S 24-120 mm f / 4 a 24 mm f / 8 ISO100
Quais são as etapas básicas para renderizar uma imagem RAW em um nível baixo? Neste artigo, descreverei o que está acontecendo nos bastidores dos conversores de câmeras digitais, onde os dados brutos são convertidos em uma imagem RAW visível - às vezes chamada de renderização. Para demonstrar a transformação das informações da imagem em cada etapa, usarei a foto mostrada no início do artigo, tirada em uma Nikon D610 com uma lente AF-S 24-120mm f / 4 e configurações 24mm f / 8 ISO100.
Renderizar é conversão e edição RAW
A renderização pode ser dividida em dois processos principais: conversão e edição RAW. A conversão RAW é necessária para transformar os dados brutos da imagem em um formato padrão que a edição de imagens, programas de visualização e dispositivos possam entender. Normalmente, isso é feito usando um espaço de cores colorimétrico RGB, como Adobe ou sRGB.
Os editores obtêm informações sobre uma imagem em um espaço de cor padrão e aplicam ajustes para torná-la mais "adequada" ou "agradável" para o fotógrafo.
Um exemplo de conversor RAW limpo é o dcraw, de David Coffin. Um exemplo de editor limpo é o Photoshop da Adobe. A maioria dos conversores RAW combina funções de conversão RAW com funções de editor (por exemplo, Capture NX, LR, C1).
7 etapas para conversão RAW básica
O limite de onde termina a conversão e começa a edição é bastante borrado, mas dependendo de como você os separa, existem apenas 7 etapas no processo principal de conversão de um arquivo RAW em um espaço de cores colorimétrico padrão - por exemplo, sRGB. As etapas não precisam seguir essa ordem, mas a sequência a seguir é bastante lógica.
- Carregue dados lineares do arquivo RAW e subtraia os níveis de preto.
- Equilibre o branco.
- Brilho linear correto.
- Corte os dados da imagem.
- Restaura a imagem original do mosaico ( degradação ).
- Aplique transformações e correções de cores.
- Aplique gama.
Na conversão básica de RAW, o processo permanece linear até o final. Idealmente, a curva gama na última etapa é corrigida pelo dispositivo que exibe a imagem, de forma que o sistema de processamento de imagem do início ao fim - do momento em que a luz atinge o sensor até o momento em que a luz atinge o olho - seja aproximadamente linear. Se você precisar renderizar "honestamente" uma imagem do jeito que ela entrou no sensor, isso é tudo que você precisa de um conversor RAW.
+ Mapeamento de tom: adapta-se à faixa dinâmica do dispositivo de saída
Porém, como veremos, a conversão básica de arquivos RAW em câmeras digitais existentes quase nunca dá um resultado satisfatório, uma vez que a maioria dos dispositivos de saída (papel fotográfico, monitores) têm taxas de contraste inferiores ao que boas câmeras digitais podem capturar. Portanto, é praticamente necessário realizar a correção de tom para trazer a ampla faixa dinâmica da câmera para a estreita faixa dinâmica do dispositivo. Pode ser uma curva de contraste simples - ou um mapeamento de tons mais complexo, juntamente com ajustes locais e globais para sombras, destaques, clareza, etc. (controles deslizantes padrão em editores comerciais e software conversor). Isso geralmente é feito durante a edição de uma renderização - mas se você deseja obter cores "precisas",Idealmente, o mapeamento de tons deve fazer parte da 6ª etapa da gradação de cores ao converter RAW (consulte.um ótimo site de Alex Torgera descrevendo perfis de cores).
Após sete etapas básicas de conversão, você pode prosseguir para o editor para corrigir objetivamente as imperfeições identificadas em um quadro específico e em uma saída de imagem específica para o dispositivo de saída - e também tornar a imagem subjetivamente mais agradável aos olhos do artista. Por exemplo, conserte a distorção da lente e a aberração cromática lateral; aplicar redução de ruído; aplique um filtro de nitidez. Pode ser melhor executar algumas dessas funções no espaço linear antes de certas etapas de conversão RAW, mas geralmente são opcionais e podem ser feitas da mesma maneira no editor após a renderização no espaço gama.
Neste artigo, vamos nos concentrar na parte de renderização básica da conversão de RAW, deixando o mapeamento e edição de tons para outra hora.
1. Carregue os dados lineares do arquivo RAW e subtraia os níveis de preto
O primeiro passo para converter RAW é simplesmente carregar os dados do arquivo RAW para a memória. Uma vez que os formatos RAW diferem de câmera para câmera, a maioria dos conversores usa variações dos programas LibRaw / dcraw de código aberto. Os comandos a seguir para LibRaw ou dcraw reempacotam o RAW em um TIF linear de 16 bits que pode ser lido por aplicativos de processamento (Matlab, ImageJ, PS, etc.). Não há necessidade de instalar o programa, basta que o arquivo executável esteja na variável PATH ou no mesmo diretório.
unprocessed_raw -T yourRawFile
ou
dcraw -d -4 -T yourRawFile
Se o seu sensor de imagem for bem projetado e dentro das especificações, os dados gravados estarão em uma relação linear com a intensidade da luz, no entanto, normalmente são armazenados com polarizações dependentes de câmera e canal. T.N. os níveis de preto têm magnitudes de várias centenas ou milhares de DN e devem ser subtraídos dos dados brutos originais para que a intensidade de pixel zero corresponda à luz zero. dcraw com a linha de comando acima fará isso por você (embora usando algumas médias). Ao usar o unocessed_raw, você precisa saber o nível de preto da sua câmera e subtraí-lo de acordo (ou você pode usar o parâmetro –B, que, no entanto, não parece ser suportado na versão atual do LibRaw).
Acontece que a Nikon subtrai os níveis de preto de cada canal antes de gravar nos arquivos D610, portanto, para nosso quadro de referência, qualquer um dos comandos funcionará. Eu o carreguei com o comando dcraw -d -4 -T, que também dimensiona os dados para 16 bits (consulte a etapa 3 para a correção de brilho abaixo).
Os dados carregados neste estágio são simplesmente a intensidade da escala de cinza da imagem. No entanto, eles têm uma correspondência com a posição na matriz associada a um filtro de cor específico sob o qual está localizado. Em matrizes Bayer, existem linhas de cores alternadas de vermelho e verde - e verde e azul - como mostrado na imagem. A ordem exata é determinada pelo primeiro quarteto da área ativa da matriz - neste caso é RGGB, mas três outras opções também são possíveis.
Fig 2: Matriz de filtro de cor Bayer: layout RGGB.
O Bayer Matrix para o D610 tem um layout RGGB. Os dados brutos neste estágio parecem uma imagem em preto e branco subexposta:
Fig. 3: Etapa 1: Imagem raw linear com níveis de preto subtraídos. Deve parecer tão brilhante quanto a foto a seguir. 4. Do contrário, seu navegador não lida com as cores corretamente (estou usando o Chrome e obviamente não as lida corretamente).
Se a foto estiver preta, seu navegador não sabe como exibir dados de linha rotulados corretamente. Curiosamente, o editor do WordPress exibe a imagem corretamente, mas ela não parece certa quando postada no Chrome (observação: isso foi finalmente corrigido em 2019) [artigo 2016 / aprox. trad.]. É assim que esta imagem deve ser:
Fig. 4: mesma foto, mas em escala de cinza CFA
É assim que os dados CFA lineares aparecem diretamente no arquivo. Parece um pouco escuro, pois mudei a exposição para a direita para não cortar os destaques da cachoeira - vamos consertar isso mais tarde, na etapa de ajuste de brilho linear.
A imagem parece um preto e branco completo devido ao seu tamanho pequeno, mas na realidade não é: mesmo em áreas igualmente iluminadas, a pixelização é visível. Isso se deve ao fato de que os filtros de cores vizinhos, com diferentes sensibilidades espectrais, coletam diferentes informações sobre as cores. Isso é facilmente visto quando a imagem é ampliada. Aqui está a aparência da área da imagem logo abaixo do cartão WhiBal com ampliação de até 600%:
Figura 5: A pixelização CFA é visível no cartão uniformemente cinza (parte superior) e nas folhas coloridas.
2. Dados de equilíbrio de branco
Devido à distribuição espectral da energia da fonte de luz (neste caso, o céu é parcialmente coberto por nuvens, cuja luz penetra através da folhagem) e a sensibilidade espectral dos filtros localizados na matriz, diferentes pixels coloridos registram valores proporcionalmente maiores ou menores, mesmo sob a mesma iluminação. Isso é especialmente evidente nas partes neutras da imagem, onde parece que os mesmos valores médios devem aparecer em todos os planos de cores. Nesse caso, no cartão cinza neutro, os pixels vermelhos e azuis registraram valores de 48,8% e 75,4% do valor verde, respectivamente, para que pareçam mais escuros.
Portanto, a próxima etapa é aplicar o equilíbrio de branco aos dados CFA lineares multiplicando cada pixel vermelho por 2,0493 (1 / 48,8%) e cada pixel azul por 1,3256 (1 / 75,4%). Em termos da Adobe, obtemos uma imagem em preto e branco que é neutra para a câmera. Então é garantido, com exceção do ruído, que todos os pixels apresentarão os mesmos valores lineares nas partes neutras da imagem.
Figura: 6: Após o equilíbrio do branco, a pixelização do cartão cinza desaparece, mas ainda é visível nos objetos coloridos.
Veja como a pixelização no topo da imagem desapareceu - um cartão cinza neutro foi usado para calibração. Mas, é claro, a pixelização não desapareceu dos objetos coloridos: as informações sobre as cores são armazenadas na diferença entre as intensidades dos três canais.
3. Correção de brilho linear
A maioria das câmeras digitais modernas com lentes intercambiáveis fornecem dados brutos em 12-14 bits lineares. A profundidade de bits padrão dos arquivos (jpeg, TIFF, PNG) geralmente é fornecida como um multiplicador de 8, e 16 bits é a profundidade favorita da maioria dos editores atualmente. Não podemos simplesmente pegar dados de 14 bits com níveis de preto subtraídos e armazená-los em 16 bits - tudo cairá nos 25% inferiores da faixa linear e ficará muito escuro. Idealmente, queremos aparar os dados após o balanceamento de branco e subtração de preto para ajustar os dados aparados em um arquivo de 16 bits e dimensioná-lo de acordo (consulte a etapa 4). Uma maneira simples de converter os dados de maneira aproximada é simplesmente multiplicar os dados de 14 bits por 4, escalando-os para 16 bits. Isso é exatamente o que foi feito na etapa 1 após subtrair o preto (dcraw -d -4 -T faz isso automaticamente,e com o unocessed_raw você precisará fazer isso manualmente).
Falando em escala, também podemos ajustar nosso brilho. Esta etapa é subjetiva e provavelmente não vale a pena ser realizada se você estiver atrás de uma renderização "honesta" de uma imagem, como ela apareceu no sensor e foi gravada em um arquivo RAW. No entanto, ninguém consegue obter a exposição perfeita e câmeras diferentes geralmente medem o cinza médio em diferentes porcentagens dos dados brutos, por isso é útil poder ajustar o brilho. Portanto, muitos conversores se referem aos controles deslizantes relativos como "compensação de exposição" ou "compensação de exposição". A Adobe possui um rótulo DNG associado que normaliza o medidor de exposição para câmeras diferentes, BaselineExposure. Para o D610, são 0,35 etapas.
Nossa imagem é um pouco escura para o meu gosto, e o cartão WhiBal, que deve ser 50% reflexivo, tem apenas 17% em escala real. A correção linear de luma é a multiplicação de cada pixel nos dados por uma constante. Se considerarmos que nesta imagem não precisamos preservar as áreas mais brilhantes da imagem com um brilho superior a 100% da luz branca espalhada, então esta constante neste exemplo será 50/17, aproximadamente 1,5 passos de correção. Neste caso, decidi aplicar uma correção conservadora subjetiva de +1,1 passos de brilho linear, multiplicando todos os dados no arquivo por 2,14, e o seguinte foi obtido:
Fig. 7: imagem CFA após subtração dos níveis de preto, equilíbrio de branco, corte, correção de brilho linear em 1,1 etapas
Melhor. Mas, como você pode ver, o preço a ser pago pela correção linear de brilho é iluminar partes da cachoeira. É aqui que os controles deslizantes de recuperação de sombra e destaque não linear avançados encontrados na maioria dos conversores RAW vêm em socorro.
4. Certifique-se de que os dados de equilíbrio de branco sejam ajustados uniformemente
Se o canal verde foi inicialmente cortado nos dados brutos, pode ser necessário cortar os outros dois em escala total após aplicar os multiplicadores de equilíbrio de branco para corrigir a não linearidade resultante. A escala completa é mostrada nos histogramas abaixo como um valor normalizado de 1,0. Você pode ver que o canal verde dos dados brutos originais foi cortado (devido à confusão de valores), e os outros não.
Figura: 8: De cima para baixo: histogramas R, G, B depois de aplicar os multiplicadores de equilíbrio de branco aos dados brutos, antes de cortar. Certifique-se de cortar todos os três no nível do canal menor para que cores falsas não apareçam nas áreas claras. Os dados da imagem são plotados em 0-1, onde 1 é a escala completa.
O corte em escala total é necessário porque em áreas onde não há dados de todos os três canais, a cor resultante provavelmente estará incorreta. Na imagem final, isso pode se manifestar como, digamos, uma tonalidade rosada em áreas próximas ao brilho máximo. Isso é muito irritante, por exemplo, em fotos de montanhas cobertas de neve. Portanto, a poda resolve esse problema de forma intransigente.
Figura: 9: Esquerda: Imagem cortada corretamente após aplicar o equilíbrio de branco. Direita: a imagem não é cortada. A seta amarela mostra uma área próxima ao brilho máximo, onde informações incompletas dos canais de cores apresentam uma tonalidade rosada.
Em vez de recortar, pode-se fazer certas suposições sobre as cores ausentes e complementar os dados relativos. Em conversores RAW avançados, isso é feito por algoritmos ou controles deslizantes com nomes como "reconstrução de realce". Existem diversas formas de fazer isto. Por exemplo, se apenas um canal estiver faltando, como no caso do verde de 1,0 a 1,2 na Fig. 8, é mais fácil assumir que os realces estão na área de branco neutro e os dados da imagem bruta têm o equilíbrio de branco correto. Então, em qualquer quarteto onde a cor verde será cortada e os outros dois não, o valor do verde será igual ao valor médio dos outros dois canais. Para esta foto, esta estratégia seria capaz de reconstruir não mais do que 1/4 de uma etapa em áreas claras (log 2(1,2)). Em seguida, seria necessário compactar os realces e / ou normalizar novamente a nova escala completa para 1,0.
5. Desbayerização de dados CFA
Até agora, a imagem CFA estava localizada no mesmo plano preto e branco, o que fazia com que as áreas coloridas parecessem pixeladas, como pode ser visto na Fig. 6. É hora de depurar - separando os pixels vermelhos, verdes e azuis mostrados na fig. 2, em planos coloridos separados, aproximando os dados ausentes (na figura abaixo, eles são mostrados como quadrados brancos).
Figura: 10: Depuração de camadas - preencher os dados ausentes em cada plano de cor usando informações de todos os três planos.
Qualquer um de um grande número de algoritmos avançados de depuração pode ser usado nesta etapa. A maioria deles funciona muito bem, mas alguns são melhores do que outros, dependendo da situação. Alguns conversores RAW, como RawTherapee e dcraw, solicitam que o usuário selecione um algoritmo em uma lista. A maioria dos conversores não oferece essa opção e usa o mesmo algoritmo de debayering. Você sabe qual algoritmo de debayering seu conversor RAW favorito usa?
Para este teste, decidi trapacear e apenas compactar cada quarteto RGGB em um único pixel RGB, deixando os valores R e B de cada quarteto como estavam nos dados brutos e calculando a média de G sobre dois (isso é equivalente ao modo dcraw –h). Este é um algoritmo de debayering de vizinho mais próximo 2 × 2. Dá uma imagem com metade do tamanho (em dimensões lineares ou quatro vezes na área), que é mais conveniente de usar.
Figura: 11: Imagem RGB bruta após subtração de preto, equilíbrio de branco, recorte, correção de brilho linear e degradação do vizinho mais próximo 2x2 (equivalente a dcraw –h).
Na fig. 11, você pode ver que nossos dados brutos agora são RGB com três planos de cores totalmente preenchidos. As cores, que foram registradas pela câmera, foram mostradas pelo navegador e pelo monitor. Eles parecem sem graça, mas não muito diferentes do original. As sombras não são armazenadas no espaço RGB padrão, portanto, o software e o hardware nem sempre sabem o que fazer com elas. A próxima etapa é converter essas cores em um espaço de cores padrão colorimétrico comum.
6. Conversão e correção de cores
Esta é uma das etapas menos intuitivas, mas mais importantes, necessárias para obter uma imagem finalizada com cores agradáveis. Todos os fabricantes guardam zelosamente os segredos de seus filtros de cores no CFA de suas matrizes, mas com o equipamento certo, não é muito difícil derivar funções de sensibilidade espectral. Você pode ter uma ideia aproximada das funções de sua câmera, mesmo com um espectrômetro barato .
Armado com tudo isso, e fazendo muitas suposições sobre fontes de luz típicas, cenas e métodos de visualização, uma matriz linear de compromisso pode ser gerada que converte a cor de uma imagem CFA (como mostrado na Figura 11) em uma cor padrão, que é será capaz de reconhecer programas comuns, como editores ou navegadores, bem como dispositivos como monitores e impressoras.
Felizmente para nós, vários laboratórios excelentes estão empenhados em medir e calcular essas matrizes - e então colocam os cálculos em domínio público. Por exemplo, DXOmark.com produz matrizes para converter dados brutos de fotos após balanceamento de branco para sRGB para duas fontes para qualquer câmera em seu banco de dados. Por exemplo, aqui está o sensor para Nikon D610 efonte de luz padrão D50:
Fig 12: Matriz de cor do DXO lab para a fonte de luz D50: de dados balanceados e descamados de branco para sRGB.
Qual das matrizes de compromisso será a melhor depende da distribuição espectral da energia da fonte de luz no momento de tirar o quadro, então a matriz real é geralmente interpolada com base em algumas referências. No mundo Adobe de hoje, essas são as fontes de luz padrão A e D65, responsáveis por limitar a gama de iluminação típica na fotografia do dia-a-dia, de tungstênio à luz do dia e fotografia de interiores. Os dados convertidos são então adaptados a uma fonte de luz que corresponda ao espaço de cor final - para sRGB, por exemplo, D65. O resultado é uma espécie de matriz, como a mostrada na Fig. 12. Em seguida, você só precisa multiplicá-lo pelos valores RGB de cada pixel degradado após a etapa 5.
Na especificaçãoA Adobe recomenda um processo mais flexível para seu DNG Converter. Em vez de uma transição direta da câmera CFA para o espaço de cor colorimétrico, a Adobe primeiro converte os dados para o espaço de cor de Conexão de Perfil (XYZ D50), multiplicando os dados após o equilíbrio de branco e debayering por uma matriz interpolada direta e, em seguida, chega ao espaço de cor final como sRGB. Às vezes, a Adobe também aplica correção de cores não lineares adicionais usando perfis especiais em XYZ (na linguagem DNG, essas são correções HSV por meio de ProPhoto RGB, HueSatMap e LookTable).
As matrizes diretas da câmera que tirou a foto são registradas em cada arquivo DNG, elogia a Adobe. Eu baixei as matrizes para D610 a partir daí, e matrizes XYZD50 -> sRGBD65 a partir de Bruce Lindblum local e gotimagem final:
Fig. 13: Imagem convertida "razoavelmente". Dados brutos, níveis de preto subtraídos, equilíbrio de branco executado, corte, correção de brilho, redução da camada 2x2, correção de cor e conversão para sRGB.
Agora, as cores são o que os programas e dispositivos esperam encontrar no espaço de cores sRGB. Caso você esteja se perguntando, esta imagem é quase idêntica à do conversor Capture NX-D de perfil plano da Nikon. No entanto, ele não parece muito nítido devido ao contraste pobre de nossos monitores (consulte Mapeamento de tons).
7. Aplicação de gama
A última etapa depende do espaço de cores selecionado. A gama para o espaço sRGB é de cerca de 2,2 . Menciono isso apenas especificamente para mostrar que o processo de renderização se torna não linear neste ponto. A partir desse ponto, a imagem é reduzida à gama colorimétrica do espaço de cores e pode ser carregada em seu editor favorito ou exibida na tela. Em teoria, todas as etapas anteriores eram lineares, ou seja, facilmente reversíveis.
+ Tone display
Em 2016, a correção de tom quase sempre é necessária para escolher como comprimir a alta faixa dinâmica de uma câmera em uma pequena faixa do dispositivo de imagem. Por exemplo, dependendo da sua resistência ao ruído, a faixa dinâmica do meu D610 tem 12 etapas, enquanto meu monitor muito bom tem uma relação de contraste de 500: 1, ou cerca de 9 etapas. Isso significa que as três etapas inferiores da câmera não serão visíveis no monitor devido à luz de fundo.
A curva RGB redistribuirá subjetivamente os tons em toda a faixa, de modo que algumas sombras sejam mais visíveis às custas de algumas das áreas mais brilhantes (portanto, essa curva é chamada de "curva de tons"). No momento em que este artigo foi escrito, essa curva era geralmente aplicada pela Adobe no ACR / LR no momento da renderização, antes de mostrar a imagem pela primeira vez:
Figura: 14: Curva de tom aplicada pelo ACR / LR perto do final do processo de renderização na Versão 3 do Processo (2012-2016). O eixo horizontal não é linear.
Nesse caso, eu não usei. Eu apenas apliquei uma curva para aumentar o contraste e adicionei alguma nitidez no Photoshop CS5 à fig. 13 para obter a imagem final:
Fig. 15: Imagem sRGB final. Dados brutos iniciais, níveis de preto subtraídos, equilíbrio de branco, corte, brilho ajustado, degradação, cor ajustada, curva de tom aplicada
Obviamente, aplicar uma curva de contraste em um estágio posterior altera a cromaticidade e a saturação das cores, mas isso é exatamente o que acontece quando você aplica esses ajustes ao espaço gama RGB após renderizar a imagem. Historicamente, é assim que tudo acontece nas câmeras, e é assim que tudo acontece nos conversores RAW populares - este é o procedimento, e com o qual nos acostumamos com o passar dos anos. Uma alternativa para obter "precisão" na reprodução de cores será usar o perfil de cores do site da Torgera, e não mais tocar no tom.
Vamos resumir
Portanto, para conversão RAW básica com ajuste linear de brilho e cor, você precisa:
- Carregue dados lineares do arquivo RAW e subtraia os níveis de preto.
- Equilibre o branco.
- Brilho linear correto.
- Corte os dados da imagem.
- Debayerize.
- Aplique transformações e correções de cores.
- Aplique gama.
E isso é tudo - o véu de sigilo da conversão de dados brutos foi arrancado.
Scripts para Matlab para obtenção das imagens fornecidas neste artigo podem ser baixados do link . As 7 etapas básicas estão marcadas em amarelo:
s = raw2RGB(‘DSC_4022’ , ‘ROI’ , 1.1)
Após usar o script, salve o arquivo no formato TIFF, carregue-o no editor de cores e aplique o espaço de cores escolhido para ver as cores corretas.
