Captura, Processamento, Interpretação, Criação, Reprodução, … Imagem Digital Captura, Processamento, Interpretação, Criação, Reprodução, …
Formação de uma imagem numa câmera digital Captura da radiância de uma cena num plano Formação de uma imagem numa câmera digital
Câmera obscura e Câmera “pin-hole” Plymouth, UK O fato dos quadros renascentistas terem elemenots da geoemetria projetiva não quer dizer que eles conheciam técnicas precisas de desenho geométrico. Muitos trabalhos foram feitos por mera intuição ou com auxilio de câmeras escuras onde o pintor via sobre o canvas uma imagem da cena que ele desejava pintar como ilustra a figura. Podemos encontrar referências a câmeras escuras nos trabalhos de Leonardo da Vinci de 1545. A câmera fotográfica, como conhecemos hoje, foi inventada pelo Mandé Daguerre (1789-1851) e seus principios podem ser ilustrados com artefatos bem simples como a câmera tipo “pinhole”.
Câmera Obscura -- efeito natural Bellinzona no canton Ticino Switzerland.
Primeiras câmaras fotográficas Luis-Jacques-Mandé Daguerre (1787-1851) 1839 O fato dos quadros renascentistas terem elemenots da geoemetria projetiva não quer dizer que eles conheciam técnicas precisas de desenho geométrico. Muitos trabalhos foram feitos por mera intuição ou com auxilio de câmeras escuras onde o pintor via sobre o canvas uma imagem da cena que ele desejava pintar como ilustra a figura. Podemos encontrar referências a câmeras escuras nos trabalhos de Leonardo da Vinci de 1545. A câmera fotográfica, como conhecemos hoje, foi inventada pelo Mandé Daguerre (1789-1851) e seus principios podem ser ilustrados com artefatos bem simples como a câmera tipo “pinhole”.
Câmeras digitais
Captura da cor
Sensores
Emissão da radiância num plano Monitores
Primeira imagem colorida (início do sec. XX) James Clerk Maxwell (1831-1879) Scottish physicist.
RBG Images
Multi-fontes pontuais OLED Nexus_one_screen_microscope.jpg (wiki)
Impressão
Imagem: Modelo Matemático: Função 0% 20% 40% 60% 80% 100% Níveis de cinza Posição ao longo da linha x u v L L(u,v) Função
Imagem colorida u v G R B
Imagem coloridas como 3 canais de cor B B(u,v) R(u,v) G(u,v) v v v u u u = + +
Amostragem, quantização e codificação Imagem Digital Amostragem, quantização e codificação
Digitalização de Imagens Discretização espacial (amostragem)
quantizada e codificada Processos básicos 64x54 Imagem amostrada amostragem Imagem de tons contínuos 64x54 - 16 cores Imagem amostrada e quantizada quantização 55 20 22 23 45 10 09 11 43 42 70 28 76 codificação 8*55, 1*20, 1*22, 1*23, …. Imagem amostrada, quantizada e codificada
Áudio (Sinal 1D)
Amostragem, quantização e codificação de f(x) partição do eixo x x
Amostragem, quantização e codificação de f(x) 6 amostra quantizada 5 4 3 2 1 x codificação = (3, 4, 5, 5, 4, 2, 2, 3, 5, 5, 4, 2)
Problemas associados a re-amostragem de um sinal digital f(x) 6 função original 5 função reconstruída pelo vizinho mais próximo função reconstruída por interpolação linear 4 3 2 1 x (a) aumento de resolução
Re-amostragem de f(x) (b) redução de resolução f(x) 6 função original 5 4 3 2 função reconstruída pelo vizinho mais próximo função reconstruída por interpolação linear 1 x (b) redução de resolução
Parte 2 - Eliminação de ruídos e realce de arestas Imagem Digital 08/04/2017 Imagem Digital Conceitos, Processamento e Análise Parte 2 - Eliminação de ruídos e realce de arestas Aplicações da Transformada de Fourier Marcelo Gattass
Imagem Digital 08/04/2017 Redução de ruídos Dada uma imagem I com um ruído n, reduza n o máximo que puder (preferencialmente elimine n completamente) sem alterar significativamente I. 20 dB significam Marcelo Gattass
Dois tipos básicos de ruídos Imagem Digital 08/04/2017 Dois tipos básicos de ruídos Ruído Gaussiano branco : processo estocástico de média zero, independente do tempo e dos espaço. é o mesmo processo estocástico que não varia no tempo. é uma variável aleatória com a distribuição: Marcelo Gattass
Dois tipos básicos de ruídos Imagem Digital 08/04/2017 Dois tipos básicos de ruídos Ruído impulsivo: causado por erro de transmissão, CCDs defeituosos, etc... Também chamado de pico e de sal e pimenta. são v.a. uniformemente distribuídas imin, imax, e l são parâmetos de controle da quantidade de ruídos. Marcelo Gattass
Exemplo de ruído Gaussiano (=5) e Impulsivo ( =0.99) Imagem Digital 08/04/2017 Exemplo de ruído Gaussiano (=5) e Impulsivo ( =0.99) Marcelo Gattass
Imagem Digital 08/04/2017 Marcelo Gattass
Imagem com ruído impulsivo Imagem Digital 08/04/2017 Imagem com ruído impulsivo Uso da mediana 223 204 171 120 18 50 116 138 97 187 242 172 179 167 235 76 175 123 214 114 143 232 198 203 205 Iij = mediana Ωij Marcelo Gattass
Imagem Digital 08/04/2017 Sinal com ruído Marcelo Gattass
Imagem Digital 08/04/2017 Suavização f h Marcelo Gattass
Imagem Digital Filtragem Gaussiana 08/04/2017 Marcelo Gattass
Imagem Digital: Histogramas Uma outra maneira de ver a informação da imagem: probabilidade de ocorrência de um determinado valor, uso do intervalo [0,255], contraste,...
Histogramas de Imagem Colorida
Propriedades básicas de uma Imagem Digital
Convolução
Convolution Pictorially f(x) h(x)
Convolution h(t-x) f(t) x
Convolution Consider the function (box filter):
Convolution This function windows our function f(x). f(t)
Convolution This function windows our function f(x). f(t)
Convolution This function windows our function f(x). f(t)
Convolution This function windows our function f(x). f(t)
Convolution This function windows our function f(x). f(t)
Convolution This function windows our function f(x). f(t)
Convolution This function windows our function f(x). f(t)
Convolution This function windows our function f(x). f(t)
Convolution This function windows our function f(x). f(t)
Convolution This function windows our function f(x). f(t)
Convolution This function windows our function f(x). f(t)
Convolution This function windows our function f(x). f(t)
Convolution This function windows our function f(x). f(t)
Convolution This function windows our function f(x). f(t)
Convolution This function windows our function f(x). f(t)
Convolution This function windows our function f(x). f(t)
Convolution This function windows our function f(x). f(t)
Convolution This function windows our function f(x). f(t)
Convolution This function windows our function f(x). f(t)
Convolution This function windows our function f(x). f(t)
Convolution This function windows our function f(x). f(t)
Convolution This function windows our function f(x). f(t)
Convolution This particular convolution smooths out some of the high frequencies in f(x). f(t) f(x)g(x)
Ilustação da convolução
Ilustração da convolução
O problema de amostragem Alias
Freqüência de Amostragem f(x) x f(x) x x f(x)
Sinal sub-amostrado
Estudo de sinais digitais Transformadas para o domínio da freqüencia Teorema de Nyquist e Alias
revisão Harmônicos T A t+ -A A
Integrais de senos e cosenos em [-,] revisão cos(nx) sin(nx) n = 1 n = 2 Áreas se compensam. Integrais resultam em 0. sin(nx)cos(nx)
Integrais de senos e cosenos em [-,] revisão Integrais de senos e cosenos em [-,] Funções ortogonais
Série de Fourier f(t) t T Jean Baptiste Joseph Fourier (1768-1830) T Jean Baptiste Joseph Fourier (1768-1830) Paper de 1807 para o Institut de France: Joseph Louis Lagrange (1736-1813), and Pierre Simon de Laplace (1749-1827).
Exemplo: Série de harmônicos
Série de Fourier: cálculo de a0 f(t) t T
Série de Fourier: an e bn f(t) t T ...
Resumindo f(t) t T
Domínios f(t) tempo ou espaço t T ak w bk freqüencia w
Coeficientes de funções pares e ímpares f-ímpar ak= 0 f-par bk= 0
Periodicidade da Série de Fourier f(t) t T t f(t) T
Números complexos x é a parte real y é a parte imaginária revisão eixo imagnário x é a parte real y é a parte imaginária A é a magnitude q é a fase y A q eixo real x
Operação básicas com complexos revisão Operação básicas com complexos
revisão Derivada de eit C.Q.D.
Outras propriedades úteis revisão i -1 1
Outras propriedades úteis (2) revisão 1 -1 i -i o cosseno corresponde a média de dois harmônicos de freqüências w e -w
Outras propriedades úteis (2) revisão 1 -1 i -i o seno também corresponde a dois harmônicos: w e -w
Outras propriedades úteis (3) revisão
Amplitude e fase de complexos revisão Amplitude e fase de complexos Dado um valor: Amplitude -A A Fase
Série de Fourier com números complexos
Escrevendo em complexos
Serie de Fourier de Sinais Discretos
Sinal discreto r t 1 2 3 4 5 6 N-1
1 2 3 4 5 N t . . .
onde: onde:
onde: onde:
Inversa da inversa onde: Qual o valor?
Se s=k Se s ≠ k é a soma de uma PG de N termos e razão q. Mas
onde: Qual o valor? C.Q.D.
real imaginário 1 N=5 N=3 N=6 N=4
Transformada Discreta T - não é o período do sinal!
Transformada Discreta de Fourier todas as feqüências computadas são multiplas destas
Outro exemplo f3 ( t ) := 10 cos ( 2 p t ) + 6 sin ( 10 p t ) + .8 cos 40 p t )
Transformada
Eixo de freqüência
Tutorial com o Excel http://www.me.psu.edu/me82/Learning/FFT/FFT.html
Discrete Cosine Transformation (DCT)
o cosseno pode substituir o seno
Resumindo f(t) t T
1 2 3 4 5 N t . . .
Aula 2
Serie de Fourier de Sinais Discretos
Sinal discreto r t 1 2 3 4 5 6 N-1
onde: onde:
Transformada
Transformada de Fourier
Exemplo 1: Função caixa (box) box(x) a x b
Transformada da função box box(x) a x b F(w) 1/b 2/b 3/b -1/b -2/b -3/b ab sinc(bw) w
Distribuição normal: Gaussiana
Exemplo 2: Gaussiana || F(w) || f(x) w x
Transformada da Gaussiana
Exemplo 3: Delta de Dirac f(x) 1/b -b/2 b/2 x
Delta de Dirac de Gaussianas
Transformada do Delta de Dirac f(x) (x) x || F(w) || w 1
Transformada do cosseno x
Exemplo 4: Cosseno || F(w) || x w
Exemplo 5: Sequência de impulsos f(x) || F(w) || 1/b 2/b -1/b -2/b x w -2b -b b 2b 3b f(x) || F(w) || w 1/b 2/b -1/b -2/b x 1b 2b 3b -b -2b
Pares importantes
Propriedades da transformada convolução
Filtragem com Transformada de Fourier FT FT FT-1 FT X
Amostragem e Reconstrução Observando os domínio do espaço e das freqüências
Sinal original domínio do espaço domínio das freqüências
Sinal discretizado
Amostragem domínio do espaço domínio das freqüências produto convolução
Sinal discretizado domínio do espaço domínio das freqüências
Reconstrução domínio do espaço domínio das freqüências convolução produto
Retorno ao sinal original domínio do espaço domínio das freqüências
Sinal original com mais altas freqüências domínio do espaço domínio das freqüências
Mesma taxa de amostragem domínio do espaço domínio das freqüências produto convolução
Sinal amostrado Não temos como reconstruir sem introduzir artefatos! domínio do espaço domínio das freqüências Não temos como reconstruir sem introduzir artefatos!
Teorema de Nyquist Para que um sinal de banda limitada (i.e. aqueles cuja a transformada resultam em zero para freqüências f > B) seja reconstruido plenamente ele precisa ser amostrado numa freqüência f >= 2B. Um sinal amostrado na freqüência (f=2B) é dito amostrado por Nyquist e f=2B é a freqüência de Nyquist. Não há perda de informação nos sinais amostrados na freqüência de Nyquist, e não adicionamos nenhuma informação se amostrarmos numa freqüência maior.
Aliasing Esta mistura de espectros é chamada de aliasing. Existem duas maneiras de lidarmos com aliasing. Passar um filtro passa-baixa no sinal. Aumentar a freqüência de amostragem.
Alias Texture errors
Parte 2 - Eliminação de ruídos e realce de arestas Imagem Digital Conceitos, Processamento e Análise Parte 2 - Eliminação de ruídos e realce de arestas Aplicações da Transformada de Fourier
Filtragem Gaussiana
Filtro Um filtro é um operador que atenua ou realça uma determinada freqüência Fácil de visualizar no domínio da freqüência onde: h(t) é o f(t) filtrado
Tipos de Filtros F G H Passa baixa = Passa alta = Passa banda =
Imagem filtrada com um filtro passa baixa
Imagem filtrada com um filtro passa alta
Filtragem no domínio espacial ou: Filtragem no domínio espacial é obtida pela convolution (e vice-versa). Na realidade é ao contrário: a TF é uma ferramenta para filtragem.
Mascara ou Filtro ou:
Discretização da Gaussiana 1D 0.3 0.2 0.1 -4 -3 -2 -1 1 2 3 4
Discretização da Gaussiana 2D
Separabilidade do filtro gaussiano 207 247 38 131 62 90 129 234 231 211 175 44 1 26 236 58 75 128 112 210 141 125 168 130 117 129 125 90 88 93 92 185 113 84 93 145 207 151 66 18 107 111 154 140 130 130 117 129 125 90 88 93 92
Transformada normalizada de Fourier
Transformada normalizada de Fourier: separação
Transformada normalizada de Fourier: Matriz H
Problemas com a Transformada de Fourier
Como tornar a TF invariante a rotação e escala?
Parte 3 - Processamentos apenas no espaço das cores Imagem Digital Conceitos, Processamento e Análise Parte 3 - Processamentos apenas no espaço das cores
Correção gama Ajustes de contraste e iluminação
Correção gama
Probabilidade 1 x CDF(x) DF(x) x0 x1 1 x 1 x CDF(x) Função de densidade acumulada de probabilidade Função de densidade de probabilidade DF(x) x0 x1 1 x
Mudança de variavel y = f (x) 1 1 Transformação monotônica e limitada ao intervalo [0,1] 1 x 1 y 1 x DF(y)
Equalização de Histograma 1.6 1.4 1.2 1 0.8 0.6 0.4 0.2 1 2 3 4 5 6 7 8 9 10 11
Equalização do histograma
Tons de cinza e negativo Lx,y = 0.299Rx,y + 0.587Gx,y + 0.114Bx,y tons de cinza Lx,y = 255 - Lx,y
Outros exemplos com o PaintShopProtm
Quantização de cores Quantização de 24 para 8 bits
A qualidade depende da imagem
Corte mediano
Corte mediano
Parte 4 - Codificação e armazenamento de Imagens Imagem Digital Conceitos, Processamento e Análise Parte 4 - Codificação e armazenamento de Imagens compressão e formatos de arquivos
Codificação uniforme tons Podemos melhorar? Uniforme # pixels código tam. # bits 1900 000 3 5700 1/7 2500 001 7500 2/7 2100 010 6300 3/7 1600 011 4800 4/7 800 100 2400 5/7 600 101 1800 6/7 300 110 900 1 200 111 TOTAL 30000 Podemos melhorar?
Construção da Árvore Huffman 1/7 2500 2/7 2100 1900 3/7 1600 4/7 800 5/7 600 6/7 300 1 200 1/7 2500 2/7 2100 1900 3/7 1600 4/7 800 5/7 600 n0 500 n0 6/7 1
Construção da Árvore Huffman 1/7 2500 2/7 2100 1900 3/7 1600 4/7 800 5/7 600 n0 500 1/7 2500 2/7 2100 1900 3/7 1600 n1 1100 4/7 800 n1 n0 5/7 6/7 1
Construção da Árvore Huffman 1/7 2500 2/7 2100 1900 3/7 1600 n1 1100 4/7 800 1/7 2500 2/7 2100 1900 n2 3/7 1600 n0 6/7 1 5/7 n1 4/7 n2
Construção da Árvore Huffman 1/7 2500 2/7 2100 1900 n2 3/7 1600 n3 3500 1/7 2500 2/7 2100 1900 n0 6/7 1 5/7 n1 4/7 n2 3/7 n3
Construção da Árvore Huffman 3500 1/7 2500 2/7 2100 1900 n4 4000 n3 3500 1/7 2500 n4 2/7 n0 6/7 1 5/7 n1 4/7 n2 3/7 n3
Construção da Árvore Huffman 4000 n3 3500 1/7 2500 n5 6000 n4 4000 n4 n5 n3 1/7 2/7 n2 3/7 n1 4/7 n0 5/7 6/7 1
Construção da Árvore Huffman 1 11 10 01 00 111 110 1111 1110 11111 11110 111101 111100 n0 n1 n2 n3 n4 n5 n6 6/7 5/7 4/7 3/7 2/7 1/7
Codificação de Huffman Uniforme Huffman tons # pixels código tam. # bits 1900 000 3 5700 00 2 3800 1/7 2500 001 7500 10 5000 2/7 2100 010 6300 01 4200 3/7 1600 011 4800 110 4/7 800 100 2400 1110 4 3200 5/7 600 101 1800 11111 5 3000 6/7 300 900 111101 6 1 200 111 111100 1200 TOTAL 30000 27000
Redundância de Codificação p(r) Code 1 l(r) l(r)p(r) Code 2 l(r) l(r)p(r) 0.19 000 3 0.57 11 2 0.38 1/7 0.25 001 3 0.75 01 2 0.50 2/7 0.21 010 3 0.63 10 2 0.42 3/7 0.16 011 3 0.48 001 3 0.48 4/7 0.08 100 3 0.24 0001 4 0.32 5/7 0.06 101 3 0.18 00001 5 0.30 6/7 0.03 110 3 0.09 000001 6 0.18 1 0.02 111 3 0.06 000000 6 0.12 1.00 Lavg= 3.00 Lavg= 2.70 rk = tons de cinza em uma imagem, k=0, 1, ..., -1 p(rk) = nk / n onde nk = número de pixels com tom rk n = número de pixels da imagem 11 10 01 001 0001 00001 000001 000000
Resultado da Teoria da Informação p(r) Code 1 l(r) l(r)p(r) Code 2 log(1/p) log(1/p)*p 0.19 000 3 0.57 11 2 0.38 2.4 0.46 1/7 0.25 001 0.75 01 0.50 2.0 2/7 0.21 010 0.63 10 0.42 2.3 0.47 3/7 0.16 011 0.48 2.6 4/7 0.08 100 0.24 0001 4 0.32 3.6 0.29 5/7 0.06 101 0.18 00001 5 0.30 4.1 6/7 0.03 110 0.09 000001 6 5.1 0.15 1 0.02 111 000000 0.12 5.6 0.11 =1.00 Lavg = 3.00 2.70 Lopt = 2.65
Compressão de imagens Compressão de Imagens Sem Perda Com Perda Preserva de forma controlada o nível de qualidade da imagem Taxas de compressão que chegam a valores de mais de 100 : 1 Preserva exatamente o conteúdo da imagem Taxas de compressão 3 : 1
Métodos de compressão Sem perdas Run length encoding (RLE) - repetição Huffman coding - histograma Predictive coding - diferenças Block coding (LZW) - dicionário Com perdas Truncation coding - reduz a representação Predictive coding - descarta diferenças altas Block coding - dicionário aproximado Transform coding - descarta frequencias altas Métodos compostos: JPEG, MPEG
Processo de compressão e descompressão Dados da Imagem Original Dados da Imagem Original 32, 45, 57, 68, 23, 100, 98, ... 32, 45, 57, 68, 23, 100, 98, ... ¹ Compressão da imagem Descompressão da imagem ¹ 32, 45, 57, 68, 23, 100, 98, ... 32, 45, 57, 68, 23, 100, 98, ... Transporte e/ou Armazenamento Imagem Comprimida Imagem Comprimida
Fundamentos da Compressão de Imagens A compressão de uma imagem é obtida quando se elimina a redundância de: codificação entre pixels psico-visual
Redundância entre pixels 640 colunas x 480 linhas x 1 byte/pixel = 300 KBytes 480*(1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0) = ~18 Kbytes onde 1 = 32 bytes de preto e 0 = 32 bytes de branco
Compressão - RLE Objetivo Reduzir a quantidade de dados redundantes. Exemplo AAAAAAxxx 6A3x Caracterísiticas Simples e rápido, porém a eficiência depende da imagem a ser comprimida.
Run-Length Encoding 76 78 79 80 76 | 5 78 | 1 79 | 4 80 | 2 imagem binária . . . 1 1 1 1 1 7 4 5
Compressão do jpeg
Aplicações são tecnologicamente complexas: exemplo: algoritmo do JPEG 8x8 blocks Source Image B G R DCT-based encoding Compressed image data FDCT Quantizer Entropy Encoder Table Table
Equations for JPEG DCT Forward DCT: Inverse DCT:
Visualization of Basis Functions Increasing frequency
Organização de pixels num array no formato TGA (targa) Pixel (x,y) h-1 ... 3 2 1 b g r a b g r a b g r a b g r a 1 … w-1 x unsigned char *bgra_vector; … offset=4*(w*y+x); blue = bgra_vector[offset]; green = bgra_vector[offset+1]; red = bgra_vector[offset+2]; alpha = bgra_vector[offset+3];
Outra ordem no plano
Tipo Abstrato Imagem Image *imgCreate (int w, int h); /*- implementação do tipo Imagem */ struct image_imp { int width; /* largura (width) em pixels */ int height; /* altura (height) em pixels */ float *buf; /* buffer RGB */ }; Image *imgCreate (int w, int h); void imgDestroy (Image *image); int imgGetWidth(Image * image); int imgGetHeight(Image * image); float * imgGetRGBData(Image * image); void imgSetPixel3fv(Image *image, int x, int y, float * color); void imgSetPixel3ubv(Image *image, int x, int y, unsigned char *color); void imgGetPixel3fv(Image *image, int x, int y, float *color); void imgGetPixel3ubv(Image *image, int x, int y, unsigned char *color); Image * imgReadBMP(char *filename); int imgWriteBMP(char *filename, Image * image); Image * imgCopy(Image * image); Image * imgGrey(Image * image); Image * imgResize(Image * img0, int w1, int h1);
Pixels (bgra,bgra, …,bgra) Arquivos Targa RGBA Cabeçalho Pixels (bgra,bgra, …,bgra) unsigned char imageType=2 /* RGB(A) sem compressão */ unsigned char bitDepth=32; /* 32 bits por pixel */ unsigned char byteZero=0; /* usado para escrever um byte zero no arquivo */ short int shortZero=0; /* usado para escrever um short int zero no arquivo */ /* escreve o cabecalho */ putc(byteZero,filePtr); /* no. de caracteres no campo de id da imagem */ putc(byteZero,filePtr); /* imagem nao tem palheta de cores */ putc(imageType,filePtr); /* = 2 -> imagem "true color" (RGBA) */ putuint(shortZero,filePtr);/* info sobre a tabela de cores (inexistente) */ putuint(shortZero,filePtr); /* idem */ putc(byteZero,filePtr); /* idem */ putuint(shortZero,filePtr); /* =0 origem em x */ putuint(shortZero,filePtr); /* =0 origem em y */ putuint(img->width,filePtr); /* largura da imagem em pixels */ putuint(img->height,filePtr); /* altura da imagem em pixels */ putc(bitDepth,filePtr); /* numero de bits de um pixel */ putc(byteZero, filePtr); /* origem canto inf esquedo sem entrelacamento */
Organização de pixels num array no formato PPM (o mais simples) 1 2 ... w-1 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 1 15 16 17 18 ... 2 3 ... h-1 Pixel (x,y) unsigned char *rgb_vector; … offset=3*(w*y+x); red = rgb_vector[offset]; green = rgb_vector[offset+1]; blue = rgb_vector[offset+2]; y
Formato PPM File_signature "P6". White_space (blanks, TABs, CRs, LFs). Width, w, (ASCII decimal characters). Height, h, (ASCII decimal characters). Max_color, max, (ASCII decimal characters). Pixels, (3*w*h bytes rgb components of pixels) Comments from # to the end of line lines 70 characters
Formato PPM P6 # Created by Paint Shop Pro 358 539 255 exemplo P6 # Created by Paint Shop Pro 358 539 255 =?:?A<AC>CE@EFAFGBGHCGHCGHB . . .
Gravação em PPM int ppm_write(int w, int h, unsigned char *rgb, char *file_name) { FILE *fp; fp = fopen(file_name, "wb"); if (fp == NULL) return 0; if (fprintf(fp, "P6\n%d %d\n255\n", w, h) <= 0) fclose(fp); } if (fwrite(rgb, 3*w*h, 1, fp) != 1) return 1;
Leitura em PPM int ppm_read(int *p_w, int *p_h, unsigned char **p_rgb, char *file_name) { FILE *fp; char line[80]; int rgb_size; int max; fp = fopen(file_name, "rb"); if (fp == NULL) { printf(”Error reading %s",file_name); return 0;} fgets(line,80,fp); if(strcmp(line,"P6\n")) { printf(”Wrong signature\n"); return 0; } while (fscanf( fp, " %d ", p_w ) != 1) fgets(line, 80, fp); while (fscanf( fp, " %d ", p_h ) != 1) while (fscanf( fp, " %d", &max ) != 1) fgetc(fp); rgb_size=3*(*p_w)*(*p_h); (*p_rgb) = (unsigned char *) calloc(rgb_size, 1); if ((*p_rgb) != NULL) fread( (*p_rgb), rgb_size, 1, fp ); fclose(fp); return 1; }
Programa Simples void main(void){ int w, h; // dimensões da imagem unsigned char *rgb; // bytes de rgb unsigned char r,g,b,grey; // componentes de cor int x,y; long int k; if (ppm_read(&w,&h,&rgb,"test_in.ppm")==0) return; for (y = 0; y < h; y++) { for (x = 0; x < w; x++) { k = 3*(y*w+x); r = rgb[k]; g = rgb[k+1]; b = rgb[k+2]; grey = (unsigned char)(0.3*r+0.6*g+0.1*b); rgb[k] = grey; rgb[k+1] = grey; rgb[k+2] = grey; } ppm_write(w, h, rgb, "test_out.ppm"); free(rgb);
colocado para garantir Arquivo BMP 00 01 02 08 07 06 05 03 04 10 09 11 Pixel 0 Pixel 1 Pixel 2 Pixel 3 13 12 14 Pixel 4 15 16 17 18 ... Organização dos pixels de uma imagem RGB no arquivo BMP colocado para garantir múltiplo de 4
Microsoft Windows Bitmap - BMP Características Principais Mono, 4-bit, 8-bit, 24-bit Tipo de compressão: RLE / não comprimido Tamanho máximo: 64K x 64K pixels Seções (versão 3): Header Info. Header Palette Bitmap Data
BMP - Header typedef struct _Win3xBitmapHeader { WORD Type; /* Image file type 4D42h (“BM”)*/ DWORD FileSize; /* File size (bytes) */ WORD Reserved1; /* Reserved (always 0) */ WORD Reserved2; /* Reserved (always 0) */ DWORD Offset; /* Offset to bitmap data in bytes */ } WIN3XHEAD;
BMP - Information Header typedef struct _Win3xBitmapInfoHeader { DWORD Size; /* Size of this Header (40) */ DWORD Width; /* Image width (pixels) */ DWORD Height; /* Image height (pixels) */ WORD Planes; /* Number of Planes (always=1) */ WORD BitCount; /* Bits per pixel (1/4/8 or 24)*/ DWORD Compression; /* Compression (0/1/2) */ DWORD SizeImage; /* Size of bitmap (bytes) */ DWORD XPelsPerMeter; /* Horz. resol.(pixels/m) */ DWORD YPelsPerMeter; /* Vert. resol.(pixels/m) */ DWORD ClrUsed; /* Num of colors in the image */ DWORD ClrImportant; /* Num of important colors */ } WIN3XINFOHEADER;
BMP - Palette typedef struct _Win3xPalette { RGBQUAD Palette[ ]; /* 2, 16, or 256 elem. */ } WIN3XPALETTE; typedef struct _Win3xRgbQuad BYTE Blue; /* 8-bit blue component */ BYTE Green; /* 8-bit green component */ BYTE Red; /* 8-bit red component */ BYTE Reserved; /* Reserved (= 0) */ } RGBQUAD;
BMP - Image Data Notas Cada scan line em um arquivo BMP é sempre um múltiplo de 4. Imagens com1-, 4-, e 8-bits usam uma palheta de cores. Imagens com 24-bits guardam a cor diretamente, na ordem azul, verde e vermelho. O armazenamento da imagem é sempre feito a partir do canto esquerdo inferior.
Esquemas de armazenamento de imagens Plano de Cores Bancos (Java) Azul Verde Verm. 00 01 02 06 05 03 04 07 08 09 . . . 06 Informação é uma componente da cor 06 Pixel 0 Pixel 1 Pixel 2 Pixel 3 Pixel 4 Pixel 5 Organização dos pixels de uma imagem por planos de cores (Data Buffer – Java)
Transformações Geométricas na Imagem Transformações e Quatérnios 08/04/2017 Transformações Geométricas na Imagem Amostragem e Reconstrução Marcelo Gattass
Transformações e Quatérnios 08/04/2017 Marcelo Gattass
Transformações e Quatérnios 08/04/2017 Transformações R2 R2 Exemplos: y x y p = y x´ y´ p´ = x x Marcelo Gattass
Transformações lineares R2 R2 Transformações e Quatérnios 08/04/2017 Transformações lineares R2 R2 Mostre que: T (0) = 0 A) B) 1 x y m11 m21 T = m12 m22 x y m11 x´ y´ = m21 m22 m12 Marcelo Gattass
Transformações lineares: escala Transformações e Quatérnios 08/04/2017 Transformações lineares: escala Redução (0< sx <1) , Aumento (sy >1) y x y i j x´ y´ a´ = b x y a = x c Marcelo Gattass
Transformações lineares: espelhamento Transformações e Quatérnios 08/04/2017 Transformações lineares: espelhamento x y i j y p' = x´ = p x y y´ x x´ = -1x y´ = y Marcelo Gattass
Transformações lineares: rotação Transformações e Quatérnios 08/04/2017 Transformações lineares: rotação y x´ y´ p' = a r r r x y r q p = a x x´ = x.cos q - y.sen q y´ = x.sen q + y.cos q Marcelo Gattass
Transformações Lineares: matriz derivada pela geometria Transformações e Quatérnios 08/04/2017 Transformações Lineares: matriz derivada pela geometria y j q i x Marcelo Gattass
Mudança de referêncial Transformações e Quatérnios 08/04/2017 Mudança de referêncial y y y x´ y´ v p' = x y x y u v p p ou j q = = q i x x - q x u x y cos q u v = sen q -sen q u x y ux uy = v vy vx Para montarmos a matriz que transforma as coordenadas de um refencial xy para um novo refencial uv basta escrevermos as linhas como sendo os unitários das direções. Marcelo Gattass
Mudança de coordenadas entre sistemas rotacionados Transformações e Quatérnios 08/04/2017 Mudança de coordenadas entre sistemas rotacionados As coordenas de um ponto rodado de um ângulo em relação a um sistema são iguais as coordenadas do ponto original em relação a um sistema que sofre a rotação inversa. Como o novo sistema sofre a rotação inversa, a matriz de rotação é a inversa da matriz que levaria da base original para a este novo sistema. As colunas de uma matriz de uma rotação são as transformadas dos vetores da base e a transposta desta matriz é a sua inversa (rotaçãomatriz ortonormal). Logo as linhas da matriz que escreve uma mudança entre bases ortonormais rodadas são as coordenadas do vetores da nova base em relação a base original. Marcelo Gattass
Transformações lineares: cisalhamento (shear) Transformações e Quatérnios 08/04/2017 Transformações lineares: cisalhamento (shear) y y y Cisalhamento em x j i x x x Marcelo Gattass
Exemplo de aplicação do cisalhamento Transformações e Quatérnios 08/04/2017 Exemplo de aplicação do cisalhamento x y a' m' plano de projeção c y x y c' b' a' m' m a x b Marcelo Gattass
Exemplo de aplicação do cisalhamento Transformações e Quatérnios 08/04/2017 Exemplo de aplicação do cisalhamento x y c' b' a' m' y a x Marcelo Gattass
Decomposição Singular de Matrizes Transformações e Quatérnios 08/04/2017 Decomposição Singular de Matrizes rotações diagonal Marcelo Gattass
Exemplo: cisalhamento como composição de rotações e escala Transformações e Quatérnios 08/04/2017 Exemplo: cisalhamento como composição de rotações e escala Marcelo Gattass
Transformações Geométricas: Translação Transformações e Quatérnios 08/04/2017 Transformações Geométricas: Translação y p' x y p' = tx ty + x’ y’ tx ty p t = x x y ? x´ y´ = Não pode ser escrito na forma x y 1 x´ y´ = tx ty + Ruim para implementação Marcelo Gattass
Translação num plano do R3 Transformações e Quatérnios 08/04/2017 Translação num plano do R3 yh xh w w=1 x y t matriz de translação Marcelo Gattass
Transformações e Quatérnios 08/04/2017 Concatenação x y x0 y0 a y y0 x0 x y y a x x Marcelo Gattass
Transformações e Quatérnios 08/04/2017 Concatenação x y x y T1 T2 x y x y P’= T2 R2 E R1 T1 P R1 R2 x y x y E Marcelo Gattass
Coordenadas projetivas (ou homogêneas) Transformações e Quatérnios 08/04/2017 Coordenadas projetivas (ou homogêneas) wx wy w x y 1 = D wx wy w xh yh w x y w = D p = = y x p x = xh /w y = yh /w w>0 w=1 yh xh Ex.: 3 2 1 6 4 2 9 6 3 3 2 = D = D = Marcelo Gattass
Vantagens das coordenadas homogêneas (pontos no infinito) Transformações e Quatérnios 08/04/2017 Vantagens das coordenadas homogêneas (pontos no infinito) w h1 w 2 3 h2 = c2 c3 u w=1 c1 = y h3 x u w=1 yh uh h1 h2 h3 h4 2 3 2 3 1 2 3 1/2 2 3 1/4 2 3 uh xh . . . 2 3 = ? c1 c2 c3 c4 infinito na direção (2,3) 1 1.5 2 3 4 6 8 12 Marcelo Gattass
Reta no espaço projetivo Transformações e Quatérnios 08/04/2017 Reta no espaço projetivo w plano: ax+by+cw=0 reta: ax+by+c=0 yh plano: w=1 xh Marcelo Gattass
Reta paralelas no espaço projetivo Transformações e Quatérnios 08/04/2017 Reta paralelas no espaço projetivo w plano: ax+by+c1w=0 reta: ax+by+c1 =0 reta= ax+by =0 reta: ax+by+c2 =0 yh plano: w=1 plano: ax+by+c2w=0 xh Marcelo Gattass
Deformação sem paralelismo w yh xh w w=1 x y w=1 y x yh xh
Transformações e Quatérnios 08/04/2017 Matriz da Homografia Marcelo Gattass
Transformações e Quatérnios 08/04/2017 [A] : Afim Obs: Se fosse um paralelograma a imagem do ponto 2 seria (1,1)T e não (α, )T Marcelo Gattass
Transformações e Quatérnios 08/04/2017 [P] : Projetiva Marcelo Gattass
[N] : Paralelograma para quadrado unitário Transformações e Quatérnios 08/04/2017 [N] : Paralelograma para quadrado unitário Marcelo Gattass
Fundamentals of Texture Mapping and Image Warping “Explained” A revisit of Paul Heckbert’s M.Sc. Thesis
Um exemplo 1D Textura discreta Textuta contínua Sinal de entrada discreto
Deformação da textura (warping) Textuta contínua Textuta contínua deformada
Limitando a freqüência
Filtro de re-amostragem
Reconstrução, warping, filtragem e amostragem
Textura em imagem
Textura em imagem
Filtro de re-amostragem no espaço de destino (espaço da imagem) destination space integral
Filtro de re-amostragem no espaço de origem (espaço da textura)
Filtro de re-amostragem no espaço de origem (espaço da textura)
Filtro de re-amostragem no espaço de origem (espaço da textura) texture space integral
Mapeamentos lineares afins
Elliptical Gaussian Resampling
Gaussiana
Gaussiana
Circulos e Elipses
Warping de domínios de Gaussianas
Filtro Gaussiano de re-amostragem no espaço de origem (espaço da textura)
Exemplo de reconstrução com Gaussiana
Implementação do Filtro Gaussiano
Magnificação e mimificação
Regiões que mapeiam num quadrado ou círculo
Nosso problema Screen space Texture space
Como tratar o caso geral
FIM
A lens focuses light onto the film Adding a lens “circle of confusion” A lens focuses light onto the film There is a specific distance at which objects are “in focus” other points project to a “circle of confusion” in the image Changing the shape of the lens changes this distance
(Center Of Projection) Lenses F focal point optical center (Center Of Projection) A lens focuses parallel rays onto a single focal point focal point at a distance f beyond the plane of the lens f is a function of the shape and index of refraction of the lens Aperture of diameter D restricts the range of rays aperture may be on either side of the lens Lenses are typically spherical (easier to produce)
Thin lenses Thin lens equation: Any object point satisfying this equation is in focus What is the shape of the focus region? How can we change the focus region? Thin lens applet: http://www.phy.ntnu.edu.tw/java/Lens/lens_e.html (by Fu-Kwun Hwang )
Changing the aperture size affects depth of field A smaller aperture increases the range in which the object is approximately in focus Flower images from Wikipedia http://en.wikipedia.org/wiki/Depth_of_field
Lentes reais
Câmera obscura e Camera “pin-hole” O fato dos quadros renascentistas terem elemenots da geoemetria projetiva não quer dizer que eles conheciam técnicas precisas de desenho geométrico. Muitos trabalhos foram feitos por mera intuição ou com auxilio de câmeras escuras onde o pintor via sobre o canvas uma imagem da cena que ele desejava pintar como ilustra a figura. Podemos encontrar referências a câmeras escuras nos trabalhos de Leonardo da Vinci de 1545. A câmera fotográfica, como conhecemos hoje, foi inventada pelo Mandé Daguerre (1789-1851) e seus principios podem ser ilustrados com artefatos bem simples como a câmera tipo “pinhole”.
Sensor Fujifilm
O que é registrado nos sensores (CCD, CMOS...) yim sx sy 3 2 1 1 2 3 4 5 xim