%% Script pour extraire le trait de côte et la zone de mer probable
% \CAMTOOL_v20\image_processing\traitdecote2_clean.m

% ce script est plus récent et robuste que traitdecote2.m
% Les calculs réalisés sont identiques à traitdecote2.m
%------------------------------------------------------------------------
% Modifications depuis traitdecote2.m
% - Interruption du programme si aucune photo n'est sélctionnée
% - Création d'un répertoire de sortie par défaut si aucun répertoire de
% sortie n'est créé
% - Fabrication d'un masque par défaut si aucun masque d'analyse n'est
% sélectionné
% - Ecriture des fichiers de sortie au fur et à mesure de leur création
%--------------------------------------------------------------------------
%--------------------------------------------------------------------------
% \CAMTOOL_v20\file_management\selectimages.m
[filename, pathname] = selectimages('Photos à traiter','on');
if filename == 0
    error('Le script s''est arrêté. Vous devez sélectionner au moins une photo!');
end

[roiname, roipath] = selectimages('Masque d''analyse (facultatif)','off');

% Désigne le répertoire sortie et crée les répertoires nécessaires à
% l'intérieur
outdir = uigetdir(pathname, 'Selectionnez le répertoire de sortie (facultatif)');

% Si outdir n'est pas assigné, on va créer un répertoire à l'intérieur de
% pathname pour contenir les sorties
if outdir == 0
       mkdir(strcat(pathname,'\output'));
       outdir = strcat(pathname,'\output');
end

% Si outdir est assigné à pathname, on lui donne un autre nom par défaut
% pour éviter d'avoir les input et output dans le même répertoire
if strcmp(strcat(outdir,'\'), pathname)
       mkdir(strcat(outdir,'\output'));
       outdir = strcat(outdir,'\output');

end

if ~exist(strcat(outdir,'\outmask'))
    mkdir(strcat(outdir,'\outmask'));
end
if ~exist(strcat(outdir,'\cleanmask'))
    mkdir(strcat(outdir,'\cleanmask'));
end
if ~exist(strcat(outdir,'\cleanline'))
    mkdir(strcat(outdir,'\cleanline'));
end


%% Pour chaque image
for i = 1:length(cellstr(filename))

tic
% 1. Lire l'image (variante selon qu'on a une seule image ou une liste d'images) 
    if ischar(filename)
        disp(['lit photo 1 : '  filename]);
        fname = filename;
    else
        fname = char(filename(i));
        disp(['lit photo ' num2str(i) ' de ' num2str(length(cellstr(filename))) ' : ' fname]);
    end
    
    photo=imread([pathname fname]); 

% si un nom de roi n'a pas été choisi, le masque comprendra toute l'image
% par défaut
if roiname == 0
    roi = ones(size(photo(:,:,1)));
else
    roi = imread([roipath roiname]);
end
toc
 
%% 2. Trace le contour de la zone de mer et nettoye

% appelle la fonction \CAMTOOL_v20\image_processing\detect_wetdry\detect_wetdry2.m
 tic
    outmask = detect_wetdry_ratio(roi,photo);
     disp('masque détecté en:');
 toc
    imwrite(outmask, char([outdir '\outmask\outmask_' fname(1:end-3) 'png']), 'png' );

    
tic
 % appelle la fonction \CAMTOOL_v20\image_processing\detect_wetdry\contourtrace5.m
    [cleanline, cleanmask] = contourtrace5(roi,outmask);
%      [indice_x,indice_y]=find(cleanline');
%      cleanline=line(indice_x,indice_y);
imwrite(cleanmask, char([outdir '\cleanmask\cleanmask_' fname(1:end-3) 'png']), 'png' );
imwrite(cleanline, char([outdir '\cleanline\cleanline_' fname(1:end-3) 'png']), 'png' );
disp('masque nettoyé et images écrites en:');
 toc

%% 3. Calcule photo avec wetdry tracé dessus
% tic

% appelle la fonction \CAMTOOL_v20\display\drawphotomask.m
    maphoto = drawphotomask(photo, cleanline, roi);

    imwrite(maphoto, char([outdir '\tcote_' fname]), 'jpg');
    disp('Temps de calcul du script pour cette image');
    toc

%% 4. Recommence toutes les opérations pour l'image suivante
end 

