jailton_Ex12

Autor: jailton
Data: 10/06/2009

I - Estudos

Estudar a função iaresise da toolbox: ia636:iaresize: descobrir qual é a interpolação que é usada.

Resizes an image.

  • g = iaresize(f, new_shape)

    o g: Image. o f: Image. o new_shape: Image. [h w], new image dimensions

Estudar interpolação no domínio da frequência:

II - Exercícios

  • 1-Fazer a demonstração da redução no Adessowiki, inspirado na demonstração feita no Khoros acima.
  • 2-Criar uma nova função iaresize que seja a função atual melhorada, com um parâmetro adicional do tipo de interpolação
  • e incluir a interpolação Butterworth (domínio da frequência),
  • que pode ser inspirada na solução de ano anterior.
  • Fazer uma página que seria igual a iaresize, para ser substituída, contendo todos os campos de uma função: descrição, exemplos numéricos e de imagens, equações, etc.
 1 f=[[2,3,4],[6,7,8],[9,10,11]]
 2 g1 = iaresize(f,[10,10])
 3 g2 = iaresize(f,[20,20])
 4 a=g2[5:10,10:15]
 5 b=numpy.zeros((10,10))
 6 b[::2,::2] = 1
 7 print "Entrada"; print f
 8 print "Saída1"; print g1
 9 print "Saída2"; print g2
10 print "Saída a"; print a
11 print "Saída b"; print b
Entrada
[[2, 3, 4], [6, 7, 8], [9, 10, 11]]
Saída1
[[ 2  2  2  2  3  3  3  3  4  4]
 [ 2  2  2  2  3  3  3  3  4  4]
 [ 2  2  2  2  3  3  3  3  4  4]
 [ 2  2  2  2  3  3  3  3  4  4]
 [ 6  6  6  6  7  7  7  7  8  8]
 [ 6  6  6  6  7  7  7  7  8  8]
 [ 6  6  6  6  7  7  7  7  8  8]
 [ 6  6  6  6  7  7  7  7  8  8]
 [ 9  9  9  9 10 10 10 10 11 11]
 [ 9  9  9  9 10 10 10 10 11 11]]
Saída2
[[ 2  2  2  2  2  2  2  2  2  3  3  3  3  3  3  3  4  4  4  4]
 [ 2  2  2  2  2  2  2  2  2  3  3  3  3  3  3  3  4  4  4  4]
 [ 2  2  2  2  2  2  2  2  2  3  3  3  3  3  3  3  4  4  4  4]
 [ 2  2  2  2  2  2  2  2  2  3  3  3  3  3  3  3  4  4  4  4]
 [ 2  2  2  2  2  2  2  2  2  3  3  3  3  3  3  3  4  4  4  4]
 [ 2  2  2  2  2  2  2  2  2  3  3  3  3  3  3  3  4  4  4  4]
 [ 2  2  2  2  2  2  2  2  2  3  3  3  3  3  3  3  4  4  4  4]
 [ 2  2  2  2  2  2  2  2  2  3  3  3  3  3  3  3  4  4  4  4]
 [ 2  2  2  2  2  2  2  2  2  3  3  3  3  3  3  3  4  4  4  4]
 [ 6  6  6  6  6  6  6  6  6  7  7  7  7  7  7  7  8  8  8  8]
 [ 6  6  6  6  6  6  6  6  6  7  7  7  7  7  7  7  8  8  8  8]
 [ 6  6  6  6  6  6  6  6  6  7  7  7  7  7  7  7  8  8  8  8]
 [ 6  6  6  6  6  6  6  6  6  7  7  7  7  7  7  7  8  8  8  8]
 [ 6  6  6  6  6  6  6  6  6  7  7  7  7  7  7  7  8  8  8  8]
 [ 6  6  6  6  6  6  6  6  6  7  7  7  7  7  7  7  8  8  8  8]
 [ 6  6  6  6  6  6  6  6  6  7  7  7  7  7  7  7  8  8  8  8]
 [ 9  9  9  9  9  9  9  9  9 10 10 10 10 10 10 10 11 11 11 11]
 [ 9  9  9  9  9  9  9  9  9 10 10 10 10 10 10 10 11 11 11 11]
 [ 9  9  9  9  9  9  9  9  9 10 10 10 10 10 10 10 11 11 11 11]
 [ 9  9  9  9  9  9  9  9  9 10 10 10 10 10 10 10 11 11 11 11]]
Saída a
[[3 3 3 3 3]
 [3 3 3 3 3]
 [3 3 3 3 3]
 [3 3 3 3 3]
 [7 7 7 7 7]]
Saída b
[[ 1.  0.  1.  0.  1.  0.  1.  0.  1.  0.]
 [ 0.  0.  0.  0.  0.  0.  0.  0.  0.  0.]
 [ 1.  0.  1.  0.  1.  0.  1.  0.  1.  0.]
 [ 0.  0.  0.  0.  0.  0.  0.  0.  0.  0.]
 [ 1.  0.  1.  0.  1.  0.  1.  0.  1.  0.]
 [ 0.  0.  0.  0.  0.  0.  0.  0.  0.  0.]
 [ 1.  0.  1.  0.  1.  0.  1.  0.  1.  0.]
 [ 0.  0.  0.  0.  0.  0.  0.  0.  0.  0.]
 [ 1.  0.  1.  0.  1.  0.  1.  0.  1.  0.]
 [ 0.  0.  0.  0.  0.  0.  0.  0.  0.  0.]]
 1 #------------------------------------------
 2 # Imagem Reduzida sem interpolação
 3 #------------------------------------------
 4 from numpy import mgrid,meshgrid
 5 from numpy.fft import fft2,ifft2,fftshift
 6 f = mmreadgray('boat.ppm')
 7 adshow(f, title = "Imagem de Entrada")
 8 fuv = fft2(f)
 9 iashow(uint16(iadftview(fuv)),title = "Imagem no domínio da frequencia")
10 freducao=2
11 M,N = f.shape
12 Impulso = numpy.zeros((M,N))
13 Impulso[::freducao,::freducao] = 1
14 iashow(uint16(Impulso),title = "Impulso-dominio espacial")
15 Imagalterada = f*Impulso
16 iashow(uint16(Imagalterada), title = "Imagem alterada-após amostragem")
17 Ialteradauv = fft2(Imagalterada)
18 iashow(uint16(iadftview(Ialteradauv)),title = "Imagem alterada domínio da frequencia")
19 xi = M/(2*freducao);dx = 2*xi
20 yi = N/(2*freducao);dy = 2*yi
21 print xi;print dx;print yi;print dy
22 ImReduzida = Ialteradauv[xi:(xi+dx),yi:(yi+dy)]
23 iashow(uint16(iadftview(ImReduzida)), title = "Imagem Reduzida-D. Frequência")
24 ImReduzidaxy1=abs(ifft2(ImReduzida))
25 iashow(uint16(ImReduzidaxy1),title = "Sem Interpolação-Imagem Reduzida a " + str(1.00/freducao*100)+ "%")
26 #------------------------------------------
27 # Imagem Reduzida com interpolação - (Passar a imagem de entrada por um filtro passa-baixa)
28 #------------------------------------------
29 FPB = iacircle([M,N],xi, [M/2,N/2])  # Filtro passa-baixa (ideal)
30 ImgFPB=fuv*fftshift(FPB)
31 iashow(uint16(iadftview(ImgFPB)),title = "Imagem no domínio da freq.-após FPB")
32 fxy=abs(ifft2(ImgFPB))
33 iashow(uint16(fxy),title = "Imagem no domínio espacial-após FPB")
34 Imagalterada = fxy*Impulso
35 iashow(uint16(Imagalterada), title = "Imagem alterada-após amostragem")
36 Ialteradauv = fft2(Imagalterada)
37 iashow(uint16(iadftview(Ialteradauv)),title = "Imagem alterada domínio da frequencia")
38 ImReduzida = Ialteradauv[xi:(xi+dx),yi:(yi+dy)]
39 iashow(uint16(iadftview(ImReduzida)), title = "Imagem Reduzida-D. Frequência")
40 ImReduzidaxy2=abs(ifft2(ImReduzida))
41 iashow(uint16(ImReduzidaxy2),title = "Com Interpolação-Imagem Reduzida a " + str(1.00/freducao*100)+ "%")
42 #------------------------------------------
43 # Comparação entre as Imagens Reduzidas com interpolação e sem interpolação
44 #------------------------------------------
45 iashow(uint16(ImReduzidaxy1),title = "Sem Interpolação-Imagem Reduzida a " + str(1.00/freducao*100)+ "%")
46 iashow(uint16(ianormalize((ImReduzidaxy1-ImReduzidaxy2),[0,255])),title = "Imagem Diferença ")
64
128
64
128

Imagem de Entrada

Imagem no domínio da frequencia

Impulso-dominio espacial

Imagem alterada-após amostragem

Imagem alterada domínio da frequencia

Imagem Reduzida-D. Frequência

Sem Interpolação-Imagem Reduzida a 50.0%

Imagem no domínio da freq.-após FPB

Imagem no domínio espacial-após FPB

Imagem alterada-após amostragem

Imagem alterada domínio da frequencia

Imagem Reduzida-D. Frequência

Com Interpolação-Imagem Reduzida a 50.0%

Sem Interpolação-Imagem Reduzida a 50.0%

Imagem Diferença

 1 #------------------------------------------
 2 # Imagem - Expansão (Ampliação)
 3 #------------------------------------------
 4 from numpy import mgrid,meshgrid
 5 from numpy.fft import fft2,ifft2,fftshift
 6 f = mmreadgray('boat.ppm')
 7 # Ampliação sem interpolação
 8 xi=128;dx=64
 9 yi=128;dy=64
10 Regiaof = f[xi:(xi+dx),yi:(yi+dy)]
11 adshow(f, title = "Imagem de Entrada")
12 adshow(Regiaof, title = "Região da Imagem a ser ampliada")
13 fuv = fft2(Regiaof)
14 iashow(uint16(iadftview(fuv)),title = "Região-I. no dom. da frequencia")
15 fatorampli=4
16 Rampli=numpy.zeros((fatorampli*dx,fatorampli*dy))
17 Rampli[::fatorampli,::fatorampli] = Regiaof
18 adshow(Rampli, title = "Região ampliada de " + str(fatorampli*100.0) +" %")
19 fuv = fft2(Rampli)
20 iashow(uint16(iadftview(fuv)),title = "Região Ampliada-I. no dom. da frequencia = " + str(fatorampli*100.0) + " %")
21 # Ampliação com interpolação
22 kernel = numpy.ones((4,4))
23 RampliK = iapconv(Rampli,kernel)
24 adshow(uint16(RampliK), title = "C. interpolação(pixel mais prox.-Região ampliada de " + str(fatorampli*100.0) + " %")
25 # Ampliação com interpolação linear-kernel piramidal
26 klinear = array([1,2,3,4,3,2,1])/4.0
27 k2dlinear = dot(reshape(klinear, (7,1)), reshape(klinear, (1,7)))
28 RampliK = iapconv(Rampli,k2dlinear)
29 adshow(uint16(RampliK), title = "Interpolação linear-kernel piramidal  " + str(fatorampli*100.0) + " %")

Imagem de Entrada

Região da Imagem a ser ampliada

Região-I. no dom. da frequencia

Região ampliada de 400.0 %

Região Ampliada-I. no dom. da frequencia = 400.0 %

C. interpolação(pixel mais prox.-Região ampliada de 400.0 %

Interpolação linear-kernel piramidal 400.0 %