daniel_chiu_Ex10

Autor: daniel_chiu
Data: 27/05/2009

Item 1 - Implementação do filtro de Gabor

No domínio espacial

A equação do filtro de Gabor é a seguinte:

Onde , .

O filtro é composto por um envelope Gaussiano, de desvios e , modulado por uma senóide de frequência ao redor do eixo x rotacionado por um ângulo

Nesta implementação, o ângulo é dado em graus e o período

 1 def gabor_spatial(W,theta_deg,T,sigmaX,sigmaY):
 2 
 3     X,Y=iameshgrid(arange(W),arange(W))
 4     theta=theta_deg*pi/180
 5 
 6     # centralização do filtro
 7     X_c=X-W/2
 8     Y_c=Y-W/2
 9 
10     # rotação dos eixos x e y
11     X_dash=X_c*cos(theta)+Y_c*sin(theta)
12     Y_dash=-X_c*sin(theta)+Y_c*cos(theta)
13 
14     h=exp(-0.5*((X_dash/sigmaX)**2+(Y_dash/sigmaY)**2))*cos(2*pi*X_dash/T)
15 
16     return h
17 
18 def gabor_frequency(W,theta_deg,T,sigmaX,sigmaY):
19 
20     h=gabor_spatial(W,theta_deg,T,sigmaX,sigmaY)
21     H=iadft(h)
22 
23     return H

Para

Filtro de Gabor no domínio espacial

Filtro de Gabor no domínio da frequência

Para

Filtro de Gabor no domínio espacial

Filtro de Gabor no domínio da frequência

Para

Filtro de Gabor no domínio espacial

Filtro de Gabor no domínio da frequência

Para

Filtro de Gabor no domínio espacial

Filtro de Gabor no domínio da frequência

Para

Filtro de Gabor no domínio espacial

Filtro de Gabor no domínio da frequência

Para

Filtro de Gabor no domínio espacial

Filtro de Gabor no domínio da frequência

Item 2 - Aplicação do filtro de Gabor

A aplicação do filtro de Gabor foi feita como indicada no artigo. O filtro foi aplicado bloco a bloco, cujo tamanho é WxW.

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

Na equação acima, foi feita uma operação de correlação em cima da imagem, o que equivale à convolução da imagem com o filtro conjugado.

 1 def apply_gabor_spatial(img,W,theta_deg,T,sigmaX,sigmaY):
 2 
 3     h=gabor_spatial(W,theta_deg,T,sigmaX,sigmaY)
 4     h_aux=hstack((zeros((W,1)),h))
 5     h_aux=vstack((zeros((1,W+1)),h_aux))
 6     h_star=h_aux[W+1:0:-1,W+1:0:-1]
 7 
 8     g=iaconv(img,h_star)
 9     g=g[W/2:img.shape[0]+W/2,W/2:img.shape[1]+W/2]
10 
11     return g

Neste exemplo, foram utilizados

 1 f=mmreadgray('db1_a/1_1.tif')
 2 m=8
 3 sum_g=zeros_like(f)
 4 for k in range(1,m+1):
 5     g=apply_gabor_spatial(f,16,180.*(k-1)/m,50,10,10)
 6     g=abs(g)
 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')

theta =0.0graus

theta =22.5graus

theta =45.0graus

theta =67.5graus

theta =90.0graus

theta =112.5graus

theta =135.0graus

theta =157.5graus

Média das imagens filtradas