lionisEX09

Autor: lionis
Data: 21/05/2009

Demonstração do filtro no domínio da frequência

Código de barras

1 imgBarCode = mmreadgray('Attachments/ia636-2009/exercicio9/barcode.tif')
2 F_barcode = iadft(imgBarCode)
3 Fv_barcode = iadftview(F_barcode)
4 
5 adshow(imgBarCode,title='Código de barras')
6 adshow(ianormalize(Fv_barcode, [0,255]),title='Transformada da imagem')

Código de barras

Transformada da imagem

Impressão digital

1 imgFingerPrint = mmreadgray('db1_a/1_1.tif')
2 F_fingerprint = iadft(imgFingerPrint)
3 Fv_fingerprint = iadftview(F_fingerprint)
4 
5 adshow(imgFingerPrint,title='Impressão digital')
6 adshow(ianormalize(Fv_fingerprint, [0,255]),title='Transformada da imagem')

Impressão digital

Transformada da imagem

Filtros

 1 def circleIdealLowPass(filter_size, radius):
 2     h,w = filter_size[0],filter_size[1]
 3 
 4     hm = round(float(h)/2)
 5     wm = round(float(w)/2)
 6 
 7     return iacircle(filter_size, radius, [hm,wm])*1
 8 
 9 def circleIdealHighPass(filter_size, radius):
10     filter = circleIdealLowPass(filter_size, radius)
11 
12     filter = 1 - filter
13 
14     return filter
15 
16 def squareIdealLowPass(filter_size, square_size):
17     h,w = filter_size[0],filter_size[1]
18 
19     filter = zeros((h,w))
20 
21     hm = round(float(h)/2)
22     wm = round(float(w)/2)
23     sm = round(float(square_size)/2)
24 
25     filter[hm-sm:hm+sm, wm-sm:wm+sm] = 1
26 
27     return filter
28 
29 def squareIdealHighPass(filter_size, square_size):
30     filter = squareIdealLowPass(filter_size, square_size)
31 
32     filter = 1 - filter
33 
34     return filter
35 
36 def butterworthLowPass(filter_size,D0,n):
37     w,h = filter_size[0], filter_size[1]
38     (u, v) = meshgrid(range(h), range(w))
39     D = sqrt((u-h/2)**2 + (v-w/2)**2)
40 
41     return (1 / ( 1 + (D/D0)**(2*n) ))
42 
43 def butterworthHighPass(filter_size,D0,n):
44     filter = butterworthLowPass(filter_size,D0,n)
45 
46     filter = 1 - filter
47 
48     return filter
1 adshow(ianormalize(squareIdealLowPass([200,200], 50),[0,255]),title='Filtro quadrado passa-baixa ideal')
2 adshow(ianormalize(squareIdealHighPass([200,200], 50),[0,255]),title='Filtro quadrado passa-alta ideal')
3 adshow(ianormalize(circleIdealLowPass([200,200], 50),[0,255]),title='Filtro circular passa-baixa ideal')
4 adshow(ianormalize(circleIdealHighPass([200,200], 50),[0,255]),title='Filtro circular passa-alta ideal')
5 adshow(ianormalize(butterworthLowPass([200,200],50,1),[0,255]),title='Filtro butterworth passa-baixa')
6 adshow(ianormalize(butterworthHighPass([200,200],50,1),[0,255]),title='Filtro butterworth passa-alta')

Filtro quadrado passa-baixa ideal

Filtro quadrado passa-alta ideal

Filtro circular passa-baixa ideal

Filtro circular passa-alta ideal

Filtro butterworth passa-baixa

Filtro butterworth passa-alta

 1 Fv_barcode_lowpass1 = Fv_barcode*squareIdealLowPass(Fv_barcode.shape,75)
 2 Fv_barcode_lowpass2 = Fv_barcode*circleIdealLowPass(Fv_barcode.shape,75)
 3 Fv_barcode_highpass1 = Fv_barcode*squareIdealHighPass(Fv_barcode.shape,75)
 4 Fv_barcode_highpass2 = Fv_barcode*circleIdealHighPass(Fv_barcode.shape,75)
 5 Fv_barcode_butterworthLowpass = Fv_barcode*butterworthLowPass(Fv_barcode.shape,50,1)
 6 Fv_barcode_butterworthHighpass = Fv_barcode*butterworthHighPass(Fv_barcode.shape,50,1)
 7 
 8 adshow(Fv_barcode_lowpass1,title='Código de barras com filtro passa-baixa quadrado')
 9 adshow(Fv_barcode_lowpass2,title='Código de barras com filtro passa-baixa circular')
10 adshow(Fv_barcode_highpass1,title='Código de barras com filtro passa-alta quadrado')
11 adshow(Fv_barcode_highpass2,title='Código de barras com filtro passa-alta circular')
12 adshow(Fv_barcode_butterworthLowpass,title='Código de barras com filtro butterworth passa-baixa')
13 adshow(Fv_barcode_butterworthHighpass,title='Código de barras com filtro butterworth passa-alta')
14 
15 adshow(ianormalize(abs(iaidft(F_barcode*iaifftshift(squareIdealLowPass(F_barcode.shape,75)))),[0,255]),title='Transformada inversa com o filtro passa-baixa quadrado')
16 adshow(ianormalize(abs(iaidft(F_barcode*iaifftshift(circleIdealLowPass(F_barcode.shape,75)))),[0,255]),title='Transformada inversa com o filtro passa-baixa circular')
17 adshow(ianormalize(abs(iaidft(F_barcode*iaifftshift(squareIdealHighPass(F_barcode.shape,75)))),[0,255]),title='Transformada inversa com o filtro passa-alta quadrado')
18 adshow(ianormalize(abs(iaidft(F_barcode*iaifftshift(circleIdealHighPass(F_barcode.shape,75)))),[0,255]),title='Transformada inversa com o filtro passa-alta circular')
19 adshow(ianormalize(abs(iaidft(F_barcode*iaifftshift(butterworthLowPass(F_barcode.shape,50,1)))),[0,255]),title='Transformada inversa com o filtro butterworth passa-baixa')
20 adshow(ianormalize(abs(iaidft(F_barcode*iaifftshift(butterworthHighPass(F_barcode.shape,50,1)))),[0,255]),title='Transformada inversa com o filtro butterworth passa-alta')

Código de barras com filtro passa-baixa quadrado

Código de barras com filtro passa-baixa circular

Código de barras com filtro passa-alta quadrado

Código de barras com filtro passa-alta circular

Código de barras com filtro butterworth passa-baixa

Código de barras com filtro butterworth passa-alta

Transformada inversa com o filtro passa-baixa quadrado

Transformada inversa com o filtro passa-baixa circular

Transformada inversa com o filtro passa-alta quadrado

Transformada inversa com o filtro passa-alta circular

Transformada inversa com o filtro butterworth passa-baixa

Transformada inversa com o filtro butterworth passa-alta

 1 Fv_fingerprint_lowpass1 = Fv_fingerprint*squareIdealLowPass(Fv_fingerprint.shape,75)
 2 Fv_fingerprint_lowpass2 = Fv_fingerprint*circleIdealLowPass(Fv_fingerprint.shape,60)
 3 Fv_fingerprint_highpass1 = Fv_fingerprint*squareIdealHighPass(Fv_fingerprint.shape,75)
 4 Fv_fingerprint_highpass2 = Fv_fingerprint*circleIdealHighPass(Fv_fingerprint.shape,60)
 5 Fv_fingerprint_butterworthLowpass = Fv_fingerprint*butterworthLowPass(Fv_fingerprint.shape,50,1)
 6 Fv_fingerprint_butterworthHighpass = Fv_fingerprint*butterworthHighPass(Fv_fingerprint.shape,50,1)
 7 
 8 adshow(Fv_fingerprint_lowpass1,title='Código de barras com filtro passa-baixa quadrado')
 9 adshow(Fv_fingerprint_lowpass2,title='Código de barras com filtro passa-baixa circular')
10 adshow(Fv_fingerprint_highpass1,title='Código de barras com filtro passa-alta quadrado')
11 adshow(Fv_fingerprint_highpass2,title='Código de barras com filtro passa-alta circular')
12 adshow(Fv_fingerprint_butterworthLowpass,title='Impressão digital com filtro butterworth passa-baixa')
13 adshow(Fv_fingerprint_butterworthHighpass,title='Impressão digital com filtro butterworth passa-alta')
14 
15 adshow(ianormalize(abs(iaidft(F_fingerprint*iaifftshift(squareIdealLowPass(F_fingerprint.shape,75)))),[0,255]),title='Transformada inversa com o filtro passa-baixa quadrado')
16 adshow(ianormalize(abs(iaidft(F_fingerprint*iaifftshift(circleIdealLowPass(F_fingerprint.shape,75)))),[0,255]),title='Transformada inversa com o filtro passa-baixa circular')
17 adshow(ianormalize(abs(iaidft(F_fingerprint*iaifftshift(squareIdealHighPass(F_fingerprint.shape,75)))),[0,255]),title='Transformada inversa com o filtro passa-alta quadrado')
18 adshow(ianormalize(abs(iaidft(F_fingerprint*iaifftshift(circleIdealHighPass(F_fingerprint.shape,75)))),[0,255]),title='Transformada inversa com o filtro passa-alta circular')
19 adshow(ianormalize(abs(iaidft(F_fingerprint*iaifftshift(butterworthLowPass(F_fingerprint.shape,50,1)))),[0,255]),title='Transformada inversa com o filtro butterworth passa-baixa')
20 adshow(ianormalize(abs(iaidft(F_fingerprint*iaifftshift(butterworthHighPass(F_fingerprint.shape,50,1)))),[0,255]),title='Transformada inversa com o filtro butterworth passa-alta')

Código de barras com filtro passa-baixa quadrado

Código de barras com filtro passa-baixa circular

Código de barras com filtro passa-alta quadrado

Código de barras com filtro passa-alta circular

Impressão digital com filtro butterworth passa-baixa

Impressão digital com filtro butterworth passa-alta

Transformada inversa com o filtro passa-baixa quadrado

Transformada inversa com o filtro passa-baixa circular

Transformada inversa com o filtro passa-alta quadrado

Transformada inversa com o filtro passa-alta circular

Transformada inversa com o filtro butterworth passa-baixa

Transformada inversa com o filtro butterworth passa-alta