daniel_chiu_Ex11

Autor: daniel_chiu
Data: 04/06/2009

Item 1

No exercício anterior (item 2), o filtro foi aplicado bloco a bloco, o que resultou em uma figura estranha. Além disso, não se fez a sincronização do filtro com a imagem, já que o período aplicado com o filtro não correspondia com a distância das papilas das digitais na imagem original. A equação correta para a classificação da orientação da imagem é a seguinte:

Onde, e é o número de orientações e , para ,

A equação equivale à correlação entre a imagem I e o filtro h.

A intenção era aplicá-lo no domínio espacial, porém o tempo de execução desse algoritmo é muito lento. A aplicação no domínio da frequência encontra-se no item seguinte.

Item 2

Para aplicar o filtro de Gabor no domínio da frequência, deve-se deslocar o centro do filtro à origem da figura original. Caso o centro do filtro fique no centro da figura, a origem da figura filtrada será deslocada ao centro da figura original.

A equação é a seguinte:

 1 def gabor_spatial(W,H,theta_deg,T,sigmaX,sigmaY):
 2 
 3     X,Y=iameshgrid(arange(W),arange(H))
 4     theta=theta_deg*pi/180
 5 
 6     X_c=X-W/2
 7     Y_c=Y-H/2
 8 
 9     X_dash=X_c*cos(theta)+Y_c*sin(theta)
10     Y_dash=-X_c*sin(theta)+Y_c*cos(theta)
11 
12     #h=exp(-0.5*((X_dash/sigmaX)**2+(Y_dash/sigmaY)**2))*cos(2*pi*X_dash/T)
13     h_aux=exp(-0.5*((X_dash/sigmaX)**2+(Y_dash/sigmaY)**2))*cos(2*pi*X_dash/T)
14     h=zeros_like(h_aux)
15     h[0:H/2,0:W/2]=h_aux[H/2:H,W/2:W]
16     h[0:H/2,W/2:W]=h_aux[H/2:H,0:W/2]
17     h[H/2:H,0:W/2]=h_aux[0:H/2,W/2:W]
18     h[H/2:H,W/2:W]=h_aux[0:H/2,0:W/2]
19 
20     return h

Para aplicar o filtro, utilizou-se a operação de correlação. Os parâmetros para a função abaixo são:

  • img: imagem original
  • : ângulo em graus referente à direção do filtro
  • : período em píxeis
  • : variância nas direções x e y
  • threshold: valor de corte para exibição dos píxeis da imagem filtrada
 1 def apply_gabor_spatial(img,theta_deg,T,sigmaX,sigmaY,threshold):
 2 
 3     H,W=img.shape[0],img.shape[1]
 4 
 5     h=gabor_spatial(W,H,theta_deg,T,sigmaX,sigmaY)
 6     #h_aux=hstack((zeros((H,1)),h))
 7     #h_aux=vstack((zeros((1,W+1)),h_aux))
 8     #h_star=h_aux[H+1:0:-1,W+1:0:-1]
 9 
10     #g=iaconv(img,h)
11 
12     Th=iadft(h)
13 
14     Th_star=Th.real-Th.imag # correlação
15     Timg=iadft(img)
16     Tg=Timg*Th_star
17     g=iaidft(Tg)
18 
19     g_aux=ianormalize(abs(g),[0,255])
20 
21     g_view=ianormalize((g_aux>=threshold),[0,255])
22     return g_view

A distância considerada entre as papilas da imagem é de 6 píxeis. Dessa maneira os parâmetros utilizados foram:

 1 f=mmreadgray('db1_a/1_1.tif')
 2 adshow(f,title='Imagem original')
 3 m=6
 4 sum_g=zeros_like(f)
 5 for k in range(1,m+1):
 6     g=apply_gabor_spatial(f,180.*(k-1)/m,6,4,4,100)
 7 
 8     adshow(g.astype(uint16), title='theta ='+str(180.*(k-1)/m)+'graus')
 9     sum_g+=g
10 
11 mean_g=(sum_g/m)
12 adshow(ianormalize(mean_g,[0,255]).astype(uint16), title='Média das imagens filtradas')

Imagem original

theta =0.0graus

theta =30.0graus

theta =60.0graus

theta =90.0graus

theta =120.0graus

theta =150.0graus

Média das imagens filtradas

Item 3

O filtro Butterworth passa-faixa de ordem é definido pela seguinte equação:

Onde , é a frequência média da faixa e é a largura radial da faixa.

O que pode-se observar é que esse filtro possui um espectro anelar. As frequências que estão dentro do anel branco são as frequências passantes.

 1 def dwsc_butterworth_bandpass(f, order, min_freq, max_freq):
 2 
 3     N,M=f.shape
 4 
 5     u,v=iameshgrid(arange(M),arange(N))
 6     D0=(min_freq+max_freq)/2
 7     W=abs(max_freq-min_freq)/2
 8     D=zeros((N,M))
 9     print N,M
10 
11     D=sqrt((u-M/2)**2+(v-N/2)**2)
12 
13     H=1.-1./(1+(D*W/(D**2-D0**2))**(2*order))
14 
15     adshow(ianormalize(H,[0,255]),title='Filtro passa-faixa')
16 
17     F=iadft(f)
18     adshow(iadftview(F),title='Espectro da imagem original')
19     G=F*iaifftshift(H)
20     adshow(iadftview(G),title='Espectro da imagem filtrada')
21     g=iaidft(G)
22 
23     return g
24 
25 g=dwsc_butterworth_bandpass(f,3,90,120)
26 adshow(g.astype(uint16),title='Imagem filtrada')
374 388

Filtro passa-faixa

Espectro da imagem original

Espectro da imagem filtrada

Imagem filtrada