Ex10: Filtro Gabor

Autor: jahuaman
Data: 26/05/2009

Item 1. Implementar o filtro de Gabor, tanto no domínio da frequência como no domínio espacial

Os filtros de Gabor têm sido utilizados para a representação de imagens. Através de um conjunto de classes de funções de Gabor é possível representar de forma completa (freqüência e orientação) qualquer tipo de imagem. Essas classes de funções são geradas a partir de uma função de Gabor principal As funções utilizadas nos filtros de Gabor são senóides complexas e bidimensionais modeladas por uma função Gaussiana também bidimensional. Essas funções têm como objetivo extrair atributos para caracterizar diferentes tipos de texturas presentes na imagem, que são descritas pela freqüência e orientação já definidas pelas funções senoidais

Os filtros de Gabor ou núcleos de Gabor permitem a manipulação de diversos parâmetros como freqüência, orientação, excentricidade e simetria. Através dessas várias combinações são formados os bancos de filtros de Gabor

A ecuação no domínio espacial e:

onde:

Os parâmetros dos filtros de Gabor possuem as seguintes propriedades:

  • θ: Especifica o ângulo de inclinação das ondas paralelas do filtro.
  • σx,σy: Determina o desvio padrão da distribuição normal, e está relacionado com a largura da Gaussiana que modula o filtro
1 g1 = iacos([100,200], 12.5*sqrt(2), pi/4, 0)
2 iashow(uint16(ianormalize((g1), [0,255])), title='Imagen Cossenoidal')
3 
4 g2 = GausianaXY(200,100, 100, 50, 10, 10)
5 mmshow(uint16(g2),title='img - Imagen Gaussiana')
6 
7 g3=g1*g2;
8 iashow(uint16(ianormalize((g3), [0,255])), title='Gabor')

Imagen Cossenoidal

img - Imagen Gaussiana

Gabor

Implementación

1 def FiltroGabor(X,Y, Theta, f, SigmaX, SigmaY):
2     (x,y) = iameshgrid(arange(-X/2, X/2), arange(-Y/2,Y/2))
3     xTheta=  x*cos(Theta) +y*sin(Theta)
4     yTheta= -x*sin(Theta) +y*cos(Theta)
5     h=exp(-1./2*((xTheta**2)/(SigmaX**2) + (yTheta**2)/(2*SigmaY**2)))* cos(2*pi*f*xTheta)
6     return h
7 
8 g = FiltroGabor( 200, 100, pi/4, sqrt(2)/25, 10, 10)
9 iashow(uint16(ianormalize(g,[0,255])), title='Filtro Gabor')

Filtro Gabor

No domínio da frequência temos:

1 G=iadft(g)
2 iashow(iadftview(G),title='Filtro de Gabor - Dominio da Frequencia')

Filtro de Gabor - Dominio da Frequencia

Banco de filtros

Temos 12 filtros de gabor com 1 freqüências e 6 orientações: (0º,30º,60º,90º,120º,150º) com DFT

 1 h1 = FiltroGabor( 100, 100, 0, sqrt(2)/12.5, 10, 10)
 2 iashow(uint16(ianormalize(h1,[0,255])), title='Filtro Gabor 1')
 3 h2 = FiltroGabor( 100, 100, pi/6, sqrt(2)/12.5, 10, 10)
 4 iashow(uint16(ianormalize(h2,[0,255])), title='Filtro Gabor 2')
 5 h3 = FiltroGabor( 100, 100, pi/3, sqrt(2)/12.5, 10, 10)
 6 iashow(uint16(ianormalize(h3,[0,255])), title='Filtro Gabor 3')
 7 h4 = FiltroGabor( 100, 100, pi/2, sqrt(2)/12.5, 10, 10)
 8 iashow(uint16(ianormalize(h4,[0,255])), title='Filtro Gabor 4')
 9 h5 = FiltroGabor( 100, 100, 2*pi/3, sqrt(2)/12.5, 10, 10)
10 iashow(uint16(ianormalize(h5,[0,255])), title='Filtro Gabor 5')
11 h6 = FiltroGabor( 100, 100, 5*pi/6, sqrt(2)/12.5, 10, 10)
12 iashow(uint16(ianormalize(h6,[0,255])), title='Filtro Gabor 6')
13 H1 = iadft(h1)
14 iashow(iadftview(H1),title='Filtro Gabor 1- Dominio da Frequencia')
15 H2 = iadft(h2)
16 iashow(iadftview(H2),title='Filtro Gabor 2- Dominio da Frequencia')
17 H3 = iadft(h3)
18 iashow(iadftview(H3),title='Filtro Gabor 3- Dominio da Frequencia')
19 H4 = iadft(h4)
20 iashow(iadftview(H4),title='Filtro Gabor 4- Dominio da Frequencia')
21 H5 = iadft(h5)
22 iashow(iadftview(H5),title='Filtro Gabor 5- Dominio da Frequencia')
23 H6 = iadft(h6)
24 iashow(iadftview(H6),title='Filtro Gabor 6- Dominio da Frequencia')
25 iashow(iadftview(H1+H2+H3+H4+H5+H6),title='Soma dos Filtros - Dominio da Frequencia')

Filtro Gabor 1

Filtro Gabor 2

Filtro Gabor 3

Filtro Gabor 4

Filtro Gabor 5

Filtro Gabor 6

Filtro Gabor 1- Dominio da Frequencia

Filtro Gabor 2- Dominio da Frequencia

Filtro Gabor 3- Dominio da Frequencia

Filtro Gabor 4- Dominio da Frequencia

Filtro Gabor 5- Dominio da Frequencia

Filtro Gabor 6- Dominio da Frequencia

Soma dos Filtros - Dominio da Frequencia

Item 2. Aplicar o filtro de Gabor em diversas direções e classificar a orientação das regiões do fingerprint

Aplicação do Filtro Gabor

Temos a imagem de impressão digital db1_a/1_1.tif e a DFT da imagem:

1 f =adreadgray('db1_a/1_1.tif')
2 iashow(f,title='Imagem de impressão digital db1_a/1_1.tif')
3 W,L = f.shape
4 F = iadft(f)
5 iashow(iadftview(F),title='DFT da imagen de impressão')

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

DFT da imagen de impressão

Clasificação das regiões do fingerprint

orientação 0º :

1 h1 = FiltroGabor(388, 374, 0 , sqrt(2)/12.5, 10, 10)
2 iashow(uint16(ianormalize(h1,[0,255])), title='Filtro Gabor 1')
3 H1 = iadft(h1)
4 G1=F*H1
5 #iashow( iadftview(G1), title='Dominio da Frequencia - orientação: 0º')
6 g1=abs(iaidft(G1))
7 iashow(ianormalize(iaifftshift(g1),[0,255]),title='Imagem Filtrada pelo h1')
8 iashow(ianormalize(iaifftshift(g1),[0,255])>120,title='Imagem Filtrada com umbral=80')
Warning: downcasting image from double to uint16 (may lose precision)

Filtro Gabor 1

Imagem Filtrada pelo h1

Imagem Filtrada com umbral=80

orientação 30º :

1 h2 = FiltroGabor(388, 374, pi/6 , sqrt(2)/12.5, 10, 10)
2 iashow(uint16(ianormalize(h1,[0,255])), title='Filtro Gabor 2')
3 H2 = iadft(h2)
4 G2=F*H2
5 #iashow( iadftview(G2), title='Dominio da Frequencia - orientação: 30º')
6 g2=abs(iaidft(G2))
7 iashow(ianormalize(iaifftshift(g2),[0,255]),title='Imagem Filtrada pelo h2, 30º, T=8.83')
8 iashow(ianormalize(iaifftshift(g2),[0,255])>120,title='Imagem Filtrada com umbral=120')
Warning: downcasting image from double to uint16 (may lose precision)

Filtro Gabor 2

Imagem Filtrada pelo h2, 30º, T=8.83

Imagem Filtrada com umbral=120

Outras orientações, Periodos e umbral:

Warning: downcasting image from double to uint16 (may lose precision)

Filtro Gabor

Imagem Filtrada pelo h

Imagem Filtrada com umbral