terça-feira, 5 de junho de 2007

Uma obra de arte colectiva

Ver antes:

Georges Seurat, La Seine à la Grande-Jatte, 1888

Um rio, um barco, uma árvore... ou muitos, muitos pontos? Os pormenores não são importantes para interpretar o significado de uma imagem. Podemos diminuir a informação dos detalhes em qualquer fotografia e ninguém sentirá a sua falta, mesmo tendo o original ao lado.

Se eu quizesse diminuir os pormenores de uma fotografia provavelmente ia começar por comparar cada ponto com os vizinhos, codificando a diferença em vez do valor absoluto, esbatendo as grandes amplitudes com uma divisão não linear. A ideia não é disparatada, tirando o esbatimento este é um método utilizado nas imagens PNG e JPEG sem perda. Mas o método JPEG com perda foi estudado durante anos e certamente dá melhores resultados.

O método começa por "separar" os detalhes das manchas através da aplicação de uma transformada discreta de cosseno (DCT em inglês) a grupos de pontos. Como resultado, para cada grupo obtemos uma quantidade igual de valores onde o primeiro é proporcional à soma dos originais e os outros dependem da variação existente. Se os valores originais são todos iguais o resultado fica reduzida ao primeiro valor, os restantes são zero.



Em fotografias a variação entre pontos adjacentes é geralmente pequena. Quando aplicamos a DCT a um grupo de pontos o resultado é uma sequência com valores absolutos tendencial­mente decrescentes. Se anularmos os últimos valores da transformada a média dos valores originais não é alterada (manutenção da mancha) e as diferenças são esbatidas (diminuição do detalhe).

A transformada discreta de cosseno foi definida num estudo de N.Ahmed, T.Natarajan e K.R.Rao publicado em 1974. Desde então, e principalmente depois da publicação da especificação JPEG, muitas implementações foram publicadas em revistas, livros, patentes e hardware. Como referência a fórmula que segue funciona nos dois sentidos, isto é, pode ser utilizada para calcular a transformada e recuperar os valores originais:



Nas imagens JPEG a transformada é aplicada a quadrados com 8x8 pontos. Aplicada directa­mente o cálculo seria muito "pesado" e várias simplifi­cações são utilizadas: o processamento é feito primeiro sobre as linhas e depois sobre as colunas, os cossenos são pré-calculados e combinados com a raiz quadrada, as operações são agrupadas para aproveitar cálculos comuns… a biblioteca do Grupo Independente JPEG utiliza um algoritmo de C.Loeffler, A.Ligtenberg e G.S.Moschytz que reduz o cálculo de cada linha / coluna a 11 multiplicações e 29 adições.

A transformada não reduz a quantidade de informação: a quantidade de valores resultado é igual à original. A redução é implementada através da divisão de cada valor numa escala não linear — por exemplo, enquanto os primeiros valores são divididos por 6 os últimos são divididos por 40. Como os últimos valores são geralmente pequenos o resultado típico é meia dúzia de valores significativos, uma dúzia de 1's e uma catrefada de 0's, sequência óptima para o passo seguinte.

Não existe uma redução ideal. Quase todos os programas permitem ajustar a redução, é a chamada "qualidade JPEG". Normalmente a melhor redução está entre 80 e 70, qualidades menores que 60 estragam a fotografia sem ganhos na compressão, já pouco se pode reduzir:
windows bitmap  100%
quality 100 31%
quality 90 12%
quality 80 8%
quality 70 6%
quality 60 5%


qualidade 100, 55K bytes


qualidade 80, 15K bytes


qualidade 40, 7K bytes

A definição e as implementações da transformada directa de cosseno são resultado do contributo de muitos técnicos, com destaque para as publicações do Institute of Electrical and Electronics Engineers (IEEE). É uma obra de arte colectiva.

A diminuição de detalhes não reduz a imagem mas coloca a informação num sequência óptima para o passo seguinte.

A seguir: apertar os bits

Etiquetas:

0 Comentários:

Enviar um comentário

Subscrever Enviar feedback [Atom]

<< Página inicial