Codecs Imagem - JPEG

Este modo de compressão para imagens foi desenvolvido em conjunto pelo Joint Photografic Experts Group e pela ITU-T. A arquitectura de um codificador JPEG bem como o seu funcionamento estão representados em baixo.

 

Pré-Processamento

Uma vez que se pretende converter a imagem para um domínio no qual se possa explorar ao máximo a redundância e irrelevância aquando da codificação, o ideal seria processar toda a imagem de uma vez.

No entanto, para blocos sucessivamente maiores, o custo computacional aumenta exponencialmente, ao mesmo tempo que o benefício em termos de redundância/irrelevância aumenta cada vez menos.

Por esta razão, o primeiro passo é pré-processar a imagem, dividindo-a em blocos de 8x8 pixéis, tendo em conta que blocos desta dimensão representam um bom compromisso entre o custo computacional e a exploração da redundância espacial.

DCT

A DCT – Discrete Cosine Transform - é a base do processo de compressão, uma vez que concentra a maior parte da energia do sinal nas baixas frequências espaciais, isto é, aplicando a DCT a um dado bloco de 8x8 de uma imagem típica, obtém-se coeficientes nulos ou próximos de zero para a maioria das frequências, que desta forma não precisam de codificação.

De um modo geral, a DCT pode ser vista como um analisador de espectros, em que cada amostra de 8x8 é efectivamente um sinal discreto com 64 valores, em função das dimensões espaciais x e y. A DCT processa este sinal, decompondo-o em 64 coeficientes, no domínio da frequência.

Uma vez que os sinais utilizados na DCT são sinusoidais, não é possível calcular os coeficientes com precisão total, o que leva a ligeiras diferenças nas imagens codificadas com implementações diferentes da transformada, e ligeiras diferenças entre a imagem codificada e a descodificada através da IDCT – Inverse Discrete Cosine Transform.

De modo a possibilitar evoluções nesta área, a norma JPEG não especifica uma implementação específica da DCT ou da IDCT, especificando apenas um teste de precisão para limitar as diferenças provocadas por esta flexibilidade de implementação.

Quantificação

Após a aplicação da transformada, cada um dos coeficientes obtidos é quantificado recorrendo a uma matriz de quantificação – Quantization Table - com valores inteiros entre 0 e 255 (quantization step). O objectivo deste processo é representar os coeficientes DCT com o valor mínimo necessário para obter a qualidade da imagem pretendida, isto é, descartar toda a informação não significativa para o sistema visual humano, explorando a irrelevância. Em codificação de imagem, as perdas advêm principalmente da quantificação (processo lossy).

Os coeficientes obtidos da quantificação são então processados de modo a facilitar a codificação entrópica. O coeficiente DC, que representa o valor médio dos 64 coeficientes de cada bloco, é tratado separadamente, devido à forte correlação entre os coeficientes DC de blocos adjacentes. Os restantes coeficientes (AC) são ordenados numa sequência em zig-zag, colocando os coeficientes das baixas frequências (que têm mais probabilidade de ser não nulos), antes dos das altas frequências.

Codificação Entrópica

O codificador entrópico codifica os coeficientes DCT de forma mais compacta, com base nas suas propriedades estatísticas, em duas fases:

1) Conversão da cadeia em zig-zag para uma sequência intermédia de símbolos recorrendo a tabelas de codificação,

2) Conversão dos símbolos para uma sequência de bits.

Este processo permite uma compressão adicional, sem perdas.

A norma JPEG propõe dois métodos de implementação: Codificação de Huffman ou Codificação Aritmética.

Modos de operação

Devido à necessidade de uma norma adaptável a um vasto conjunto de aplicações com diferentes requisitos, o JPEG apresenta 4 modos de operação: Sequencial, Progressivo, Hierárquico e sem perdas.

Para mais informação sobre estes modos clique aqui.