/**
 * \file Fermeture.cpp
 * Implante un filtre de fermeture en morphologie mathematique.
 * 
 * @author Nicolas Janey
 * @author nicolas.janey@univ-fcomte.fr
 * @version 1.0, 12/01/06
 */

#include <stdio.h>
#include <stdlib.h>

#include "Fermeture.h"
#include "Image.h"
#include "ElementStructurant.h"
#include "Erosion.h"
#include "Dilatation.h"

/**
 * Filtre une image par fermeture.
 *
 * @param src l'image a filtrer.
 * @param dst l'image resultat apres filtrage.
 * @param e l'elementStructurant de fermeture.
 * @author Nicolas Janey
 * @author nicolas.janey@univ-fcomte.fr
 * @version 1.0, 12/01/06
 */
void filtreImageFermeture(struct image *src,struct image *dst,struct elementStructurant *e) {
  struct elementStructurant te = *e;
  transpose(&te);
  filtreImageDilatation(src,dst,e);
  filtreImageErosion(dst,dst,&te);
}
 
/**
 * Filtre une image par fermeture.
 *
 * @param src l'image a filtrer.
 * @param dst l'image resultat apres filtrage.
 * @param e l'elementStructurant de fermeture.
 * @param n le nombre d'iterations de la fermeture.
 * @author Nicolas Janey
 * @author nicolas.janey@univ-fcomte.fr
 * @version 1.0, 12/01/06
 */
void filtreImageFermeture(struct image *src,struct image *dst,struct elementStructurant *e,int n) {
  struct elementStructurant te = *e;
  transpose(&te);
  int i;
  filtreImageDilatation(src,dst,e);
  for ( i = 1 ; i < n ; i++ )
    filtreImageDilatation(dst,dst,e);
  for ( i = 0 ; i < n ; i++ )
    filtreImageErosion(dst,dst,&te);
}

/**
 * Filtre une image par fermeture.
 *
 * @param src l'image a filtrer.
 * @param dst l'image resultat apres filtrage.
 * @param e l'elementStructurant de fermeture.
 * @author Nicolas Janey
 * @author nicolas.janey@univ-fcomte.fr
 * @version 1.0, 12/01/06
 */
void filtreImageFermeture(int callage,struct image *src,struct image *dst,struct elementStructurant *e) {
  struct elementStructurant te = *e;
  transpose(&te);
  filtreImageDilatation(callage,src,dst,e);
  filtreImageErosion(callage,dst,dst,&te);
}
 
/**
 * Filtre une image par fermeture.
 *
 * @param src l'image a filtrer.
 * @param dst l'image resultat apres filtrage.
 * @param e l'elementStructurant de fermeture.
 * @param n le nombre d'iterations de la fermeture.
 * @author Nicolas Janey
 * @author nicolas.janey@univ-fcomte.fr
 * @version 1.0, 12/01/06
 */
void filtreImageFermeture(int callage,struct image *src,struct image *dst,struct elementStructurant *e,int n) {
  struct elementStructurant te = *e;
  transpose(&te);
  int i;
  filtreImageDilatation(callage,src,dst,e);
  for ( i = 1 ; i < n ; i++ )
    filtreImageDilatation(callage,dst,dst,e);
  for ( i = 0 ; i < n ; i++ )
    filtreImageErosion(callage,dst,dst,&te);
}
