MatiasEx9

Autor: Matias
Data: 22/05/2009

Questão 1

  1. 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')
/media/Attachments/ia636-2009/exercicio9/barcode.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.
 1 def filtro_passa_faixa(tamanho,faixas,manterdc):
 2 
 3     if (faixas[0]>0):
 4         h1=iacircle(tamanho,faixas[0],(array(tamanho))/2)*-1
 5     else:
 6         h1=zeros(tamanho)
 7     h2=iacircle(tamanho,faixas[1],(array(tamanho))/2)
 8     h=h1+h2
 9     H = iaifftshift(h)
10 
11     if (manterdc):
12         H[0,0]=1
13     else:
14         H[0,0]=0
15 
16     return H
17 
18 imagem1 = mmreadgray('db1_a/1_1.tif')
19 imagem2 = mmreadgray('Attachments/ia636-2009/exercicio9/barcode.tif')
20 
21 F1 = iadft(imagem1)
22 F2 = iadft(imagem2)
23 
24 iashow(uint16(imagem1),title='Imagem Original')
25 iashow(uint16(iadftview(F1)),title='Representação Espectral')
26 
27 H = filtro_passa_faixa(imagem1.shape,[0,50],0)
28 iashow(uint16(ianormalize(iafftshift(H),[0,255])),title='Filtro aplicado')
29 iashow(uint16(abs(iaidft(F1*H))),title='Imagem resultante')
30 
31 
32 H = filtro_passa_faixa(imagem1.shape,[20,30],0)
33 iashow(uint16(ianormalize(iafftshift(H),[0,255])),title='Filtro aplicado')
34 iashow(uint16(abs(iaidft(F1*H))),title='Imagem resultante')
35 
36 H = filtro_passa_faixa(imagem1.shape,[150,160],0)
37 iashow(uint16(ianormalize(iafftshift(H),[0,255])),title='Filtro aplicado')
38 iashow(uint16(abs(iaidft(F1*H))),title='Imagem resultante')
39 
40 H = filtro_passa_faixa(imagem1.shape,[30,60],0)
41 iashow(uint16(ianormalize(iafftshift(H),[0,255])),title='Filtro aplicado')
42 iashow(uint16(abs(iaidft(F1*H))),title='Imagem resultante')
43 
44 
45 iashow(uint16(imagem2,title='Imagem Original'))
46 iashow(uint16(iadftview(F2)),title='Representação Espectral')
47 
48 H = filtro_passa_faixa(imagem2.shape,[0,50],1)
49 iashow(uint16(ianormalize(iafftshift(H),[0,255])),title='Filtro aplicado')
50 iashow(uint16(abs(iaidft(F2*H))),title='Imagem resultante')
51 
52 H = filtro_passa_faixa(imagem2.shape,[50,60],0)
53 iashow(uint16(ianormalize(iafftshift(H),[0,255])),title='Filtro aplicado')
54 iashow(uint16(abs(iaidft(F2*H))),title='Imagem resultante')
55 
56 H = filtro_passa_faixa(imagem2.shape,[20,80],0)
57 iashow(uint16(ianormalize(iafftshift(H),[0,255])),title='Filtro aplicado')
58 iashow(uint16(abs(iaidft(F2*H))),title='Imagem resultante')

Imagem Original

Representação Espectral

Filtro aplicado

Imagem resultante

Filtro aplicado

Imagem resultante

Filtro aplicado

Imagem resultante

Filtro aplicado

Imagem resultante

Representação Espectral

Filtro aplicado

Imagem resultante

Filtro aplicado

Imagem resultante

Filtro aplicado

Imagem resultante

Questão 2

  1. Melhorar (e completar) a lição iadftdecompose da toolbox ia636

Baseado no exercício anterior:

 1 f = ones((128, 128)) * 50
 2 x, y = [], map(lambda k:k%128, range(-32,32))
 3 for i in range(128): x = x + (len(y) * [i])
 4 y = 128 * y
 5 put(f, iasub2ind([128,128], x, y), 200)
 6 
 7 
 8 
 9 for i in range (0,50,10):
10     F = iadft(f)
11     F[:,(i+2):126-i]=0
12     E=iadftview(F)
13     iashow(uint16(abs(iaidft(F))),title='f(x) reconstructed')
14     iashow(uint16(E),title='F(x) filtered')
15     mmplot([[E[shape(E)[1]/2,:]]])
16 
17 
18 F = iadft(f)
19 E=iadftview(F)
20 iashow(uint16(abs(iaidft(F))),title='f(x) reconstructed')
21 iashow(uint16(E),title='F(x) filtered')
22 mmplot([[E[shape(E)[1]/2,:]]])

f(x) reconstructed

F(x) filtered

f(x) reconstructed

F(x) filtered

f(x) reconstructed

F(x) filtered

f(x) reconstructed

F(x) filtered

f(x) reconstructed

F(x) filtered

f(x) reconstructed

F(x) filtered

  1. Qualquer outra opcional. Sugestões:
    • melhoria do código de iacos, calculando seus parâmetros no domínio da frequência.
    • função que calcula o filtro frequência, passando-se frequencia ou período de corte e o tipo de filtro (ideal circular, ideal retangular, gaussiano, etc.) e a imagem a ser filtrada.