Deprecated: The each() function is deprecated. This message will be suppressed on further calls in /home/zhenxiangba/zhenxiangba.com/public_html/phproxy-improved-master/index.php on line 456
Decodificando fotos digitais cruas no Linux
[go: Go Back, main page]

De volta à home-page do Dave Coffin

Decodificando fotos digitais cruas no Linux

in English
en Esperanto
на русском

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 7000 linhas), portável (bibliotecas C padrão, somente), 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, e Chinês (tanto Tradicional como Simplificado).

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".

É correto dizer que o dcraw decodifica "fotos cruas". Algumas destas fotos cruas são arquivos crus (imagens cruas sem nenhum outro dado de qualquer tipo), mas a maioria contêm estruturas de dados cheias de outras informações& sobre a imagem crua (chamadas "metadados").

"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 Benjamin Lebsanft se voluntariou para manter executáveis Windows otimizados para CPU's específicas.

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?
Esta é uma limitação arbitrária do Windows Vista que será consertada no Service Pack 1. O Thomas Nicely (da história do Pentium FDIV) tem uma página descrevendo a história. Atualmente o que pode ser feito para contornar o problema é compilar dcraw.exe com um compilador Microsoft, em vez de um compilador GNU.

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?
Este website é um bom lugar para trocar amostras de 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 us$ 700 e atualizações via web por us$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 perto 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 "-b" ajusta este comportamento, ao passo em que a opção "-4" (saída em 16bit) a evita completamente.

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 / 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 a Canon PowerShot A610, A620 e outras, veja aqui.

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 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, poste uma imagem crua em algum website e me mande a URL. Se você não tem um website, use o Dropload ou o YouSendIt.

Idealmente, a sua imagem de amostra deverá mostrar um cartão branco padrão, ou uma tabela de cores em sol direto, com outras cores no fundo.