Exercicio 9: Filtros no domínio da frequência

Autor: jahuaman
Data: 19/05/2009

Item 1. Uso de filtro no domínio da frequência

Usar a imagem do código de barras do curso do Khoros para demonstrar o uso de filtro no domínio da frequência. (http://www.dca.fee.unicamp.br/DIPcourse/html-dip/c5/s8/front-page.html). Usar também a imagem de impressão digital. (Imagem de impressão digital: 'db1_a/1_1.tif')

Para projetar os filtros no domínio da frequência, utilize imagens sintéticas, como círculo ou quadrado ou retângulo (filtros ideais), tomando-se o cuidado para verificar se estes filtros são complexos-conjugados. Tomar cuidado que o projeto do filtro é normalmente feito no espectro ótico de Fourier, mas sua aplicação é feita com coordenadas 0 a N-1.

Solução

1 f =adreadgray('MVBook/bunch-seeds.jpg')
2 iashow(f,title='Imagem original')
3 
4 F = iadft(f)
5 iashow(iadftview(F),title='Espectro da Transformada de Fourier')

Imagem original

Espectro da Transformada de Fourier

  • Região das baixas freqüências espaciais: Determinam o “grosso” da imagem do espectro.
  • Região das altas freqüências espaciais: Determinam os contornos da imagem do espectro.

Observação:

  • Baixas freqüências: Responsáveis pela aparência geral de nível de cinza da imagem em áreas suaves
  • Altas freqüências: Responsáveis pelos detalhes da imagem, como bordas e ruído

filtro passa-baixa ideal (lowpass filter)

  • Deixa passar freqüências baixas e atenua freqüências altas.
1 H = iacircle([300,350], 110, [150,175])
2 iashow(H,title='Filtro passa-baixa ideal, com freqüência de corte de 110 píxeles')

Filtro passa-baixa ideal, com freqüência de corte de 110 píxeles

Aplicação do filtro passa-baixa ideal:

1 iashow(iadftview(F),title='Espectro da Transformada de Fourier')
2 iashow(H,title='Filtro passa-baixa ideal, com freqüência de corte de 110 píxeles')
3 G = F*iaifftshift(H)
4 iashow(iadftview(G),title='produto F*G')

Espectro da Transformada de Fourier

Filtro passa-baixa ideal, com freqüência de corte de 110 píxeles

produto F*G

1 iashow(f,title='Imagem Original')
2 g=abs(iaidft(G))
3 iashow(uint16(g),title='Imagem Filtrada')

Imagem Original

Imagem Filtrada

Filtro passa-alta (highpass filter)

  • Deixa passar freqüências altas e atenua freqüências baixas
1 H = 1-iacircle([300,350], 60, [150,175])
2 iashow(uint16(H),title='Filtro passa-alta ideal, com freqüência de corte de 60 píxeles')

Filtro passa-alta ideal, com freqüência de corte de 60 píxeles

Aplicação do filtro passa-alta ideal:

1 iashow(iadftview(F),title='Espectro da Transformada de Fourier')
2 iashow(uint16(H),title='Filtro passa-alta ideal, com freqüência de corte de 60 píxeles')
3 G = F*iaifftshift(H)
4 iashow(iadftview(G),title='produto F*G')

Espectro da Transformada de Fourier

Filtro passa-alta ideal, com freqüência de corte de 60 píxeles

produto F*G

1 iashow(f,title='Imagem Original')
2 g=abs(iaidft(G))
3 iashow(uint16(g),title='Imagem Filtrada')

Imagem Original

Imagem Filtrada

Filtro passa-faixa (bandpass filter)

1 H1 = iacircle([300,350], 130, [150,175])
2 H2 = iacircle([300,350], 110, [150,175])
3 H=H1-H2
4 iashow(uint16(H),title='Filtro passa-faixa ideal, com freqüências de corte de 110 e 130 píxeles')

Filtro passa-faixa ideal, com freqüências de corte de 110 e 130 píxeles

Aplicação do filtro passa-faixa ideal:

1 iashow(iadftview(F),title='Espectro da Transformada de Fourier')
2 iashow(uint16(H),title='Filtro passa-faixa ideal, com freqüências de corte de 110 e 130 píxeles')
3 G = F*iaifftshift(H)
4 iashow(iadftview(G),title='produto F*G')

Espectro da Transformada de Fourier

Filtro passa-faixa ideal, com freqüências de corte de 110 e 130 píxeles

produto F*G

1 iashow(f,title='Imagem Original')
2 g=abs(iaidft(G))
3 iashow(uint16(g),title='Imagem Filtrada')

Imagem Original

Imagem Filtrada

Filtro rejeita-faixa (bandpass filter)

1 H1 = iacircle([300,350], 130, [150,175])
2 H2 = iacircle([300,350], 110, [150,175])
3 H=1-(H1-H2)
4 iashow(uint16(H),title='Filtro rejeita-faixa ideal, com freqüências de corte de 110 e 130 píxeles')

Filtro rejeita-faixa ideal, com freqüências de corte de 110 e 130 píxeles

Aplicação do filtro rejeita-faixa ideal:

1 iashow(iadftview(F),title='Espectro da Transformada de Fourier')
2 iashow(uint16(H),title='Filtro rejeita-faixa ideal, com freqüências de corte de 110 e 130 píxeles')
3 G = F*iaifftshift(H)
4 iashow(iadftview(G),title='produto F*G')

Espectro da Transformada de Fourier

Filtro rejeita-faixa ideal, com freqüências de corte de 110 e 130 píxeles

produto F*G

1 iashow(f,title='Imagem Original')
2 g=abs(iaidft(G))
3 iashow(uint16(g),title='Imagem Filtrada')

Imagem Original

Imagem Filtrada

Testando com Imagem de impressão digital: 'db1_a/1_1.tif'

1 f =adreadgray('db1_a/1_1.tif')
2 iashow(f,title='Imagem de impressão digital db1_a/1_1.tif')
3 
4 F = iadft(f)
5 iashow(iadftview(F),title='Espectro da Transformada de Fourier')

Imagem de impressão digital db1_a/1_1.tif

Espectro da Transformada de Fourier

Aplicação do filtro passa-baixo ideal:

1 H =iacircle([374,388], 60, [187,194])
2 iashow(H,title='Filtro passa-baixa ideal, com freqüência de corte de 60 píxeles')
3 G = F*iaifftshift(H)
4 iashow(iadftview(G),title='produto F*G')
5 g=abs(iaidft(G))
6 iashow(uint16(g),title='Imagem Filtrada')

Filtro passa-baixa ideal, com freqüência de corte de 60 píxeles

produto F*G

Imagem Filtrada

Aplicação do filtro passa-alto ideal:

1 H = 1-iacircle([374,388], 60, [187,194])
2 iashow(uint16(H),title='Filtro passa-alto ideal, com freqüência de corte de 60 píxeles')
3 G = F*iaifftshift(H)
4 iashow(iadftview(G),title='produto F*G')
5 g=abs(iaidft(G))
6 iashow(uint16(g),title='Imagem Filtrada')

Filtro passa-alto ideal, com freqüência de corte de 60 píxeles

produto F*G

Imagem Filtrada

Aplicação do filtro passa-faixa ideal:

1 H1 = iacircle([374,388], 70, [187,194])
2 H2 = iacircle([374,388], 20, [187,194])
3 H=H1-H2
4 iashow(H,title='Filtro passa-faixa ideal, com freqüência de corte de 20 e 70 píxeles')
5 G = F*iaifftshift(H)
6 iashow(iadftview(G),title='produto F*G')
7 g=abs(iaidft(G))
8 iashow(uint16(g),title='Imagem Filtrada')

Filtro passa-faixa ideal, com freqüência de corte de 20 e 70 píxeles

produto F*G

Imagem Filtrada

Aplicação do filtro rejeita-faixa ideal:

1 H1 = iacircle([374,388], 70, [187,194])
2 H2 = iacircle([374,388], 20, [187,194])
3 H=1-(H1-H2)
4 iashow(uint16(H),title='Filtro rejeita-faixa ideal, com freqüência de corte de 20 e 70 píxeles')
5 G = F*iaifftshift(H)
6 iashow(iadftview(G),title='produto F*G')
7 g=abs(iaidft(G))
8 iashow(uint16(g),title='Imagem Filtrada')

Filtro rejeita-faixa ideal, com freqüência de corte de 20 e 70 píxeles

produto F*G

Imagem Filtrada

Item 3. Qualquer outra opcional do uso de filtros no domínio da frequência

_

Aplicação da DFT (Deconvolução): Melhoramento do imagem de video deslocado no tempo

 1 f=f1+f2 # formação da imagem com eco
 2 iashow(uint16(ianormalize(f, [0,255])),title = 'f - Imagem de video deslocado no tempo ou imagen com eco')
 3 F = iadft(f)
 4 iashow(uint16(ianormalize(iadftview(F), [0,255])),title='F - Espectro da Transformada de Fourier')
 5 h = zeros([256,256],'d')
 6 h[127,126]=1;
 7 h[129,130]=1;
 8 iashow(h,title = 'h - máscara de convolução associada a esta deformação conhecida')
 9 H = iadft(h)
10 iashow(uint16(ianormalize(iadftview(H), [0,255])),title = 'H - DFT da mascara')
11 G=F/H;
12 iashow(uint16(ianormalize(iadftview(G), [0,255])),title = 'G = F/H - DFT da imagem melhorada')
13 D1=abs(iaidft(F/H))
14 iashow(uint16(ianormalize(iaifftshift(D1), [0,255])),title = 'g - Imagem melhorada')
Warning: downcasting image from double to uint16 (may lose precision)

f - Imagem de video deslocado no tempo ou imagen com eco

F - Espectro da Transformada de Fourier

h - máscara de convolução associada a esta deformação conhecida

H - DFT da mascara

G = F/H - DFT da imagem melhorada

g - Imagem melhorada