jailton_ex6

Autor: jailton
Data: 23/04/2009
 1 # Considerando os polinômio de Entrada(x^3 + 4x^2 + 2)*(x^4 + 3x + 1 )=
 2 # x^7 + 4x^6 + 5x^4 + 13x^3 + 4x^2 + 6x + 2 (Polinômio de Saída-Resultado).
 3 print "--------------------------------------------"
 4 x=[1,4,0,2] # polinômio 1
 5 print "Polinômio de Entrada-1:(x^3 + 4x^2 + 2)" ;print x
 6 print "--------------------------------------------"
 7 h=[1,0,0,3,1] # polinômio 2
 8 print "Polinômio de Entrada-2:(x^4 + 3x + 1 )" ; print h
 9 y = convolve(x,h)
10 print "--------------------------------------------"
11 print "Polinômio Saída(x^7 + 4x^6 + 5x^4 + 13x^3 + 4x^2 + 6x + 2)-Após Convolução-Funçao do Python(convolve)"
12 print y
13 def jconvolucao1D(x,h):
14     y= zeros((len(x)+len(h)-1))
15     for i in range(0,len(y)):
16         y[i]=0
17         j=0
18         while (i-j)>=0:
19             if ((i-j)>=len(h) or j>=len(x)):
20                y[i]=y[i]
21                j=j+1
22             else:
23                y[i]=y[i]+x[j]*h[i-j]  # y[n] = Σx[k]·h[n-k]
24                j=j+1
25     return y
26 ys = jconvolucao1D(x,h)
27 print "Polinômio de saída:(x^7 + 4x^6 + 5x^4 + 13x^3 + 4x^2 + 6x + 2)-Após convolução-Função jconvolucao1D"
28 print ys
29 print "--------------------------------------------"
30 x=[3,4,5]
31 print "Entrada 1:"; print x
32 h=[2,1]
33 print "Entrada 2:"; print h
34 ys=jconvolucao1D(x,h)
35 print "Saída - Convolução entre a e b:"
36 print ys
--------------------------------------------
Polinômio de Entrada-1:(x^3 + 4x^2 + 2)
[1, 4, 0, 2]
--------------------------------------------
Polinômio de Entrada-2:(x^4 + 3x + 1 )
[1, 0, 0, 3, 1]
--------------------------------------------
Polinômio Saída(x^7 + 4x^6 + 5x^4 + 13x^3 + 4x^2 + 6x + 2)-Após Convolução-Funçao do Python(convolve)
[ 1  4  0  5 13  4  6  2]
Polinômio de saída:(x^7 + 4x^6 + 5x^4 + 13x^3 + 4x^2 + 6x + 2)-Após convolução-Função jconvolucao1D
[  1.   4.   0.   5.  13.   4.   6.   2.]
--------------------------------------------
Entrada 1:
[3, 4, 5]
Entrada 2:
[2, 1]
Saída - Convolução entre a e b:
[  6.  11.  14.   5.]
 1 f = mmreadgray('boat.ppm')
 2 import numpy
 3 import math
 4 fi = asmatrix(f)
 5 a=numpy.array([[1,2,0,2,3],[1,4,2,0,2],[0,1,2,3,0],[0,2,1,1,2]],float)
 6 print " Matriz Entrada 1:"; print a
 7 ker=numpy.array([[1,1,1],[1,2,1],[1,1,1]],float)
 8 print " Matriz Entrada 2:"; print ker
 9 M,N=a.shape
10 m,n=ker.shape
11 y=numpy.zeros((M,N),float)
12 for i in range(M):
13     for j in range(N):
14         y[i,j]=0
15         for k in range(m):
16             for l in range(n):
17                 if ((i+k-1)<0 or (j+l-1)<0 or (i+k-1)>=M or (j+l-1)>=N): #Considera bordas = preto=0
18                     y[i,j]=y[i,j]
19                 else:
20                     y[i,j]=y[i,j]+a[(i+k-1),(j+l-1)]*ker[k,l]
21 print "Matriz de Saída:Ápos convolução:";print y
Matriz Entrada 1:
[[ 1.  2.  0.  2.  3.]
 [ 1.  4.  2.  0.  2.]
 [ 0.  1.  2.  3.  0.]
 [ 0.  2.  1.  1.  2.]]
 Matriz Entrada 2:
[[ 1.  1.  1.]
 [ 1.  2.  1.]
 [ 1.  1.  1.]]
Matriz de Saída:Ápos convolução:
[[  9.  12.  10.  11.  10.]
 [ 10.  17.  18.  14.  12.]
 [  8.  14.  18.  16.   8.]
 [  3.   8.  11.  10.   8.]]
 1 #f = iaread('cookies.pgm')
 2 f = mmreadgray('boat.ppm')
 3 import numpy
 4 import math
 5 fi = asmatrix(f)
 6 def jconvolucao2D(a,ker):
 7     M,N=a.shape
 8     m,n=ker.shape
 9     y=numpy.zeros((M,N),float)
10     for i in range(M):
11         for j in range(N):
12             y[i,j]=0
13             for k in range(m):
14                 for l in range(n):
15                     if ((i+k-1)<0 or (j+l-1)<0 or (i+k-1)>=M or (j+l-1)>=N): #Considera bordas = preto=0
16                         y[i,j]=y[i,j]
17                     else:
18                         y[i,j]=y[i,j]+a[(i+k-1),(j+l-1)]*ker[k,l]
19     return y
20 #------------------------------------------------
21 a=numpy.array([[1,2,0,2,3],[1,4,2,0,2],[0,1,2,3,0],[0,2,1,1,2]],float)
22 print " Matriz Entrada 1:"; print a
23 ker=numpy.array([[1,1,1],[1,1,1],[1,1,1]],float)
24 print " Matriz Entrada 2:"; print ker
25 ys = jconvolucao2D(a,ker)
26 print "Matriz de saída:Após convolução:";print ys
27 #------------------------------------------------
28 a=fi
29 mmshow(a,title = "Imagem Entrada:")
30 ker=array([[0.1111,0.1111,0.1111],[0.1111,0.1111,0.1111],[0.1111,0.1111,0.1111]])  # Kernel 3x3-Média
31 ys=jconvolucao2D(a,ker)
32 mmshow(ys,title = "Imagem de Saída-Após convoulção(kernel 3x3-Média:")
33 #------------------------------------------------
34 a=fi
35 ker=array([[0.0625,0.125,0.0625],[0.125,0.250,0.125],[0.0625,0.125,0.0625]])  # Kernel 3x3-Média
36 ys=jconvolucao2D(a,ker)
37 mmshow(ys,title = "Imagem de Saída-Após convolução(kernel 3x3-Média-Gaussiana:")
38 #------------------------------------------------
39 a=fi
40 ker=array([[-1.000,-1.000,-1.000],[-1.000,8.000,-1.000],[-1.000,-1.000,-1.000]])  # Kernel 3x3-Laplaciano
41 ys=jconvolucao2D(a,ker)
42 mmshow((ianormalize(ys, [0,255])),title = "Imagem de Saída-Após convolução(kernel 3x3-Laplaciano:")
43 #------------------------------------------------
44 a=fi
45 ker=array([[-1.000,-1.000,-1.000],[-1.000,10.000,-1.000],[-1.000,-1.000,-1.000]])  # Kernel 3x3 - A=2
46 ys=jconvolucao2D(a,ker)
47 mmshow(ys,title = "Imagem de Saída-Após convolução(kernel 3x3 - A=2:")
Matriz Entrada 1:
[[ 1.  2.  0.  2.  3.]
 [ 1.  4.  2.  0.  2.]
 [ 0.  1.  2.  3.  0.]
 [ 0.  2.  1.  1.  2.]]
 Matriz Entrada 2:
[[ 1.  1.  1.]
 [ 1.  1.  1.]
 [ 1.  1.  1.]]
Matriz de saída:Após convolução:
[[  8.  10.  10.   9.   7.]
 [  9.  13.  16.  14.  10.]
 [  8.  13.  16.  13.   8.]
 [  3.   6.  10.   9.   6.]]
Warning: downcasting image from double to uint16 (may lose precision)
Warning: downcasting image from double to uint16 (may lose precision)
Warning: downcasting image from double to uint16 (may lose precision)
Warning: downcasting image from double to uint16 (may lose precision)

Imagem Entrada:

Imagem de Saída-Após convoulção(kernel 3x3-Média:

Imagem de Saída-Após convolução(kernel 3x3-Média-Gaussiana:

Imagem de Saída-Após convolução(kernel 3x3-Laplaciano:

Imagem de Saída-Após convolução(kernel 3x3 - A=2: