Arquitetura de Computadores · representação de dados

Laboratório JPEG × PNG

Veja, etapa por etapa, como uma imagem vira menos bytes. O JPEG descarta o que o olho quase não percebe; o PNG reorganiza os bytes para que a compressão sem perdas funcione melhor. Mude a qualidade e acompanhe os números.

50
Sem compressão (BMP)——
PNG do navegador—sem perdas
JPEG do navegador——
Nosso JPEG (estimativa)——
Original. Clique para escolher o bloco 8×8 analisado abaixo.
Depois do nosso JPEG.
Erro ampliado (×6). Tudo que não é preto foi perdido.
1

RGB → YCbCr: separar brilho de cor

O olho humano é muito mais sensível ao brilho (Y, luminância) do que à cor (Cb e Cr, crominância). Com a subamostragem 4:2:0, cada canal de cor fica com metade da largura e metade da altura: ¼ dos dados.

Y = 0,299·R + 0,587·G + 0,114·B    Cb = 128 − 0,1687·R − 0,3313·G + 0,5·B    Cr = 128 + 0,5·R − 0,4187·G − 0,0813·B
Y — luminância
Cb — diferença para o azul
Cr — diferença para o vermelho
2

Um bloco 8×8 do canal Y

A imagem é dividida em blocos de 8×8 pixels. Subtraímos 128 de cada valor para centralizar em zero. Bloco escolhido: .

Pixels (0–255)
Pixels − 128
3

DCT: de pixels para frequências

A transformada discreta do cosseno reescreve o bloco como a soma de 64 padrões, do liso (canto superior esquerdo, o DC) ao xadrez fino (canto inferior direito). Ela não perde nada: só muda a forma de representar. Repare que a energia se concentra no canto superior esquerdo.

F(u,v) = ¼ · C(u)·C(v) · Σx Σy f(x,y) · cos[(2x+1)uπ/16] · cos[(2y+1)vπ/16]
Coeficientes DCT (verde +, laranja −)
4

Quantização: aqui acontece a perda

Cada coeficiente é dividido pelo valor da tabela de quantização e arredondado. As altas frequências têm divisores maiores, então viram zero. A tabela é a da norma (ITU-T T.81, anexo K) escalada pela qualidade escolhida.

Tabela de quantização (qualidade )
Coeficientes quantizados = round(DCT ÷ Q)

5

Zigue-zague e RLE

Lendo em zigue-zague, os zeros se acumulam no fim. A codificação por comprimento de sequência (RLE) guarda pares (zeros antes, tamanho em bits) seguidos do valor, e um EOB (fim de bloco) substitui todos os zeros finais.

6

Codificação de entropia (Shannon) e reconstrução

Os símbolos do RLE são codificados com Huffman: símbolos frequentes recebem códigos curtos. Shannon mostrou que o mínimo médio é a entropia H = −Σ p·log₂p; usamos esse limite para estimar o tamanho. Na volta, o decodificador multiplica por Q e aplica a DCT inversa.

Bloco original (Y)
Bloco reconstruído