import numpy as np
h = np.array([[-1,0,1],
             [-2,0,2],
             [-1,0,1]])
r,c = np.nonzero(h)
print(r,c)
xx = np.transpose(np.nonzero(h))
print(xx)


"""
Explanation: Aula 5


Transformação Intensidade:

Discussão sobre os exercícios para serem entregues
Normalização com percentil
Ajuste Interativo de Contraste
Widgets interativos no Jupyter - em inglês



Exercícios para a próxima aula:

Implementar uma widget interativa do ajuste de contraste utilizando o Window e Level
Implementar a função g = normperc(f, perc), onde f é a imagem de entrada e perc é a porcentagem entre 0.0 e 1.0.



Aula 6


Transformação Geométrica:

Aprendendo Transformação Afim



Operadores de Vizinhança

Translação periódica
Convolução discreta
End of explanation
"""


import numpy as np
def ptrans(f,t):
   H,W = f.shape
   rr,cc = t
   row,col = np.indices(f.shape)
   g = f[(row-rr)%H, (col-cc)%W]
   return g

"""
Explanation: Exercícios para a próxima aula, dia 27 de abril
Entregar no folder Aula_6:
Modificações da função affine (apenas caso bidimensional):


affine_direta(f,T,domain=0)
Implementação da affine porém utilizando a transformação direta


affine2(f,T,domain=0)
affine, porém colocando zeros nos pixels que caem fora da imagem de entrada


ptrans(f,t)
onde t é uma tupla (rr,cc) informando a translação em row e col.
implementar a translação periódica, utilizando-se cópia de 4 fatiamentos
comparar com
End of explanation
"""


%matplotlib inline
import matplotlib.pyplot as plt
import matplotlib.image as mpimg
import matplotlib.colors as mpc

f = mpimg.imread('../data/boat.tif')

f_hsv = mpc.rgb_to_hsv(f)


import sys,os
homepath = os.path.abspath('/home/lotufo/Aula4_entregue/')
if homepath not in sys.path:
    sys.path.append(homepath)

! jupyter nbconvert --to 'python' /home/lotufo/Aula4_entregue/a207744_hsv_to_rgb.ipynb

import a207744_hsv_to_rgb

g = a207744_hsv_to_rgb.hsv_to_rgb(f_hsv[:,:,0],f_hsv[:,:,1],f_hsv[:,:,2])

import numpy as np
print((np.abs(g-f)).max())

"""
Explanation: Converter para ipynb e melhorar (com bons exemplos e equações) as demonstrações feitas no adessowiki:


tutorial_conv_3

tutorial_convprop_3

Notebooks que precisam ser feitos

src/ptrans
src/text
src/gshow
src/nshow
master/tutorial_conv_3
master/tutorial_convprop_3

Como testar uma função ou programa

Função: protótipo
Como testar por exemplo a rgb_hsv?
se existir uma função já pronto, pode ser comparada tanto com a colorsys como a do matplotlib
rodar as duas funções em uma imagem e comparar os resultados
comparação pode ser feita pegando o máximo erro absoluto da diferença entre os resultados


como escolher o conjunto de dados a serem testados


se não existir uma função equivalente:
testar caso numérico bem pequeno, usar o print para interpretar os resultados





Vale a pena também comparar o tempo de execução


iaprofiledemo

iaramp
iait
iagshow
iagaussian
iacos
iaisolines
iagenimages
iagengauss (difícil)

Experimento de teste de programas feitos pelos alunos
A ideia é ser possível importar a função do aluno e executá-la aqui para poder testá-la.
Para isso, é necessário que os alunos façam seus notebooks na forma da página de função da toolbox ia898.
End of explanation
"""


