jahuaman_Ex7

Autor: jahuaman
Data: 04/05/2009

Item 1: Escrever a equação que é de fato implementada pela rotina iaconv da toolbox ia636.

Seja:

Para minimizar o número de iterações, a menor matriz é atribuída a h, então:

Então, nós definimos a convolução linear de "f" e "h" como:

Para demonstrar isso, considere o seguinte:

Agora vamos definir h (x, y) como:

Em seguida, a convolução é definida como f * h, faça o seguinte:

Como:

substituindo na equação acima, nós definimos a convolução linear de "f" e "h" como:

É a equação de fato implementada pela rotina iaconv. Para a implementação é visto como uma soma de translações ponderadas de hij.f dentro de g. Para demonstrar isso, considere o seguinte mudança de variavel:

substituindo-o na equação de fato, temos:

A matriz f pode ser apresentado como:

Então, a ecuação implementada en iaconv como uma soma de translações ponderadas é:

  • A equação implementada pela rotina iaconv da toolbox ia636 é: g = iaconv(f, h)
 1 from numpy import *
 2 
 3 def iaconv(f, h):
 4 
 5     f, h = asarray(f), asarray(h)
 6     if len(f.shape) == 1: f = f[newaxis,:]
 7     if len(h.shape) == 1: h = h[newaxis,:]
 8     if product(f.shape) < product(h.shape):
 9         f, h = h, f
10     g = zeros(array(f.shape) + array(h.shape) - 1)
11     for i in range(h.shape[0]):
12         for j in range(h.shape[1]):
13             g[i:i+f.shape[0], j:j+f.shape[1]] += h[i,j] * f
14     return g
Module code.

Item 2: Elaborar uma lição sobre convolução digital

Invariante à translação:

Def. Convolução digital tem a propriedade de ser Invariante à translação

Exemplo: Caso 1D

f:        [1 2 3] 

h:        [1 2] 

h_2:      [0 0 1 2] 

f*h:      [ 1.  4.  7.  6.] 

f*h_2:    [ 0.  0.  1.  4.  7.  6.] 

(f*h)_2:  [ 0.  0.  1.  4.  7.  6.] 

Então: f * h_2 = (f * h)_2, em geral: f*h_x = (f*h)_x

Exemplo: Caso 2D

f:
[[1 2]
 [3 4]] 

h:
[[1 2 3]
 [4 5 6]] 

h_:
[[ 0.  0.  0.  0.]
 [ 0.  1.  2.  3.]
 [ 0.  4.  5.  6.]] 

f*h:
[[  1.   4.   7.   6.]
 [  7.  23.  33.  24.]
 [ 12.  31.  38.  24.]] 

f*h_1:
[[  0.   0.   0.   0.   0.]
 [  0.   1.   4.   7.   6.]
 [  0.   7.  23.  33.  24.]
 [  0.  12.  31.  38.  24.]] 

(f*h)_1:
[[  0.   0.   0.   0.   0.]
 [  0.   1.   4.   7.   6.]
 [  0.   7.  23.  33.  24.]
 [  0.  12.  31.  38.  24.]] 

Então: f*h_1 = (f*h)_1, em geral: f*h_x = (f*h)_x

Filtro Linear:

Def. Se f e g tem convoluções com h, e a e b são reais, então af + bg é também uma convolução com "h"

Todo filtro linear e invariante à translação pode ser implementado pela convolução.

Exemplo: Caso 1D

f:             [1 2 3] 

g:             [2 3 1] 

h:             [1 2] 

a:             3 

b:             4 

a.f:           [3 6 9] 

b.g:           [ 8 12  4] 

(a.f+b.g)*h:   [[ 11.  40.  49.  26.]] 

a(f*h):        [[  3.  12.  21.  18.]] 

b(g*h):        [[  8.  28.  28.   8.]] 

a(f*h)+b(g*h): [[ 11.  40.  49.  26.]] 

Em geral: (a.f+ b.g)*h=a(f*h) + b(g*h)

Resposta ao impulso da convolução:

Onde I é uma imagem impulso.

Isto significa para se caracterizar um filtro linear e invariante à translação desconhecido, basta buscar sua resposta ao impulso.

Uma propriedade útil é a comutatividade, isto é: f * h = h * f Entretanto, do ponto de vista prático e de implementação, é usual ter um tratamento eficiente para o caso onde f é a imagem (normalmente grande) e h é o núcleo da convolução que é tipicamente pequeno.

Exemplo:

I =  [[ 0.  0.  0.]
 [ 0.  1.  0.]
 [ 0.  0.  0.]] 

h =  [3, 1] 

I*h =  [[ 0.  0.  0.  0.]
 [ 0.  3.  1.  0.]
 [ 0.  0.  0.  0.]]

Item 3:

Utilize seu programa de convolução feito na lição anterior com filtros de dimensão 3x3 e 5x5. Utilize também, para efeitos de comparação, a função iaconv da toolbox ia636. Aplique estes filtros em dois casos: um filtro de suavização e um filtro de realce de detalhes. Escolha as máscaras de convolução apropriadas e a imagem para aplicar estes filtros.

h1:
[[ 0.11111111  0.11111111  0.11111111]
 [ 0.11111111  0.11111111  0.11111111]
 [ 0.11111111  0.11111111  0.11111111]] 

h2:
[[ 0.04  0.04  0.04  0.04  0.04]
 [ 0.04  0.04  0.04  0.04  0.04]
 [ 0.04  0.04  0.04  0.04  0.04]
 [ 0.04  0.04  0.04  0.04  0.04]
 [ 0.04  0.04  0.04  0.04  0.04]]

Imagem original: morph_data/tplayer1.tif

Suavização com filtro 3x3

Suavização com filtro 5x5