Processamento de Imagens e
Fotografia Digital
Images Alive: Manipulação de gradientes
Eric Jardim
ericjardim@gmail.com
IMPA - Instituto Nacional de Matemática Pura e Aplicada Prof. Luiz Velho
Tema: Images Alive
•
Com a popularização de aparelhos com dispositivos gráficos como celulares, handhelds, MP3 players e câmeras digitais, o conceito de “imagem” ou “foto” deixou de ser algo exclusivo para visualização em papel.•
Com isso, existe a possibilidade de termos imagens mais “vivas”, sejam com pequenas animações de uma imagem ou cena original que dão um efeito de movimento, sem perder a qualidade de imagem.•
É nesse limiar entre imagem, animação e aplicações interativas que reside o tema “Images Alive”.Técnica escolhida
•
Edge Suppression by Gradient Field Transformation Using Cross-Projection Tensors, dos autores AmitAgrawal, Ramesh Raskar e Rama Chellappa.
•
A técnica consiste em utilizar as informações dosgradientes das imagens tiradas de uma mesma cena sob pequenas variações de iluminação ou com
pequenas alterações.
•
A partir de duas imagens, é possível gerar uma terceira que combina informações das duas.Exemplos de uso da técnica
Exemplos de uso da técnica
Técnica e o tema
•
Problema: como amarrar o tema com a técnica escolhida?•
Solução: transições suaves entre imagens resultantes e originais (dissove)Técnica: definições
•
Modelo funcionalf : U ⊂ R2 → R3 = E
U = [a, b] × [c, d] = {(x, y) ∈ R2; a ≤ x ≤ b, c ≤ x ≤ d}
•
Representação matricial (discreta), associa um reticulado ∆ = (∆x, ∆y) ao domínio U∆ = {(xj, yk) ∈ U ; xj = j∆x, yk = ∆yk}
j, k ∈ Z, ∆x, ∆y ∈ N}
•
O espaço de cor é representado por valores reais por cada canal utilizando ponto flutuante.Técnica: definições
•
Podemos olhar a imagem como o gráfico de(x, y, f (x, y)) (x, y) ∈ U
•
Vamos agora denotar a imagem por I = f (x, y)•
Definimos o gradiente de I como∇I = "
Ix Iy
#
•
Para estimarmos os valores de ∇I utilizamos diferenças finitasExemplo: gradiente
Técnica: definições
•
Vamos também definir o tensor de estruturasuavizado por Gσ = (∇I∇IT) ∗ Kσ = " Ix2 IxIy IxIy Iy2 # ∗ Kσ
onde Kσ é núcleo gaussiano de variança σ
•
Mas como Gσ é positiva e simétricaGσ = ΛΣΛT = [ v1 v2 ] " λ1 0 0 λ2 # " v1T v2T #
podemos encontrar autovetores v1, v2 e seus
Exemplo: tensor de estrutura suavizado
Técnica: definições
•
Problema: queremos retirar bordas comuns de uma imagem e preservar as outras•
Como fazer para remover uma borda de um gradiente de uma imagem?•
Idéia: aplicar uma transformação afim para projetar o vetor na direção perpendicular à borda.Tensor de projeção cruzada
•
A forma do tensor de projeção cruzadaD = [ u1 u2 ] " µ1 0 0 µ2 # " uT1 uT2 #
•
Utilizamos as informações do tensor de estrutura Gσde cada imagem, digamos A e B
•
Por convenção queremos:◮ remover as bordas de A que estão em B
◮ preservar as bordas de A que não estão em B
•
Os valores µ1 e µ2 e os vetores u1 e u2 são baseadosTensor de projeção cruzada
•
Vamos calcular o tensor de projeção cruzada•
Utilizamos as direções dos autovetores de GBσ , ou seja, u1 = v1B e u2 = v2B•
Temos então 3 situações:◮ B é homogêneo (λB1 ≃ 0) e A tembém é (λA1 ≃ 0)
µ1 = 0, µ2 = 0
◮ B é homogêneo (λB1 ≃ 0) e A não é (λA1 > 0),
retém a borda
µ1 = 1, µ2 = 1
◮ B não é homogêneo (λB1 > 0), projeta na direção
Exemplos de uso
Inovações na técnica
•
Aplicar a transformação afim apenas a alguns canais para obter efeitos artísticosInovações na técnica
•
Vamos fazer o reverso da aplicação. Vamos inserir um objeto em outra cena•
Primeiros utilizamos uma imagem de funda para retirar o objeto da frenteInovações na técnica
•
Utilizamos as informações do tensor de estrutura para combinar imagens•
Onde existem bordas da imagem da frente, zeramos (ou abaixamos) o gradiente do fundoSobre a implementação
•
O código foi reescrito na linguagem Python (os originais eram MatLab). Vantagens:◮ Linguagem de alto nível com fácil aprendizado e
utilização
◮ Roda em diversas plataformas
◮ É livre, grátis (e não necessita obter uma cópia do
MatLab)
•
Foi utilizado Qt4 como toolkit, permitindoparametrizar o algoritmo sem rescrever código.
•
Todo o código está liberado sobre licença livre.•
Foram utilizadas rotinas numéricas de altoReferências
Edge Suppression by Gradient Field Transformation Using Cross-Projection Tensors
www.cfar.umd.edu/~aagrawal/cvpr06/EdgeSuprresion.html Python www.python.org Qt www.trolltech.com Numpy e SciPy www.scipy.org