/**
 * \file Ouverture.cpp
 * Implante un filtre d'ouverture 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 "Ouverture.h"
#include "Image.h"
#include "ElementStructurant.h"
#include "Erosion.h"
#include "Dilatation.h"

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

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