Processamento de Imagens • Processamento de Imagens • • • • • • Matemática por trás de Processamento de Imagens Operações Aritméticas com imagens Conceito de Filtro Realçar e Borrar Ampliar e Reduzir Combinação de Imagens • • • • Mistura Transparência Adição e Subtração Morphing • Outros Assuntos • Dithering • Animações com Sprites Matemática por trás de Processamento de Imagens • • • • • • Teoria de Sinais Freqüência de uma imagem Transformada de Fourier 2D Shannon / Nyquist Convolução Impulso Operações Aritméticas com Imagens • Subtração de duas imagens: – Útil para diferenças entre imagens Ex: sequências em uma animação • Adição de duas imagens IMAGEM 1 Operação IMAGEM 2 • Multiplicação por um escalar IMAGEM FINAL FILTRO IMAGEM ORIGINAL FILTRO IMAGEM FINAL • Filtros de Amplitude Atuam diretamente no espaço de cor das imagens • Filtros Topológicos Atuam no domínio da imagem Filtros de Amplitude x Topológico Gamma Correction PUNCH Convolução Discreta 2D Filtro representado por uma Matriz 3x3: 1/9 Imagem (5x5): 6 4 5 6 8 9 0 4 8 5 1 1 1 3 2 3 4 2 1 1 1 9 2 3 6 1 1 1 1 7 8 9 0 4 Algoritmo: Para cada pixel da imagem •Posicionar centro do filtro sobre o pixel •Calcular média ponderada dos pixels vizinhos segundo os valores do filtro •pixel correspondente na imagem final ganhará essa média Exemplo no pixel (2,4): (2+3+4+2+3+6+8+9+0) / 9 ≈ 4 6 4 5 6 8 Considerações: 9 0 4 8 5 • Complexidade? 3 2 3 4 2 • Valores Negativos? 9 2 3 6 1 7 8 9 0 4 • O que fazer na borda? Considerações quanto a Convolução Discreta 2D • Complexidade da operação entre uma imagem mxn e um filtro pxq? m•n•p•q Em alguns casos é possível melhorar através de duas passadas 1D • Alguns filtros podem conter valores negativos, levando a resultados com valores negativos (ou mesmo valores fora do espaço de cores)! Duas soluções simples: arrendondar para o valor existente mais próximo (negativos→0) Transformação dos valores (offset + redistribuição de valores) Considerações quanto a Convolução Discreta 2D Código da convolução? • Problemas na borda: Como estender o domínio? Extensão nula Extensão periódica Extensão por reflexão • Quantidade par de coeficientes por linha ou coluna! Onde fica o centro do filtro? ? ? ? ? Filtro BOX 1/9 1 1 1 1 1 1 1 1 1 Como será a imagem final após a filtragem pelo filtro BOX? • Cada pixel será a média dos vizinhos • Um pixel branco no meio de pixels azuis vai ficar azulado • Portanto este filtro vai borrar a imagem • É chamado de filtro passa baixa (porque deixa passar apenas baixas freqüências, as altas são filtradas) Resultado de um Filtro BOX BOX • O Filtro BOX é anisotrópico Filtro Gaussiano 1 16 1 64 n 2n Máscara de coeficientes 1 2 11 2 4 121 3 8 1331 4 16 14641 5 32 1 5 10 10 5 1 6 64 1 6 15 20 15 6 1 7 128 1 7 21 35 35 21 7 1 8 256 1 8 28 56 70 56 28 8 1 1 3 3 1 3 9 9 3 3 9 9 3 1 3 3 1 1 256 1 2 1 2 4 2 1 2 1 1 4 6 4 1 4 16 24 16 4 6 24 36 24 6 4 16 24 16 4 1 4 1 6 4 Triângulo de pascal para geração discreta da Gaussiana Resultado do Filtro Gaussiano Gauss • O Filtro Gaussiano é isotrópico Filtro Laplaciano 0 1 0 1 1 1 1 -4 1 1 -8 1 0 1 0 1 1 1 truncation • Filtro passa alta. • Somar à imagem original para realçar os detalhes. offset Ampliação e Redução 8x5 Redução 10 x 8 Ampliação Redução: • Pixel resize (filtragem) • Interpolação linear bilinear resample Ampliação: • Pixel resize •Interpolação não linear bicubic resample 14 x 10 Combinação de Imagens • • • • • • Pixels alternados Imagens com as cores misturadas (blend) Álgebra (adição e subtração) Canal Alpha (composição) Morphing Profundidade * Pixels Alternados A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B A B A B A B B A B A B A A B A B A B B A B A B A A B A B A B B A B A B A Blend de imagens Imagem A Imagem B Imagem com 40% de A e 60% de B Álgebra: 0.4·A + 0.6·B Álgebra de imagens IMAGEM 1 Operação IMAGEM 2 IMAGEM FINAL Canal Alpha (composição) Canal Alpha Canal Alpha (composição) Canal Alpha com 8 bits. Exemplo: imagem1 com alpha, compondo com a imagem2 O pixel da imagem final (pf) será a composição do pixel da imagem1(p1) com o da imagem2 (p2), na proporção do alpha [0,1]. Para cada pixel: pf = α·p1 + (1- α)·p2 OBS: imagem com 32 bits (8 bits para o canal Alpha) Morphing Dithering / Half Toning Animações com Sprites Canal Alpha Seqüências coladas no mesmo fundo