#include "include.h"
/****************************************
* Segmentation de la
balustrade
* de l'image de la bibliotheque
*
* Thomas Maure - ENST - Avril 1997
****************************************/
main (argc, argv) int argc; char * argv[];
{
IMAGE **
images; int i, num;
/* INITIALISATION DE 10 IMAGES */
images = init_all_images (10,437,
590);
/* Premiere phase : Extraction par seuillage
* et filtrage de
la balustrade
*/
if(1)
{
/* CHARGEMENT DE L'IMAGE */
mm0_imagin_enst
(images[0], "original");
/* seuillage direct */
mm0_thresh(images[0],images[1],130,256);
mm0_imaout_enst(images[1],"seuil");
/* petite
ouverture pour deconnecter */
mm0_open(images[1],images[2],images[9],1);
mm0_imaout_enst(images[2],"seuil_ouvert");
/*
grosse ouverture lineaire pour tout filtrer
* sauf la balustrade
horizontale
*/
mm0_lin_open(images[2],images[3],25,0,0);
/* reconstruction */
mm0_recons(images[3],images[2]);
mm0_imaout_enst(images[3],"recons");
/* filtre alterne pour remplir les trous et
* filtrer les
barbules
*/
mm0_open(images[3],images[3],images[9],1);
mm0_close(images[3],images[3],images[9],1);
mm0_imaout_enst(images[3],"seuil_filtre");
}
/* Deuxieme phase : Reconnection de la balustrade */
if(1)
{
/* CHARGEMENT DE L'IMAGE BINAIRE SEUILLEE */
mm0_imagin_enst(images[0], "seuil_filtre");
mm0_imagin_enst (images[8], "original");
mm0_copy(images[0],images[1]);
/* calcul de la distance hexagonale pour une reconnection */
mm0_distance_hexa(images[1]);
mm0_calgebre(images[1],8,images[1],LCR_MIN);
mm0_imaout_enst(images[1],"distance");
/* dilatation geodesique pour supprimer les minimaux regionaux */
mm0_calgebre(images[1],+1,images[2],LCR_SUB);
mm0_num_dil_geod(images[2],images[1],0);
/* calcul des lignes de partage des eaux */
mm0_calgebre(images[1],-1,images[1],LCR_MUL);
mm0_calgebre(images[1],255,images[1],LCR_ADD);
mm0_lpe1(images[1],images[2]);
mm0_calgebre(images[2],1,images[2],LCR_MIN);
mm0_calgebre(images[2],1,images[2],LCR_XOR);
mm0_imaout_enst(images[2],"lpe");
/* dilatation
des LPE, reconnection des contours */
mm0_dilate(images[2],images[2],images[9],4);
mm0_algebre(images[2],images[0],images[3],LCR_OR);
mm0_imaout_enst(images[3],"final_binaire");
/* calcule les contours trouves et les met en blanc */
mm0_erode(images[3],images[4],images[9],1);
mm0_algebre(images[3],images[4],images[4],LCR_SUB);
mm0_calgebre(images[4],255,images[4],LCR_MUL);
/* supprime le blanc 255 de l'image */
mm0_calgebre(images[8],254,images[8],LCR_MIN);
/* superpose les contours (en blanc) a l'image originale */
mm0_algebre(images[8],images[4],images[5],LCR_MAX);
/* sauve l'image finale */
mm0_imaout_enst(images[5],"final");
}
}