Introdução Transformada Discreta de Fourier

Autor: cronuxs
Data: 14/05/2009

Exercicio:

  1. Estudar as funções da toolbox ia636: iacos, iadft, iadftview
  2. 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.
  3. Repetir parte do exercício que o Prof. Clésio demonstrou em classe usando as funções iadft

Solução:

Item 1

A função iacos gera uma imagem deste tipo:

1 img = iacos([m,n], n/2 , 0, 0)
2 mmshow(ianormalize(img,[0,256]))

A função iadft calcula a transfomada discreta de fourier e a função iadftview a mostra:

1 imgt = iadft(img)
2 imgs = iadftview(imgt)
3 mmshow(abs(imgs),title="Espectro")

Espectro

Item 2

Gerando a imagem original a partir do espaço da frequencia:

1 img = zeros([m,n],dtype=complex)
2 img[m/2, n/2 -1] = complex( - (m*n)/2, 0);
3 img[m/2, n/2 +1] = complex( - (m*n)/2, 0);
4 
5 mmshow(ianormalize(abs(img),[0,256]),title="Espectro")
6 mmshow(ianormalize(iaidft(img).real * matrizInversao,[0,256]),title="Imagem gerada")

Espectro

Imagem gerada

Item 3

Freqüência de Senoides e Cossenoides

Tendo uma cossenoide de freqüência 1, é dada pelo seguinte espectro:

Espectro

Imagem gerada

Conforme a freqüência aumenta, mais os dois pontos no espectro se afastam:

Espectro

Imagem gerada

Espectro

Imagem gerada

Caso os pontos fiquem na posição vertical, observe oque ocorre:

Espectro

Imagem gerada

Espectro

Imagem gerada

Espectro

Imagem gerada

É possivel inclusive colocar estes pontos na posição diagonal, verifique o resultado:

Espectro

Imagem gerada

Espectro

Imagem gerada

Existe a possibilidade de compor cossenoides para criar imagens mais complexas, seque o exemplo:

Espectro

Imagem gerada

Filtro passa baixa e filtro passa alta

Vou resolver o exercício da aula passa sobre filtro passa baixa e filtro passa alta

Partindo da imagem:

1 sx = m/4
2 sy = n/4
3 img = zeros([m,n])
4 img[(m-sx)/2:(m+sx)/2,
5     (n-sy)/2:(n+sy)/2] = 1
6 
7 mmshow(ianormalize(img,[0,256]))

Imagem no domínio da frequencia:

1 imgs = iadft(img * matrizInversao)
2 mmshow(ianormalize(abs(imgs),[0,256]))

Usando um filtro passa baixa:

1 mask = iacircle([m,n], ((m/2)**2+(n/2)**2)**0.5 - tamanhoDoFiltro, [m/2,n/2])
2 imgpb = imgs * mask
3 
4 mmshow(mask)
5 mmshow(ianormalize(abs(iaidft(imgpb).real* matrizInversao),[0,256]))

Usando um filtro passa alta:

1 mask = 1 - iacircle([m,n], ((m/2)**2+(n/2)**2)**0.5 - tamanhoDoFiltro, [m/2,n/2])
2 imgpa = imgs * mask
3 
4 mmshow(mask)
5 mmshow(ianormalize(abs(iaidft(imgpa).real* matrizInversao),[0,256]))