Compressão de Imagens
Guilherme Defreitas Juraszek
Por que precisamos da compressão de
imagens?
1920 x 1080 x 24
Altura
Largura
= 6MB
Cores
(RGB, 8 bits cada)
= 1 frame!
Por que precisamos da compressão de
imagens?
6MB x
Quadro
30 x
fps
60
1 min
= vídeo de
1 minuto
= +10GB
Por que precisamos da compressão de
imagens?
Hubble transmitia 120GB de dados
por SEMANA.
Fonte: http://ssd.jpl.nasa.gov/horizons.cgi#results
Curiosity se comunica com a terra a 32kbps,
ou 2mbps através de satélites intermediários
(janela de comunicação de 8 minutos por dia)
Fonte: https://www.aiaa.org/SecondaryTwoColumn.aspx?id=13350
Por que precisamos da compressão de
imagens?
*Requisito: 2Gbps (GIGA)
Como podemos comprimir?
• A maioria das imagens não apresentam pixels
com cores completamente diferentes entre si.
© 1992–2008 R. C. Gonzalez & R. E. Woods
Compressão de Imagens
Compressão de Imagens
JPEG
Mapping
8x8
DCT
Codificação de
Huffman
JPEG – Blocos 8x8
• Uma imagem RGB pode ser decomposta em 3
matrizes, uma R, uma G e B.
JPEG – Blocos 8x8
• JPEG transforma o RGB para o espaço de cores
YCbCr
JPEG – Blocos 8x8
• Subdividir a imagem em blocos de 8x8
DCT – Discrete Cosine Transform
• Com a imagem dividida em pedaços de 8x8 (64
pixels)
– A ideia é transformar esse pedaço para um domínio
onde o primeiro elemento possibilite recriar a imagem
com o menor erro possível (root mean square error),
os demais 63 elementos são descartados.
– Kahunen-Loève Transform
• É dependente da imagem
• Lento para calcular
• Necessita da imagem inteira para gerar os dados para o
cálculo, não pode ser calculado de forma “online” ou “on the
fly”.
DCT – Discrete Cosine Transform
n-1
n-1
x=0
y=0
n-1
n-1
x=0
y=0
T(u,v) = Σ Σ f(x,y) . R(x,y,u,v)
nxn
F(x,y) = Σ Σ T(x,y) . S(x,y,u,v)
nxn
Usando Kahunen-Loève R e S tem valores específicos de acordo com a imagem, usando
DCT os valores são fixos para todas as imagens.
DCT – Discrete Cosine Transform
R(x,y,u,v) = S(x,y,u,v)
= α(x) α(v) cos
(2x + 1)uπ
2n
1/n
se u = 0
2/n
se u ≠ 0
+
(2y + 1)vπ
2n
α(x) =
n = tamanho do bloco
n=4
8x8
DCT vs DFT
JPEG
Mapping
8x8
DCT
Codificação de
Huffman
Quantização
Quantização
Quantização
Quantização
JPEG
Mapping
8x8
DCT
Codificação de
Huffman
Codificação/Compressão de Huffman
Codificação/Compressão de Huffman
Codificação/Compressão de Huffman
Exercício
• Executar manualmente a codificação de
Huffman
1
1
0
128:0.47
0.53
1
0
87:0.25
0.28
1
255:0.03
0
186:0.25
Codificação/Compressão de Huffman
Como saber se vou ter uma boa compactação dos dados usando Huffman?
R: Entropia – Ela diz qual é a média do tamanho da representação dos símbolos
após a codificação.
P(s) = Probabilidade do símbolo S
Entropia = H =
- Σ p(s) log2 p(s)
Símbolos
Exercícios
• Implementar o algoritmo JPEG
–
–
–
–
–
Implementar em tons de cinza
Usar a implementação DCT do adessowiki
Efetuar a quantização usando a tabela do slide 20
Representar usando a forma do slide figura d
Não precisa implementar Huffman
1. Imagem Original -> DCT -> Quantização
2. Quantização inversa -> DCT inversa -> Exibe
imagem
Download

Compressão de Imagens