jahuaman_Ex8

Autor: jahuaman
Data: 12/05/2009

Item 1. Estudar as funções da toolbox ia636: iacos, iadft, iadftview

iacos

Uma onda sinusoidal pode ser gerada para imagens em 2D, isto pode correr em qualquer direção. Podemos definir esta imagem especificando a freqüência e fase em cada sentido.

A ecuação é [1]:

onde:

Exemplo 1.1:

Para obtener a direção espacial, o período eficaz y fase total da funçao fazemos:

Fazendo a mudança de variáveis, temos a ecuação implementada por iacos é:

Abaixo está mostrado uma onda sinusoidal 3D (Matlab) com dados anteriores:

http://www.ukuko.com/files/iacos.jpg

com iacos temos:

1 f = iacos([100,200], 20/sqrt(2), pi/4, 3*pi/4)
2 iashow(uint16(ianormalize((f), [0,255])))

Outros exemplos:

1 f = iacos([100,200], 20, 0, 0)
2 iashow(uint16(ianormalize((f), [0,255])))

Exemplo 1.2: Com período máximo = 200 (T=W=200):

1 f = iacos([100,200], 200, 0, 0)
2 iashow(uint16(ianormalize((f), [0,255])))

Exemplo 1.3: Com período mínimo = 2:

1 f = iacos([100,200], 2, 0, 0)
2 iashow(uint16(ianormalize((f), [0,255])))

1 f = iacos([100,200], 2, pi/4, 0)
2 iashow(uint16(ianormalize((f), [0,255])))

iadft e iadftview

Transformada Discreta de Fourier 1D

Exemplo 2.1:

Temos uma função sinusoide discreta definida em um período, como:

Se M=8, phi=0, Então podemos encontrar a Transformada Discreta de Fourier da funçao com iadft:

 1 def sin1D(M,phi,nT):
 2     f = zeros(M*nT);
 3     for i in range(M*nT):
 4         f[i]=sin(2*pi*i/M+phi)
 5     return f
 6 M = 8;
 7 phi=0;
 8 nT=1
 9 f=sin1D(M,phi,nT)
10 print 'função sinusoide discreta \n',f, '\n'
11 #dft
12 F = iadft(f)
13 print 'Transformada Discreta de Fourier da funçao\n',F, '\n'
14 F1=abs(F)
15 print 'abs(F)\n',F1, '\n'
16 #dft shift
17 Fs = iafftshift(F1)
18 print 'Transformada Discreta de Fourier da funçao com iafftshift.\n',Fs, '\n'
função sinusoide discreta 
[  0.00000000e+00   7.07106781e-01   1.00000000e+00   7.07106781e-01
   1.22464680e-16  -7.07106781e-01  -1.00000000e+00  -7.07106781e-01] 

Transformada Discreta de Fourier da funçao
[[ -1.57009246e-16 +0.00000000e+00j]
 [  1.25607397e-15 -4.00000000e+00j]
 [  1.57009246e-16 +6.28036983e-16j]
 [  7.85046229e-17 +6.28036983e-16j]
 [  3.14018492e-16 +7.35791094e-16j]
 [  7.85046229e-17 +1.17756934e-15j]
 [  1.57009246e-16 +2.90467105e-15j]
 [ -1.27177489e-14 +4.00000000e+00j]] 

abs(F)
[[  1.57009246e-16]
 [  4.00000000e+00]
 [  6.47365705e-16]
 [  6.32924505e-16]
 [  7.99997592e-16]
 [  1.18018326e-15]
 [  2.90891145e-15]
 [  4.00000000e+00]] 

Transformada Discreta de Fourier da funçao com iafftshift.
[[  7.99997592e-16]
 [  1.18018326e-15]
 [  2.90891145e-15]
 [  4.00000000e+00]
 [  1.57009246e-16]
 [  4.00000000e+00]
 [  6.47365705e-16]
 [  6.32924505e-16]]

Outros resultados:

A nova função tem que ter um novo periodo M = MMC(M1,M2) (MMC: mínimo múltiplo comum)

Isso amostra a seguinte propriedade:

Exemplo 2.2:

Temos uma função :

1 L,M = 4,8
2 f = zeros(M)
3 f[0:L]=1;
4 print 'função discreta \n',f, '\n'
5 F = iadft(f)
6 print 'Transformada Discreta de Fourier da funçao\n',F, '\n'
7 F1=abs(F)
8 print 'abs(F)\n',F1, '\n'
função discreta 
[ 1.  1.  1.  1.  0.  0.  0.  0.] 

Transformada Discreta de Fourier da funçao
[[  4.00000000e+00 +0.00000000e+00j]
 [  1.00000000e+00 -2.41421356e+00j]
 [ -5.09124569e-16 -4.71027738e-16j]
 [  1.00000000e+00 -4.14213562e-01j]
 [  0.00000000e+00 -8.88178420e-16j]
 [  1.00000000e+00 +4.14213562e-01j]
 [  1.37036446e-15 -1.25607397e-15j]
 [  1.00000000e+00 +2.41421356e+00j]] 

abs(F)
[[  4.00000000e+00]
 [  2.61312593e+00]
 [  6.93595672e-16]
 [  1.08239220e+00]
 [  8.88178420e-16]
 [  1.08239220e+00]
 [  1.85892995e-15]
 [  2.61312593e+00]]

Outros resultados:

Transformada Discreta de Fourier 2D

Exemplo 2.3

Temos uma onda sinusoidal gerada em 2D:

1 f = iacos([100,200], 20, 0, 0)
2 iashow(uint16(ianormalize((f), [0,255])))
3 F = iadft(f)
4 Fv = iadftview(F)
5 iashow(Fv)

Exemplo 2.3

Temos uma soma de duas ondas sinusoidales gerada em 2D, com períodos diferentes:

1 f1 = iacos([100,200], 20, 0, 0)
2 f2 = iacos([100,200], 40, 0, 0)
3 iashow(uint16(ianormalize((f1+f2), [0,255])))
4 F = iadft(f1+f2)
5 Fv = iadftview(F)
6 iashow(Fv)

Exemplo 2.4

Temos uma soma de tres ondas sinusoidales gerada em 2D, com períodos diferentes:

1 f1 = iacos([100,200], 50, pi/2, 0)
2 f2 = iacos([100,200], 25, pi/2, 0)
3 f3 = iacos([100,200], 10, pi/2, 0)
4 iashow(uint16(ianormalize((f1+f2+f3), [0,255])))
5 F = iadft(f1+f2+f3)
6 Fv = iadftview(F)
7 iashow(Fv)

Exemplo 2.5

Temos uma soma de 5 ondas sinusoidales gerada em 2D, com diferentes períodos :

1 f1 = iacos([100,200], 50, pi/2, 0)
2 f2 = iacos([100,200], 25, pi/2, 0)
3 f3 = iacos([100,200], 10, pi/2, 0)
4 f4 = iacos([100,200], 20, 0, 0)
5 f5 = iacos([100,200], 40, 0, 0)
6 iashow(uint16(ianormalize((f1+f2+f3+f4+f5), [0,255])))
7 F = iadft(f1+f2+f3+f4+f5)
8 Fv = iadftview(F)
9 iashow(Fv)

Exemplo 2.6

Temos uma onda sinusoidal gerada em 2D:

1 f = iacos([100,200], 25*sqrt(2), pi/4, 0)
2 iashow(uint16(ianormalize((f), [0,255])))
3 F = iadft(f)
4 Fv = iadftview(F)
5 iashow(Fv)

Exemplo 2.7

Temos uma onda sinusoidal gerada em 2D:

1 f1 = iacos([100,200], 30, 0, 0)
2 iashow(uint16(ianormalize((f1), [0,255])))
3 F = iadft(f1)
4 Fv = iadftview(F)
5 iashow(Fv)

OBSERVAÇAO:

Para mostrar puntos, a imagem deve conter um número inteiro de períodos da função cosenoidal. A direção é 0º, mod(200,30) é diferente de cero.

Exemplo 2.8

Temos uma onda sinusoidal gerada em 2D:

1 f = iacos([100,200], 10, pi/4, 0)
2 iashow(uint16(ianormalize((f), [0,255])))
3 F = iadft(f)
4 Fv = iadftview(F)
5 iashow(Fv)

OBSERVAÇAO:

Para mostrar puntos, a imagem deve conter um número inteiro de períodos da função cosenoidal, como a direção é 45º o perìodo da função máxima é 100*sqrt(2), então mod(100*sqrt(2),10) é diferente de cero. O exemplo 2.6 mostra

Exemplo 2.9

Temos uma imagen gerada em 2D:

1 f = zeros((200,200))
2 f[95:105,90:110]=1
3 iashow(uint16(ianormalize((f), [0,255])))
4 F = iadft(f)
5 Fv = iadftview(F)
6 iashow(Fv)

Exemplo 2.10

Temos uma imagen gerada em 2D: A propriedade da rotação estabelece que, se uma imagem f(x,y) for rotacionadade um certo ângulo θ, sua transformada, F(u,v), será rotacionada do mesmo ângulo.

1 f = zeros((200,200))
2 f[95:105,90:110]=1
3 g=imrotate(f, pi/4)
4 iashow(uint16(ianormalize((g), [0,255])))
5 F = iadft(g)
6 Fv = iadftview(F)
7 iashow(Fv)

Item 2. Estudar a demonstração iadftdecompose

  • Estudar a demonstração iadftdecompose e procurar fazer a demonstração inversa, isto é, começar a reconstruir parcialmente a função original, adicionando-se as cossenóides, de menor frequência.

testeando ...

1 f = zeros((200,200))
2 f[95:105,90:110]=1
3 iashow(uint16(ianormalize((f), [0,255])))
4 F = iadft(f)
5 E = iadftview(F)
6 iashow(E)
7 mmplot([[E[10,:]]],title = '(10,:)')

(10,:)

Ejemplo

Esta série é a representação de uma onda quadrada:

so com 4 parcelas:

 1 A=7;
 2 n=105;
 3 f1=A*4*sin1D(n,0,1);
 4 f2=A*4/3*sin1D(n/3,0,3);
 5 f3=A*4/5*sin1D(n/5,0,5);
 6 f4=A*4/7*sin1D(n/7,0,7);
 7 ft=A*4+f1+f2+f3+f4;
 8 F1 = abs(iadft(f1))
 9 F2 = abs(iadft(f2))
10 F3 = abs(iadft(f3))
11 F4 = abs(iadft(f4))
12 FT = abs(iadft(ft))
13 mmplot([[f1]],title = 'f1 = 4*sin(x)')
14 mmplot([[F1]],title = 'F1 = DFT(f1)')
15 mmplot([[f2]],title = 'f2 = 4/3*sin(3x)')
16 mmplot([[F2]],title = 'F2 = DFT(f2)')
17 mmplot([[f3]],title = 'f3 = 4/5*sin(5x)')
18 mmplot([[F3]],title = 'F3 = DFT(f3)')
19 mmplot([[f4]],title = 'f4 = 4/7*sin(7x)')
20 mmplot([[F4]],title = 'F4 = DFT(f4)')
21 mmplot([[ft]],title = 'ft = 4+f1+f2+f3+f4')
22 mmplot([[FT]],title = 'FT = DFT(ft)')

f1 = 4*sin(x)

F1 = DFT(f1)

f2 = 4/3*sin(3x)

F2 = DFT(f2)

f3 = 4/5*sin(5x)

F3 = DFT(f3)

f4 = 4/7*sin(7x)

F4 = DFT(f4)

ft = 4+f1+f2+f3+f4

FT = DFT(ft)

Item 3. Repetir parte do exercício que o Prof. Clésio demonstrou em classe usando as funções iadft

Parte do exercicio con Fourier 1D que o Prof. Clésio demonstrou em classe, está em Item 1