__author__ = 'chaussard'

import cv2
import numpy as np
import Commun.morpho as morpho
import Commun.myimage as myimage
import Commun.strel as strel
import histo as myhisto



#On ouvre l'image en lecteur
im = cv2.imread('feuille1.png')

#Petit traitement morphologique : un bottom hat par reconstrution pour retirer les fonds grises
st = strel.build('carre', 5, None)
f = morpho.myclose(st, im)
e = morpho.myreconsup(f, im, strel.build('carre', 1, None))
r = e-im
#r est l'image resultat
r = r[:,:,1]

#Calcul des differents histogrammes
#histo est l'histogramme
histo = cv2.calcHist([r], [0], None, [256], [0,256])
#histocumul sera l'histogramme cumule
histocumul = np.zeros(histo.shape)
value = np.reshape(np.arange(0,256),(256,1))
#hpondere est l'histogramme pondere, c'est a dire histo*[0;256]
hpondere = np.multiply(histo, value)

#Calcul des histogrammes cumules
hponderecumul = np.zeros(hpondere.shape)
hponderecumul[0] = hpondere[0]
histocumul[0] = histo[0]
for i in range(1,256):
    hponderecumul[i] = hponderecumul[i-1] + hpondere[i]
    histocumul[i] = histocumul[i-1] + histo[i]

#N est le nb de pixels dans l'image
N = histocumul[255]
#G1 sera le nb de pixels du groupe 1
G1 = histocumul
#Et G2 le nb de pixels du groupe 2
G2 = N - G1
#On ajoute 1 pour eviter de diviser par 0 a la prochaine etape
G1=G1+1
G2=G2+1
#mu1 et mu2 sont les moyennes des pixels de chacun des deux groupes
mu1 = np.divide(hponderecumul, G1)
mu2 = np.divide(hponderecumul[255] - hponderecumul, G2)
#Et V sera la variance inter class
V = np.multiply(G1, G2)/(N**2)
V2 = np.multiply((mu1-mu2),(mu1-mu2))
V = np.multiply(V,V2)
#Le meilleur seuil sera celui qui maximise V
p = np.argmax(V)
print(p)

seuil = np.uint8((r>p)*255)
