%% Script de traçage du contour d'un masque binaire
% Thomas Dewez Avril 2008


% Opérations:
% 1. Lissage moyen par fenêtre mobile
% 2. Filtre morphologique d'ouverture (erosion suivi d'une dilatation)
% 3. Contourage

function [cleanline, cleanmask] = contourtrace5(roi, mask)

%function cleanmask = contourtrace5(roi, mask)

%%

A = mask;

% % filtrage par morphologie mathématique

A_morph = A;
% Enlève les petites taches 
% tic

%% 
%Aplus = bwareaopen(A_morph, 300000 );
%clear Amorph;

%%
%
%Aminus = ~bwareaopen(~Aplus, 300000 );
%Aminus = immultiply(~bwareaopen(~imadd(Aplus,~roi),300000),roi);

%% Nettoie le masque des crasses sur le bord
%se = strel('disk',4);

se = strel('line',1,0);

B = imclose(A_morph,se);
Btotal = ~bwareaopen(~B, 30000);

Aminus=Btotal;
% clear Aplus;
%disp('Fin de traitement bwareaopen en:');
% toc
%%
% tic
%A = Aminus;
    
%     se = strel('disk',4);
%     A_morph = imclose(A,se);
% %    A_morph = imopen(A_morph, se);
% Aminus = imopen(A_morph, se);
%     disp('Fin de traitement open/close en:');
% 
% toc
 
cleanmask = Aminus;

%% A effacer
%imshow(photo); hold on;

%% Detection des contours de la zone candidate
% [cont, lab]  = imcontour(Aminus, 1);
 
% hold on;
 
%% Enlève les bords du masque de la zone d'intérêt
%[roicont, roilab] = imcontour(roi);

%% Points au niveau de la mer

% tic

%cleanmask = immultiply((edge(uint8(~roi),'canny')),edge(uint8(Aminus),'canny'));

cleanline = immultiply(bwperim(Aminus), ~bwperim(roi));

%disp('Fin de traitement immultiply en: ');
%toc
 %line=[cont(1,:)' cont(2,:)'];
 
%outline=line;
