#!/usr/bin/python

from morphee import *

# ------------------------------
# areImagesEqual 
# Return 1 if images are equal else 0
# ------------------------------
def areImagesEqual(imIn1, imIn2):
    imtemp = ImCreateSame(imIn1)
    ImCompare(imIn1, "==", imIn2, 0, 1, imtemp)
    return (measVolume(imtemp) == 0)



# ------------------------------
# Lambda-Leveling
# ------------------------------                    
def lambdaLeveling(imIn, imMark, nl, lamb, imOut):
    imTemp = getSame(imMark)
    imT = getSame(imMark)
    imDilated = getSame(imTemp)
    imErode = getSame(imTemp)
    imInf = getSame(imTemp)
    imSup = getSame(imTemp)
    ImCopy(imMark, imTemp)
    compteur = 0
    
    while 1:
        compteur+=1
        ImDilate(imTemp, nl, imDilated)
        arithSubImageConstWithClipping(imDilated, lamb, 0, imT)
        arithSupImage(imTemp, imT, imDilated)
        
        ImErode(imTemp, nl, imErode)
        arithAddImageConstWithClipping(imErode, lamb, 255, imT)
        arithInfImage(imTemp, imT, imErode)
		
        arithInfImage(imIn, imDilated, imInf)
        arithSupImage(imInf, imErode, imSup)
        if (areImagesEqual(imSup, imTemp)):
            print "images identiques"
            break
        else:
            ImCopy(imSup, imTemp)
            print "lambdaLeveling converge in ", compteur
            ImCopy(imSup, imOut)



imIn = fileRead(images_dir+'/Gray/salt.png')
imMark = getSame(imIn)
imOut = getSame(imIn)
imOut2 = getSame(imIn)

#Exemple de ImMark
ImOpen(imIn, HomotheticSE(SquareSE, 3), imMark)

#lambdaLeveling avec la fonction definie plus haut
lambdaLeveling(imIn, imMark, SquareSE, 4, imOut)
fileWrite(imOut, "LevelingTP.png")

#lambdaLeveling usuel de Morph-M
ImLambdaLeveling(imIn, imMark, SquareSE, 4, imOut2)
fileWrite(imOut2, "LevelingMorphee.png")

#Comparaison des 2 Images
imComp = getSame(imIn)
ImCompare(imOut, '==', imOut2, 0, 255, imComp)
fileWrite(imComp, "comparaison.png")

    
