% synthese = f ( image , 0 pour normal-1 pour denoise-2 pour etaler le
% contraste , type de calcul(gradient*ed*d=grdt, edginess=ed*d ou rien),
% then for the plot of the energie 'on' otherwise 'no', step)
function Image_contours = synthese(J, a, type, energie, step)

% Les differents handles

ed = @edginess;
cons = @byaverage;
n = @norme;
tr = @trace_ed;
bds = @boundaries;
m = @matrice_R_G;
moy = @moyenne;
fll2 = @piece_fill2;
masart = @m_and_s_artefact;
grad = @ged;
meansq = @msd;
ekl = @energie_k_lambda;
link = @relier;
affich = @affichage;
pe = @premiers_essais;
ekl2 = @energie_k_lambda2;
affich2 = @affichage2;

%Creation des matrices R et G a partir de l'image
[R, D, G, l, c, N] = feval(m, J, a);


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
if type == 'ed*d'
% SANS LE GRADIENT

% Trace de la courbe log de d*e et de d*e*grad en fonction des points (i,j)
% en prennant garde a les classer par ordre decroissant
%courbe = feval(tr, R, l, c);

% Mieux mais un peu lent, on prend un certain nombre nb
[courben2,E,t, Memoire_contour, Memoire_fill] = feval(ekl2, N, R, l, c, energie, step);
% x, y, IX,
% maintenant on "fill" la figure obtenue
[Image_contour,Image_fill] = feval(affich2,E,t,l,c,N,10^(-6),Memoire_contour, Memoire_fill,'no', 'on');

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
elseif type == 'grdt'
% Tout pareil mais avec le GRADIENT

% PLOT AVEC LE GRADIENT
%courbe = feval(tr, R, l, c);

%Boudaries avec le GRADIENT
%Image_finale_ged = feval(bds, l, c, N, G, 1*10^(-5));

% Energie avec le gradient
[courben2_ged,E_ged,t,Memoire_contour,Memoire_fill] = feval(ekl2, N, G, l, c, energie, step);

% maintenant on "fill" la figure obtenue
[Image_contour,Image_fill] = feval(affich2,E_ged,t,l,c,N,10^(-7),Memoire_contour,Memoire_fill,'no','on');

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
elseif type == 'rien'
    
% enfin on extrait l'image souhaitee
%[Matrice_contours,Matrice_contours_couleurs] = feval(bds, l, c, N, R, 0.0000025,'on');

% On est parti pour minimiser en agrandissant les carres a chaque fois
[image_piece, courbe] = feval(masart, l, c, N, 2,0.00015);

% On rempli comme on peut avec un programme perilleux mais finalement
% genial
%Image_fill2 = feval(fll2, l, c, N, 0.00001);
% Pour le rapport on a besoin des figures preliminaires
%[Matrice_contours,Matrice_contours_couleur] = feval(pe, l, c, N, R, D, G, 0.0001, 'on');
% On va essayer notre edges-link program
%matrice_edge_relie = feval(link, Matrice_contours,Matrice_contours_couleurs, l, c,'on');
%matrice_edge_relie_double = feval(link, matrice_edge_relie,Matrice_contours_couleurs, l, c,'on');

% Trace de la courbe log de d*e et de d*e*grad en fonction des points (i,j)
% en prennant garde a les classer par ordre decroissant
%courbe = feval(tr, R, l, c);

end