sábado, 5 de maio de 2007

Compressão JPEG

O comité JPEG foi criado em 1986 por dois institutos de standardização, ISO e ITU-T, como um agregado de vários grupos que trabalhavam na apresentação de gráficos com a qualidade de fotografia. O espaço necessário para o armazenamento de imagens e a velocidade de transmissão eram problemas ainda maiores que hoje, e naturalmente o comité JPEG concentrou-se na compressão de dados. Seis anos depois publicou o seu trabalho mais conhecido, o standard ISO 10918-1 / recomendação ITU-T T.81.

Com uma diferença de dois anos o grupo de trabalho MPEG produziu o MPEG-1, standard em que se baseiam o Video CD e MP3. JPEG e MPEG partilham mais que as três letras finais: eles definiram a ideia base que permite a difusão de conteúdos digitais com os equipamentos actuais -- compressão com perda de dados (lossy compression).

Estas são as taxas de compressão conseguidas por formatos bastante utilizados quando comprimi algumas fotografias; sem compressão com perda as coisas seriam mais lentas (ou mais pequenas ou mais feias) na internet:
zip (toda a cor)   ############################# 72%
png toda a cor  ######################### 63%
gif (256 cores)  ######### 23%
png 256 cores    ######## 21%
jpeg qualidade 80  ### 8%

Boa, a partir de agora só vou utilizar JPEG

A compressão com perda não é adequada para todas as imagens. Desenhos com linhas bem definidas ficam com distorções facilmente detectáveis quando comprimidos pelo método JPEG; PNG indexedado (256 cores) é melhor para estes casos. Além disso JPEG não permite transparência ou animação, e é um formato final -- nunca guardes as etapas do teu trabalho como JPEG. Mas se queres colocar fotografias na rede ou enviá-las por correio electrónico, JPEG é o formato indicado.

Como funciona: descrição geral

A especificação JPEG define duas formas para comprimir dados sem afectar a percepção que nós, humanos, temos acerca da imagem: diminuir informação sobre as cores, diminuir informação sobre os detalhes.

Penso que o segundo método é claro: a "visão geral" é suficiente para apanhar o significado de uma imagem, geralmente não reparamos na maior parte dos detalhes; com o método JPEG todos os detalhes são representados mas são codificados com menos dados. Dizer isto é fácil mas fazê-lo é mais difícil e ainda mais difícil é fazê-lo rapidamente; o algoritmo tem que detectar os detalhes genericamente, para qualquer imagem. A especificação JPEG fá-lo com um método elegante e permite que o utilizador controle a perda de detalhe, é isso que define a "qualidade jpeg".

A "diminuição de cores" pode ser menos evidente. A especificação JPEG não a define em pormenor, apenas permite diferentes densidades para cada componente da imagem. Os humanos necessitam três componentes para ver imagens coloridas -- como RGB, CMY ou Lab -- e o método JPEG permite codificar imagens em qualquer espaço com pesos específicos para cada componente. Antes da aprovação da JPEG já Eric Hamilton publicava a especificação JFIF, que definiu um formato para as imagens JPEG utilizando o espaço YCbCr. O tipo image/jpeg designa na realidade os ficheiros JFIF; imagens JPEG são sequências de bits que podem ser incluidas noutros formatos, por exemplo como imagens-chave nos filmes MPEG.

Depois da "diminuição de detalhes", os dados ficam numa forma muito adequada para diminuir a entropia, um método bastante utilizado para comprimir dados sem perder informação (losslessly compression) -- é o que se passa com o formato mais utilizado dos ficheiros zip. A especificação JPEG define em pormenor um passo final para "apertar os bits".

JPEG é Open Source

Uma das decisões do comité JPEG foi manter parte da especificação livre de patentes conhecidas. Para diminuir detalhes foi utilizada a transformada discreta de cosseno. O codificador de entropia guarda cada valor significativo (não zero) através do seu tamanho mínimo em bits, com codificação huffman para sequências de zeros e magnitude dos valores.

Enquanto a especificação JPEG estava a ser aprovada e a JFIF estava a ser escrita, o Grupo Independente JPEG começou a escrever uma biblioteca portável em linguagem C para compressão e descompressão. Esta biblioteca permitiu uma rápida adopção do novo standard e é actualmente utilizada como suporte JPEG por muitos programas.

A seguir:

Etiquetas:

0 Comentários:

Enviar um comentário

Subscrever Enviar feedback [Atom]

<< Página inicial