jahuaman_Ex4

Item 1. Equação matemática do uso indexado imagens no Python.

Seja:

B e uma matriz cujos índices são os valores de X e Y, então:

Agora faça o seguinte:

Em seguida, definir uma nova matriz A da seguinte forma:

Ejemplo 1.1

 1 B = arange(25).reshape((5,5))
 2 print "Matriz B:",B
 3 
 4 X = array([[0,1,2],[0,1,2]])
 5 Y = array([[0,1,2],[2,1,0]])
 6 
 7 print "Matriz X:",X
 8 print "Matriz Y:",Y
 9 
10 print "Matriz A:",B[X,Y]
Matriz B: [[ 0  1  2  3  4]
 [ 5  6  7  8  9]
 [10 11 12 13 14]
 [15 16 17 18 19]
 [20 21 22 23 24]]
Matriz X: [[0 1 2]
 [0 1 2]]
Matriz Y: [[0 1 2]
 [2 1 0]]
Matriz A: [[ 0  6 12]
 [ 2  6 10]]

Item 2. Estudar a função iaffine da toolbox ia636. Ver como funciona exercitando com valores interessantes. Entender como funciona a sua codificação.

A equação utilizada é:

Exemplo 2.1

 1 #Definição de matrices de tranformação:
 2 
 3 #Translate
 4 T1 = array([[1,0,20],[0,1,40],[0,0,1]], 'd')
 5 #Rotate
 6 T2 = array([[cos(pi/4),-sin(pi/4),0],[sin(pi/4),cos(pi/4),0],[0,0,1]], 'd')
 7 #Scale
 8 T3 = array([[2,0,0],[0,0.5,0],[0,0,1]], 'd')
 9 
10 I = mmreadgray('cameraman.pgm')
11 adshow(I, title = 'imagem original')
12 
13 I1 = iaffine(I,T1)
14 adshow(I1, title = 'imagem transformada - Translate')
15 
16 I2 = iaffine(I,T2)
17 adshow(I2, title = 'imagem transformada - Rotate')
18 
19 I3 = iaffine(I,T3)
20 adshow(I3, title = 'imagem transformada - Scale')

imagem original

imagem transformada - Translate

imagem transformada - Rotate

imagem transformada - Scale

Ainda tem problemas com "Translate"

Item 3. Fazer uma nova função, utilizando o mapeamento direto.

 1 def iaffineT(f, T):
 2     m,n = f.shape
 3     x,y = meshgrid(range(n),range(m))
 4     lin1 = concatenate((concatenate((reshape(x, (1,m*n)), reshape(y, (1,m*n)))),ones((1, m*n))))
 5     lin2 = ceil(dot(T,lin1)).astype(int)
 6     xT,yT = lin2[0,:].reshape(m,n), lin2[1,:].reshape(m,n)
 7     xT = maximum(0, minimum(n-1, xT))
 8     yT = maximum(0, minimum(m-1, yT))
 9 
10     IT = zeros((m,n))
11     IT[yT,xT] = f
12     return IT
13 
14 I = mmreadgray('cameraman.pgm')
15 adshow(I, title = 'Imagem original')
16 adshow(iaffineT(I,T1), title = 'Translação: x=20, y=40')
17 adshow(iaffineT(I,T2), title = 'Rotação: theta=45 graus')
18 adshow(iaffineT(I,T3), title = 'Escala: Sx=2, Sy=0.5')

Imagem original

Translação: x=20, y=40

Rotação: theta=45 graus

Escala: Sx=2, Sy=0.5

Exemplo 3.1:

funçao imrotate(f,angle)

 1 I = mmreadgray('cameraman.pgm')
 2 adshow(I, title = 'Imagem original')
 3 
 4 def imrotate(f,theta):
 5     Trot = [[cos(theta),-sin(theta),0], [sin(theta),cos(theta),0], [0,0,1]]
 6     m,n = f.shape
 7     Tx1   = [[1,0,-m/2], [0,1,-n/2], [0,0,1]]
 8     Tx2   = [[1,0,m/2], [0,1,n/2], [0,0,1]]
 9     g = iaffineT(f,dot(dot(Tx2,Trot),Tx1))
10     return g
11 g1=imrotate(I,pi/4);
12 adshow(g1, title = 'rotate angle=45º')

Imagem original

rotate angle=45º