#coding=utf-8
import numpy as np
import lib.readwrite as rw

image1 = rw.readImage('../images/ruido1.jpg',True)
image2 = rw.readImage('../images/ruido2.jpg',True)
image3 = rw.readImage('../images/ruido3.jpg',True)

M = image1.shape[0]
N = image2.shape[1]

final_image = np.zeros((M,N), dtype = 'uint8')

for i in range(0,M):
    for j in range(0,N):
        
        value = np.uint16(image1[i,j]) + np.uint16(image2[i,j]) + np.uint16(image3[i,j])
        final_image[i,j]  = np.uint8(value/3)

rw.writeImage('../images/ruidofinal.jpg',final_image)
def main():

    # LETRA A:
    # Aplicando negativos naslimagens:
    
    img1 = rw.readImage('imgs/img1.jpg',False)
    img1 = e.imagemNegativa(img1)
    rw.writeImage('imgs/img1-negativo.jpg',img1)
    
    img2 = rw.readImage('imgs/img2.jpg',False)
    img2 = e.imagemNegativa(img2)
    rw.writeImage('imgs/img2-negativo.jpg',img2)
    
    img3 = rw.readImage('imgs/img3.jpg',False)
    img3 = e.imagemNegativa(img3)
    rw.writeImage('imgs/img3-negativo.jpg',img3)
    
    # LETRA B
    # Mapeamento dos níveis de cinza de 0 a 255

    img = rw.readImage('imgs/img1.jpg',False)
    img255 = e.transformacaoLinear(img,0,255)
    rw.writeImage('imgs/img1-0a255.jpg',img255)
    
    # LETRA C
    # Mapeamento dos níveis de cinza de 100 a 200
    
    img = rw.readImage('imgs/img1.jpg',False)
    img1100 = e.transformacaoLinear(img,100,200)
    rw.writeImage('imgs/img1-100a200.jpg',img1100)
    
    img = rw.readImage('imgs/img2.jpg',False)
    img2100 = e.transformacaoLinear(img,100,200)
    rw.writeImage('imgs/img2-100a200.jpg',img2100)
    
    img = rw.readImage('imgs/img3.jpg',False)
    img3100 = e.transformacaoLinear(img,100,200)
    rw.writeImage('imgs/img3-100a200.jpg',img3100)
    
    
    # LETRA D
    # Construir o histograma das transformações
    
    img1 = rw.readImage('imgs/img1.jpg',False)
    img2 = rw.readImage('imgs/img2.jpg',False)
    img3 = rw.readImage('imgs/img3.jpg',False)
    img1100 = rw.readImage('imgs/img1-100a200.jpg',False)
    img2100 = rw.readImage('imgs/img2-100a200.jpg',False)
    img3100 = rw.readImage('imgs/img3-100a200.jpg',False)
    
    x = range(0,256)
    
    output_filename_img1 = 'hist_img1.jpg'
    output_filename_img2 = 'hist_img2.jpg'
    output_filename_img3 = 'hist_img3.jpg'
    output_filename_img1100 = 'hist_img1-100a200.jpg'
    output_filename_img2100 = 'hist_img2-100a200.jpg'
    output_filename_img3100 = 'hist_img3-100a200.jpg'
    
    histograma1 = hist.getHistogram(img1, 256)
    histograma2 = hist.getHistogram(img2, 256)
    histograma3 = hist.getHistogram(img3, 256)
    histograma1100 = hist.getHistogram(img1100, 256)
    histograma2100 = hist.getHistogram(img2100, 256)
    histograma3100 = hist.getHistogram(img3100, 256)
    
    config1 = {
    'filename': 'histogram/' + output_filename_img1,
    'title':u'Histograma:' + output_filename_img1,
    'xlabel':u'Nível de Cinza',
    'ylabel':u'Frequência',
    'color': 'grey',
    'alpha': 0.5,
    'grid': 'on',
    'xlimit': [0,255],
    }
    
    config2 = {
    'filename': 'histogram/' + output_filename_img2,
    'title':u'Histograma:' + output_filename_img2,
    'xlabel':u'Nível de Cinza',
    'ylabel':u'Frequência',
    'color': 'grey',
    'alpha': 0.5,
    'grid': 'on',
    'xlimit': [0,255],
    }
    
    config3 = {
    'filename': 'histogram/' + output_filename_img3,
    'title':u'Histograma:' + output_filename_img3,
    'xlabel':u'Nível de Cinza',
    'ylabel':u'Frequência',
    'color': 'grey',
    'alpha': 0.5,
    'grid': 'on',
    'xlimit': [0,255],
    }
    
    config1100 = {
    'filename': 'histogram/' + output_filename_img1100,
    'title':u'Histograma:' + output_filename_img1100,
    'xlabel':u'Nível de Cinza',
    'ylabel':u'Frequência',
    'color': 'grey',
    'alpha': 0.5,
    'grid': 'on',
    'xlimit': [0,255],
    }
    
    config2100 = {
    'filename': 'histogram/' + output_filename_img2100,
    'title':u'Histograma:' + output_filename_img2100,
    'xlabel':u'Nível de Cinza',
    'ylabel':u'Frequência',
    'color': 'grey',
    'alpha': 0.5,
    'grid': 'on',
    'xlimit': [0,255],
    }
    
    config3100 = {
    'filename': 'histogram/' + output_filename_img3100,
    'title':u'Histograma:' + output_filename_img3100,
    'xlabel':u'Nível de Cinza',
    'ylabel':u'Frequência',
    'color': 'grey',
    'alpha': 0.5,
    'grid': 'on',
    'xlimit': [0,255],
    }
    
    p1 = plot.plotgraph(x, histograma1, config1)
    p1.savePlot()
    
    p2 = plot.plotgraph(x, histograma2, config2)
    p2.savePlot()
    
    p3 = plot.plotgraph(x, histograma3, config3)
    p3.savePlot()
    
    p1100 = plot.plotgraph(x, histograma1100, config1100)
    p1100.savePlot()
    
    p2100 = plot.plotgraph(x, histograma2100, config2100)
    p2100.savePlot()
    
    p3100 = plot.plotgraph(x, histograma3100, config3100)
    p3100.savePlot()
def main():
    
    # Gerar a imagem equalizada da imagem 'aereo.png'
    
    img = rw.readImage('img/aereo.png',False)
    imgEqualizada = getImagemEqualizada(img, 256)
    rw.writeImage("img_equalizada/aereo_equalizado.png", imgEqualizada)
    
    
    
    # Gera a imagem equalizada da imagem 'placa.jpg'
    
    img = rw.readImage('img/placa.jpg',False)
    imgEqualizada = getImagemEqualizada(img, 256)
    rw.writeImage("img_equalizada/placa_equalizado.jpg", imgEqualizada)
    
    
    
    # Gera a imagem equalizada da imagem 'daenarys_modificada.jpg'
    
    img = rw.readImage('img/daenarys_modificada.jpeg',False)
    imgEqualizada = getImagemEqualizada(img, 256)
    rw.writeImage("img_equalizada/daenarys_modificada_equalizado.jpeg", imgEqualizada)
    
    
    
    # Gera a imagem equalizada da imagem 'lena_modificada.jpg'
    
    img = rw.readImage('img/lena_modificada.png',False)
    imgEqualizada = getImagemEqualizada(img, 256)
    rw.writeImage("img_equalizada/lena_modificada_equalizado.png", imgEqualizada)
    
    
    
    # Gera o histograma da imagem 'aereo.png' original
    
    img = rw.readImage('img/aereo.png',False)
    x = range(0,256)
    output_filename = 'hist_aereo.png'
    histograma = hist.getHistogram(img, 256)
    config = {
    'filename': 'histogram/' + output_filename,
    'title':u'Histograma da imagem aereo.png original:' + output_filename,
    'xlabel':u'Nível de Cinza',
    'ylabel':u'Frequência',
    'color': 'gray',
    'alpha': 0.5,
    'grid': 'on',
    'xlimit': [0,255],
    }
    p = plot.plotgraph(x, histograma, config)
    p.savePlot()
    
    
    
    # Gera o histograma da imagem 'placa.jpg' original
    
    img = rw.readImage('img/placa.jpg',False)
    x = range(0,256)
    output_filename = 'hist_placa.png'
    histograma = hist.getHistogram(img, 256)
    config = {
    'filename': 'histogram/' + output_filename,
    'title':u'Histograma da imagem placa.jpg original:' + output_filename,
    'xlabel':u'Nível de Cinza',
    'ylabel':u'Frequência',
    'color': 'gray',
    'alpha': 0.5,
    'grid': 'on',
    'xlimit': [0,255],
    }
    p = plot.plotgraph(x, histograma, config)
    p.savePlot()
    
    
    
    # Gera o histograma da imagem 'daenarys_modificada.jpeg' original (sem equalização)
    
    img = rw.readImage('img/daenarys_modificada.jpeg',False)
    x = range(0,256)
    output_filename = 'hist_placa_daenarys_modificada.png'
    histograma = hist.getHistogram(img, 256)
    config = {
    'filename': 'histogram/' + output_filename,
    'title':u'Histograma da imagem daenarys_modificada.jpg original (sem equalização):' + output_filename,
    'xlabel':u'Nível de Cinza',
    'ylabel':u'Frequência',
    'color': 'gray',
    'alpha': 0.5,
    'grid': 'on',
    'xlimit': [0,255],
    }
    p = plot.plotgraph(x, histograma, config)
    p.savePlot()
    
    
    
    # Gera o histograma da imagem 'lena_modificada.png' original (sem equalização)
    
    img = rw.readImage('img/lena_modificada.png',False)
    x = range(0,256)
    output_filename = 'hist_placa_lena_modificada.png'
    histograma = hist.getHistogram(img, 256)
    config = {
    'filename': 'histogram/' + output_filename,
    'title':u'Histograma da imagem lena_modificada.png original (sem equalização):' + output_filename,
    'xlabel':u'Nível de Cinza',
    'ylabel':u'Frequência',
    'color': 'gray',
    'alpha': 0.5,
    'grid': 'on',
    'xlimit': [0,255],
    }
    p = plot.plotgraph(x, histograma, config)
    p.savePlot()
    
    
    
    # Gera o histograma da imagem 'aereo.png' equalizada
    
    img = rw.readImage('img_equalizada/aereo_equalizado.png',False)
    x = range(0,256)
    output_filename = 'hist_aereo_equalizado.png'
    histograma = hist.getHistogram(img, 256)
    config = {
    'filename': 'histogram_equalizado/' + output_filename,
    'title':u'Histograma da imagem aereo.png equalizada:' + output_filename,
    'xlabel':u'Nível de Cinza',
    'ylabel':u'Frequência',
    'color': 'red',
    'alpha': 0.5,
    'grid': 'on',
    'xlimit': [0,255],
    }
    p = plot.plotgraph(x, histograma, config)
    p.savePlot()
    
    
    
    # Gera o histograma da imagem 'placa.png' equalizada
    
    img = rw.readImage('img_equalizada/placa_equalizado.jpg',False)
    x = range(0,256)
    output_filename = 'hist_placa_equalizado.png'
    histograma = hist.getHistogram(img, 256)
    config = {
    'filename': 'histogram_equalizado/' + output_filename,
    'title':u'Histograma da imagem placa.jpg equalizada:' + output_filename,
    'xlabel':u'Nível de Cinza',
    'ylabel':u'Frequência',
    'color': 'red',
    'alpha': 0.5,
    'grid': 'on',
    'xlimit': [0,255],
    }
    p = plot.plotgraph(x, histograma, config)
    p.savePlot()
    
    
    
    # Gera o histograma da imagem 'daenerys_modificada_equalizada.jpeg' equalizada
    
    img = rw.readImage('img_equalizada/daenarys_modificada_equalizado.jpeg',False)
    x = range(0,256)
    output_filename = 'hist_daenerys_modificada_equalizado.png'
    histograma = hist.getHistogram(img, 256)
    config = {
    'filename': 'histogram_equalizado/' + output_filename,
    'title':u'Histograma da imagem daenerys_modificada_equalizada.jpeg equalizada:' + output_filename,
    'xlabel':u'Nível de Cinza',
    'ylabel':u'Frequência',
    'color': 'red',
    'alpha': 0.5,
    'grid': 'on',
    'xlimit': [0,255],
    }
    p = plot.plotgraph(x, histograma, config)
    p.savePlot()
    
    
    
    # Gera o histograma da imagem 'lena_modificada_equalizada.png' equalizada
    
    img = rw.readImage('img_equalizada/lena_modificada_equalizado.png',False)
    x = range(0,256)
    output_filename = 'hist_lena_modificada_equalizado.png'
    histograma = hist.getHistogram(img, 256)
    config = {
    'filename': 'histogram_equalizado/' + output_filename,
    'title':u'Histograma da imagem lena_modificada_equalizada.png equalizada:' + output_filename,
    'xlabel':u'Nível de Cinza',
    'ylabel':u'Frequência',
    'color': 'red',
    'alpha': 0.5,
    'grid': 'on',
    'xlimit': [0,255],
    }
    p = plot.plotgraph(x, histograma, config)
    p.savePlot()
    
    
    
    # RMSE: comparando 'daenarys_original.jpg' com 'daenarys_modificada_equalizado.jpeg'
    im1 = rw.readImage('img/daenarys_original.jpg',False)
    im2 = rw.readImage('img_equalizada/daenarys_modificada_equalizado.jpeg',False)
    err = rmse(im1, im2)
    # Imprime o rmse
    print("RMSE-daenarys: ",err)
    
    
    
    # RMSE: comparando 'lena_original.png' com 'lena_modificada_equalizado.png'
    im1 = rw.readImage('img/lena_original.png',False)
    im2 = rw.readImage('img_equalizada/lena_modificada_equalizado.png',False)
    err = rmse(im1, im2)
    # Imprime o rmse
    print("RMSE-lena: ",err)
    g = a * math.sqrt(v_pixel) 
    
    return g
    
def funcaoExpo(v_pixel,f_max):
    
    a = 255 / (math.exp(f_max) - 1)
    
    g = a * (math.exp(v_pixel) - 1)
    
    return g


img = rw.readImage('../images/daenarys_escuro.jpeg',False)
imgLog = transformacaoNaoLinearLog(img)
rw.writeImage('../images/daenarys_escuro-log.jpeg',imgLog)

img = rw.readImage('../images/daenarys_escuro.jpeg',False)

imgQuadr = transformacaoNaoLinearQuadr(img)
rw.writeImage('../images/daenarys_escuro-quadr.jpeg',imgQuadr)

img = rw.readImage('../images/daenarys_escuro.jpeg',False)

x = range(0,256)

output_filename_img = 'hist_img_daenarys.jpeg'
output_filename_imglog = 'hist_img_daenarys-log.jpeg'
output_filename_imgquadr = 'hist_img_daenarys-quadr.jpeg'

histograma = hist.getHistogram(img, 256)