Guilherme Defreitas Juraszek Compressão de Imagens Guilherme Defreitas Juraszek
Por que precisamos da compressão de imagens? 1920 x 1080 x 24 = 6MB Altura Largura Cores (RGB, 8 bits cada) = 1 frame!
Por que precisamos da compressão de imagens? 6MB x 30 x 60 = +10GB Quadro fps 1 min = vídeo de 1 minuto
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. Representar a imagem B (cada linha tem um nível de cinza distinto) - 8 bits por pixel e representar todos os pixels (Ex: 128,128,128,128,128…) 8 bits por pixel e representar o tamanho de cada linha (Ex: 230,0,1000) Número de vezes + valor (Ex: 1000,230) © 1992–2008 R. C. Gonzalez & R. E. Woods
Compressão de Imagens Padrões estabelecidos Você deve ser capaz de tirar uma foto em uma câmera difital e abrir a foto no seu computador Implementados em hardware
Compressão de Imagens Mapper: Transformam a imagem em um formato mais amigável para compressão Domínio de Frequência - Transformada de Fourier Domínio espacial – Olhar os pixels vizinhos Quantização Faz a redução Normalmente introduz erro Se for “lossy” impede a reconstrução exata da imagem Ex: ceil(valor/2)*2 Symbol Coder Organizar a informação para ser transmitida de forma eficiente Explora a redundância da informação Ex: codificação de huffman
Codificação de Huffman JPEG Mapping 8x8 DCT Codificação de Huffman DCT – Transformada Discreta de Cosseno (Discrete Cosine Transform)
JPEG – Blocos 8x8 Uma imagem RGB pode ser decomposta em 3 matrizes, uma R, uma G e B. Uma possível solução seria aplicar a condificação JPEG em cada um dos canais
JPEG – Blocos 8x8 JPEG transforma o RGB para o espaço de cores YCbCr Uma possível solução seria aplicar a condificação JPEG em cada um dos canais
JPEG – Blocos 8x8 Subdividir a imagem em blocos de 8x8 Uma possível solução seria aplicar a condificação JPEG em cada um dos canais
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”. Uma possível solução seria aplicar a condificação JPEG em cada um dos canais
DCT – Discrete Cosine Transform T(u,v) = Σ Σ f(x,y) . R(x,y,u,v) n x n x=0 y=0 n-1 F(x,y) = Σ Σ T(x,y) . S(x,y,u,v) n x n x=0 y=0 n-1 Uma possível solução seria aplicar a condificação JPEG em cada um dos canais 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 (2y + 1)vπ Uma possível solução seria aplicar a condificação JPEG em cada um dos canais 1/n se u = 0 2/n se u ≠ 0 α(x) = n = tamanho do bloco
n = 4
8x8
DCT vs DFT
Codificação de Huffman JPEG Mapping 8x8 DCT Codificação de Huffman DCT – Transformada Discreta de Cosseno (Discrete Cosine Transform)
Quantização
Quantização
Quantização
Quantização
Codificação de Huffman JPEG Mapping 8x8 DCT Codificação de Huffman DCT – Transformada Discreta de Cosseno (Discrete Cosine Transform)
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 128:0.47 0.53 1 87:0.25 0.28 1 255:0.03 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 - Σ p(s) log2 p(s) Entropia = H = 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 Imagem Original -> DCT -> Quantização Quantização inversa -> DCT inversa -> Exibe imagem