De volta à home-page do Dave Coffin

Decodificando fotos digitais cruas no Linux

Live free or die / DCRAW / New Hampshire
in English
en Esperanto
auf Deutsch
на русском

Bem-vindo! Se você está pesquisando sobre como conectar sua câmera digital e baixar imagens em um PC Linux, vá para a home-page do gPhoto. Meu software é para processar estas imagens depois de baixá-las.

Se você está baixando arquivos JPEG, você não precisa do meu software. A imagem já foi processada dentro da câmera. Quase todas as câmeras digitais fabricadas desde 1997 produzem imagens JPEG, então porque você deveria fazer de outra maneira?

Bem, a despeito da conveniência e ubiqüidade do JPEG, existem algumas desvantagens. JPEG é um formato com perda -- para acomodar uma imagem grande em um arquivo pequeno, um monte de informação é jogado fora. Por isso que câmeras semi-profissionais e profissionais oferecem uma alternativa: Arquivos de dados CCD crus, não-processados, para os quais o fabricante fornece softwares decodificadores especiais.

Claro, este software é para Windows e Macintosh somente, sem código-fonte disponível. É inútil para usuários de outros sistemas operacionais, programadores tentando desenvolver melhores mecanismos de interpolação, e historiadores ainda não nascidos, em uma era em que as únicas máquinas Windows estarão em museus.

Portanto esta é minha missão: escrever e manter um programa ANSI C que decodifica qualquer imagem crua de qualquer câmera digital em qualquer computador rodando qualquer sistema operacional.

Este programa é chamado dcraw (em inglês pronuncia-se "dee-see-raw"), e tem se tornado uma ferramenta padrão dentro e fora do mundo Open Source. É pequeno (em torno de 8000 linhas), portável (bibliotecas C padrão, somente), livre (tanto "grátis" quanto "livre") e, quando usado habilmente, produz resultados de melhor qualidade do que as ferramentas fornecidas pelo fabricante da câmera.

Aqui está o meu currículo. Eu faço consultoria free-lance relacionada ao dcraw, e também estou disponível para trabalho com software em tempo integral no Nordeste dos EUA.

Eu posso ser contatado enviando-se email para cybercom ponto net, usuário "dcoffin".

Novidades e Entrevistas

Ensaio para a Digital Outback Photo, 25 de abril de 2003
Artigo na News.com, 21 de abril de 2005
Entrevista na Digital Photography Review, 27 de abril de 2005
Entrevista com Thorsten Schnebeck, 10 de junho de 2006
Entrevista no Ladinamo, 16 de junho de 2006

Meu código

A menos que declarado no código-fonte, estes programas são livres para todos os usos, mas eu gostaria de receber crédito por eles. Doações são bem-vindas, também, se você está ganhando dinheiro com o meu código.

Nota a distribuidores Linux: Os únicos arquivos executáveis que devem ser instalados por um pacote dcraw são "dcraw", "clean_crw", e talvez "fuji_green", "fujiturn" e "fujiturn16". Meus scripts shell são perigosos e devem ser instalados somente em diretórios "doc", sem permissão de execução.

Para hackers somente:

Internacionalização

Para instalar o dcraw com suporte a outras línguas além do Inglês, baixe o tarball mais recente deste diretório e rode o script "install". As línguas atualmente suportadas são Esperanto, Russo, Francês, Italiano, Alemão, Português, Espanhol, Holandês, Polonês, Húngaro, Tcheco, Sueco, Catalão, Dinamarquês, e Chinês (tanto Tradicional como Simplificado).

Para compilar um DCRAW.EXE para DOS/Windows multilíngue e auto-contido, use um arquivo fonte deste diretório.

Para adicionar outra língua, mande-me traduções desta manpage e desta tabela de mensagens em codificação UTF-8. Traduza somente a partir dos meus textos originais em Inglês e Esperanto -- outras linguagens podem ter erros factuais invisíveis para mim.

Não traduza "Não posso fazer X" como "É impossível fazer X". O dcraw não é perfeito, então se ele não pode fazer uma tarefa, não quer dizer que a tarefa seja impossível. Computadores nunca devem usar o pronome "eu", portanto escreva "o dcraw não pode fazer X".

Na dúvida, traduza tudo. Eu reviso estes textos antes de liberá-los, e é mais fácil para mim corrigir sobre-tradução do que sub-tradução.

O dcraw decodifica fotos cruas, não arquivos crus. Nenhuma câmera digital gera arquivos crus, em uso normal, sempre há um cabeçalho com metadados úteis. (Para uso anormal, veja CHDK e DIAG RAW abaixo)

"Raw" é uma palavra em Inglês, e não um acrônimo ou formato de arquivo. "raw photo" deve ser traduzido com o mesmo adjetivo que você usaria para "óleo cru", ou "materiais crus".

Existe dúzias de formatos de imagens crus: CRW, CR2, MRW, NEF, RAF, etc. "Formato cru" não existe, é uma ilusão criada pela habilidade do dcraw de ler todos os formatos crus.

Outros decodificadores de fotos cruas

Dcraw tem tornado mais fácil que desenvolvedores suportem uma gama ampla de câmeras digitais em seus aplicativos. Eles podem chamar o dcraw de uma interface gráfica, colar trechos do dcraw.c no seu código ou simplesmente usar dcraw.c como a documentação que os fabricantes se recusam a fornecer:

Perguntas Freqüentemente Feitas

Eu não tenho um compilador de C. Você poderia me mandar um executável?
Não, mas Francisco Montilla fornece executáveis para Mac OS e para Windows em seu website. E Manuel Llorens fornece um grande cache de executáveis Windows aqui. Dcraw também foi portado para Amiga, MorphOS, BeOS, OS/2, e RISC OS.

Se você tem familiaridade com a linha de comando do DOS, mas não sabe C, você pode instalar este compilador de C livre e compilar dcraw.c facilmente.

Porque o dcraw diz "Sem memória suficiente" no Windows Vista?
Explicitamente para evitar vazamentos de memória, a Microsoft decidiu que qualquer programa compilado para a antiga API MS-DOS deve ficar confinado a 32MB de memória. Essa limitação pode ser removida com uma combinação de service packs e alterações do registro do Windows, ou você pode compilar o dcraw para a nova API Win32. O Thomas Nicely (da história do Pentium FDIV) tem uma página descrevendo o problema e vários consertos.

Como eu posso ler os dados EXIF (velocidade de disparo, abertura, etc)?
O ExifTool do Phil Harvey é um leitor (e editor!) de EXIF unificado e baseado em Perl, para todas as câmeras e formatos de arquivo. "dcraw -i -v" é muito mais rápido mas provê menos informação.

Como eu posso ler arquivo NEF de scanners Nikon?
Dcraw suporta somente câmeras. Tente este pequeno programa para scanners.

Como eu posso ler imagens Nikon Dust Off (arquivos NDF)?
Use este programa.

Você tem alguma especificação descrevendo arquivos de fotos cruas?
Sim, mas eles costumam omitir detalhes importantes, como por exemplo, como descompactar a imagem crua, ou descriptografar metadados privados. Veja a especificação TIFF, a especificação TIFF/EP, a especificação Adobe DNG, a especificação CIFF (CRW), e a especificação X3F.

Onde eu posso obter uma coleção de fotos cruas para testar meu software?
Tente no raw.fotosite.pl, www.rawsamples.ch, e Glass Lantern RAWpository. Uma "revisão completa" em Imaging Resource normalmente inclui algumas fotos cruas. Para o conjunto completo de teste do dcraw (todas as câmeras suportadas pelo dcraw), eu vendo um conjunto de 3 dvd's por $ 700 e atualizações via web por $300 por ano.

Eu estou projetando uma câmera digital. Como eu posso converter as imagens cruas dela em algo que o dcraw e o Adobe Photoshop possam abrir?
Baixe LibTIFF v3.8.2 e aplique este patch. Depois use este programa em C como modelo para converter suas fotos em arquivos Adobe DNG válidos.

Porque as imagens de saída do dcraw são mais largas do que os JPEG's da câmera?
Qualquer algoritmo que combine cada pixel com os seus vizinhos terá problemas com os pixels das bordas. Código C é barato, então o dcraw aplica um algoritmo diferente nos pixels das bordas. A lógica do hardware é cara, portanto as câmeras cortam fora os pixels das bordas, depois de processarem.

Eu fiz uma foto crua sem luz. Porque ela aparece com ruído, quando deveria ser preto sólido?
Não importa o quanto escura uma imagem é, a auto-exposição do dcraw a 'estica', de forma que um por cento dos pixels aparecem brancos. A opção "-W" evita esse comportamento.

Eu faço 'bracket' com mais dois e menos dois pontos, mas todas as cinco fotos aparecem quase as mesmas no dcraw. Porque?
Veja a questão anterior.

Porque a saída em 16bit é escura/ilegível?
Se você deseja fotos bonitas saindo direto do dcraw, permaneça com 8bit. Saída linear em 16bit é a melhor matéria-prima para editores profissionais de fotos, como Photoshop e o CinePaint, mas não é boa para a maioria dos visualizadores de imagens.

O que a opção "-f" (quatro cores RGB) faz?
Se você perceber padrões como este ou este nos seus arquivos de saída, tente primeiro "dcraw -a". Se eles persistirem, use "dcraw -f", para se livrar deles.

Você poderia, por favor, inserir uma opção para salvar arquivos em TIFF / FITS / PNG / BMP / JPEG?
Nas versões de 8.25 e acima, "dcraw -T" grava arquivos TIFF com metadados. Para gravar outros formatos:
dcraw -c crw_0001.crw | pnmtofits > crw_0001.fits
dcraw -c crw_0001.crw | pnmtopng > crw_0001.png
dcraw -c crw_0001.crw | ppmtobmp > crw_0001.bmp
dcraw -c crw_0001.crw | cjpeg > crw_0001.jpeg
Eu usei as ferramentas netpbm nestes exemplos. O ImageMagick também faz conversões de formatos na linha de comando. Ambos são livres.

Porque você não implementa o dcraw como uma biblioteca?
Eu decidi que o dcraw será um programa de linha de comando escrito em C, e que quaisquer camadas de abstração adicionais devem ser adicionadas em volta deste núcleo, e não dentro dele.

Código de biblioteca é feio, porque não pode usar variáveis globais. Bibliotecas são mais difíceis de modificar, compilar, instalar e testar do que programas independentes, e portanto são inapropriadas para formatos de arquivos que mudam todos os dias.

Há uma maneira mais simples de tornar o dcraw modular e seguro: Rode-o como um processo separado. Eric Raymond explica esta técnica aqui.

Porque existem cores falsas junto às bordas na imagem?
Por causa da interpolação. Este é um problema difícil, facilmente definido:
  1. Considere uma imagem RGB de três cores. Em cada pixel defina os valores de duas cores como zero.
  2. Reconstrua a imagem original de três cores da melhor maneira possível, a partir do único valor restante.
Dcraw atualmente permite uma escolha de três métodos: Bilinear, Número Variável de Gradientes (VNG) e Adaptativo direcionado a homogeneidade (AHD).

O chip de captura Foveon X3 requer um tipo extra de interpolação. Diferente de sensores CCD, ele captura três cores em cada pixel. Mas as cores não se separam bem, portanto os dados crus aparecem muito cinza. Muito processamento é necessário para acentuar a cor e suprimir o ruído.

Como eu faço minha câmera salvar fotos cruas?
Para Canon PowerShots que não gravam em CRW ou CR2, você necessita do hack CHDK.
Para algumas Nikon Coolpix, você deve habilitar um modo especial "DIAG RAW"
Para câmeras Casio, veja o website de Maurice Delaney, ou leia essa discussão no dpreview
Para a Minolta DiMAGE G400, G500, G530 ou G600, veja aqui (em russo) ou aqui (em inglês)
Para a Minolta DiMAGE Z2 e a Nikon Coolpix 2100/3100/3700, veja aqui.
Para câmeras SMaL, veja o fórum camerahacking.
Para câmeras Agfa e Samsung, veja aqui.

Para outras câmeras, veja o manual do usuário.

O dcraw funciona com a minha câmera?
Muito provavelmente sim. Se a sua câmera não está nesta lista tente assim mesmo. Se não funcionar, não fique quieto esperando a próxima versão. Pergunte-me se eu preciso de alguma foto crua, ou poste uma imagem crua em algum website e me mande a URL. Se você não tem um website, use o YouSendIt, RapidShare, Sendshack, ShareFile, sendspace, ou Megaupload.

Antes de escolher uma foto para mandar, leia a próxima pergunta:

Porque o dcraw dá uma saída esverdeada e com cores fracas?
Porque ele não tem a matriz de cores para o seu modelo de câmera, então dá a saída de cores cruas, em vez de sRGB. Para consertar isso, eu preciso de uma foto de um cartão de cores tipo Wolf Faust, Calibr8, CMP, GretagMacbeth. Siga este checklist: