Compressão de imagem digital

A compressão de imagem digital é um campo que estuda as técnicas utilizadas na redução do número total de bits necessário para a representação de uma imagem. Tal pode ser alcançado através do processo de eliminação dos vários tipos de redundâncias que existem na imagem.

Tipos de redundância

No geral, existem três tipos básicos de redundâncias em imagens digitais, sendo estas as seguintes: redundância de codificação, redundância inter-pixel e redundância psico-visual.

Redundância de codificação. Normalmente, a imagem não comprimida é codificada com cada pixel por uma palavra de código de comprimento fixo. Por exemplo, imagem com 256 tons de cinzento é representada por uma gama de 8-bits inteiros. Ao usar alguns esquemas de código de comprimento variável tais como a codificação de Huffman e aritmética, a compressão poderá ser realizada, por exemplo, ao atribuir um menor número de bits para níveis de cinzento mais frequentes e maior número de bits para níveis de cinzento menos frequentes, podendo assim a imagem ser representada por um menor número possível de bits. Desta feita, é possível reduzir a redundância de codificação.

Redundância Inter-pixel. Redundância relacionada com as dependências estatísticas entre pixels, especialmente entre pixels vizinhos. A informação considerada desnecessária é replicada pelos pixels que se encontram correlacionados.

Redundância Psico-visual. Esta redundância está relacionada com os diferentes níveis de sensibilidade do olho humano a todos os sinais de imagem. Portanto, a eliminação de alguma da informação menos sensível de uma imagem baseada no nosso processamento visual pode ser uma alternativa.

JPEG: um algoritmo de compressão de imagem

JPEG é o método padronizado de compressão de imagem desenvolvido pela “Joint Photographic Experts Group”. É um algoritmo de compressão com perdas que foi concebido de maneira a reduzir, o máximo possível, o tamanho do ficheiro de imagens naturais com cores reais sem afectar a qualidade da imagem, tal como verificado nas experiências humanas levadas a cabo pela JPEG tanto em imagens com total espectro de cores assim como, em tons de cinzento.

Não trata imagens bi-nível (preto e branco), pelo menos de forma adequada. Também não suporta imagens mapeadas coloridas, sendo primeiro necessário pré-expandi-las numa representação não mapeada com total espectro de cores.

JPEG funciona melhor em imagens de tom contínuo. Imagens com demasiadas mudanças súbitas nos valores da cor não irão ser bem comprimidas.

Existem muitos parâmetros no processo de compressão JPEG. Ao ajustar os parâmetros, a relação entre o tamanho da imagem comprimida e a qualidade da imagem reconstruída poderá ser ajustada. As etapas para a codificação JPEG são:

1. Conversão do espaço de cor. Os melhores resultados de compressão são obtidos se os componentes da cor forem independentes (não correlacionados), tal como em YCbCr, onde a maior parte da informação se concentra na luminosidade e não tanto na crominância. Componentes de cor RGB podem ser convertidos através de uma transformação linear para YCbCr.

2. Downsampling da crominância. Usando o espaço de cor YCbCr, poderemos também ganhar espaço ao comprimir a resolução dos componentes Cb e Cr. São componentes de crominância e podemos reduzi-los de forma a comprimir a imagem. Devido à importância da luminosidade para os olhos, não necessitamos que a crominância seja tão frequente, portanto poderemos fazer o downsampling desta. Assim, podemos remover alguns dos elementos Cb e Cr. Como resultado, por exemplo, transformando RGB, formato 4:4:4, em YCbCr 4:2:2, seria possível obter um rácio de compressão de dados de 1,5. No entanto, este passo é considerado opcional.

3. Transformação discreta do coseno (DCT). Nesta etapa, cada componente (Y, Cb, Cr), é depois convertido para uma representação do domínio de frequência, a cada 88 blocos. A equação DCT é complicada, possuindo dois coeficientes de coseno distintos. Para mais detalhes, o padrão JPEG deve ser consultado.

4. Quantização. Para o olho humano, a luminosidade, é mais importante que a crominância. Observar pequenas diferenças no brilho dentro de uma vasta área é mais facilmente distinguível para os olhos do que a intensidade exacta de uma variação do brilho de alta frequência. Utilizando esta propriedade, podemos reduzir de forma substancial a informação em componentes de alta frequência. A codificação JPEG consegue fazê-lo através da divisão de todos os componentes no domínio da frequência por uma constante para certo componente, arredondando-o ao número inteiro mais próximo. Como resultado, muitos dos componentes de alta frequência são arredondados para zero, e a maioria do resto dos componentes tornam-se pequenos números positivos ou negativos, ficando com menos bits e consequentemente com maior espaço de armazenamento. O principal método com perdas em todo o processo é realizado nesta etapa.

5. Codificação de entropia. A codificação de entropia é um tipo de compressão de dados sem perdas. Aqui os componentes das imagens são ordenados num formato zigzag, e depois, através do uso do algoritmo de codificação de tiragem (RLE), as frequências semelhantes são unidas comprimindo a sequência.

6. Algoritmo de Huffman. Completadas as etapas anteriores, os dados resultantes serão sequência dos coeficientes DCT. Neste último passo, estes coeficientes são comprimidos usado a codificação Huffman ou um algoritmo de codificação aritmética. Huffman, considerado como o segundo método de compressão sem perdas nesta esquema seria utilizado na maioria dos casos. Geralmente, o algoritmo comprime imagens em etapas diferentes.

Uma breve ilustração gráfica do esquema de compressão JPEG é apresentado na Figura 3. Muitas outras abordagens de compressão de imagem e vídeo são semelhantes à JPEG. Além disso, muitas da variantes de JPEG utilizam os conceitos básicos do esquema JPEG que normalmente são criados para algumas aplicações específicas.

Técnicas baseadas em Wavelet e FFT

Existem diferentes maneiras de reduzir o tamanho dos dados com a ajuda da técnica baseada na transformação de wavelet . Neste e noutros métodos baseados na transformação de frequência, um dado vector é transformado num outro vector V2, mais pequeno quando comparado com o seu predecessor mas mantendo os mesmos índices de qualidade.