/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        R E M P L I S S A G E   D ' U N   C O N T O U R  :                                                                         */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Definition :                                                                                                               */
/*                                                                                                                                   */
/*                    Cette commande permet d'extraire                                                                               */
/*                  un contour contenu dans une image                                                                                */
/*                  Argument et de le remplir.                                                                                       */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Author of '$xci/contours.12$K' :                                                                                           */
/*                                                                                                                                   */
/*                    Jean-Francois COLONNA (LACTAMME, 19990603133319).                                                              */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        I N T E R F A C E   ' listG '  :                                                                                           */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        :Debut_listG:                                                                                                              */
/*        :Fin_listG:                                                                                                                */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        D I R E C T I V E S   S P E C I F I Q U E S   D E   C O M P I L A T I O N  :                                               */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        F I C H I E R S   D ' I N C L U D E S  :                                                                                   */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#include  INCLUDES_BASE
#include  image_image_CONTOURS_EXT

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        P A R A M E T R E S  :                                                                                                     */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   SEUIL_DE_LIMITE_ENTRE_L_INTERIEUR_ET_L_EXTERIEUR                                                                              \
                    GRIS                                                                                                                \
                                        /* Seuil de limite entre l'interieur et l'exterieur des contours.                            */

#define   X_POINT_DE_DEPART_DU_CONTOUR                                                                                                  \
                    _____cNORMALISE_OX(Xmin)
#define   Y_POINT_DE_DEPART_DU_CONTOUR                                                                                                  \
                    _____cNORMALISE_OY(Ymin)
                                        /* Point de depart de l'extraction du contours.                                              */

#define   PARCOURS___EST                                                                                                                \
                    VRAI
#define   PARCOURS__NORD                                                                                                                \
                    VRAI
#define   PARCOURS_OUEST                                                                                                                \
                    VRAI
#define   PARCOURS___SUD                                                                                                                \
                    VRAI
#define   PARCOURS__NORD___EST                                                                                                          \
                    VRAI
#define   PARCOURS__NORD_OUEST                                                                                                          \
                    VRAI
#define   PARCOURS___SUD_OUEST                                                                                                          \
                    VRAI
#define   PARCOURS___SUD___EST                                                                                                          \
                    VRAI
                                        /* Pour choisir les directions de parcours (introduit le 20070213121905)...                  */

#define   NIVEAU_DE_REMPLISSAGE_DU_CONTOUR                                                                                              \
                    BLANC                                                                                                               \
                                        /* Niveau de remplissage du contour.                                                         */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        M A C R O S   U T I L E S  :                                                                                               */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   DEFINE_CONTOUR(logique1,logique2)                                                                                             \
                    Bblock                                                                                                              \
                    BoIn(niveau,NOIR,seuil_de_limite_entre_l_interieur_et_l_exterieur,PAS_COULEURS)                                     \
                         Bblock                                                                                                         \
                         EGAL(ITb1(fond,INDX(niveau,NOIR)),logique1);                                                                   \
                         EGAL(ITb1(bord,INDX(niveau,NOIR)),logique2);                                                                   \
                         Eblock                                                                                                         \
                    EBoI                                                                                                                \
                                                                                                                                        \
                    BoIn(niveau,SUCN(seuil_de_limite_entre_l_interieur_et_l_exterieur),BLANC,PAS_COULEURS)                              \
                         Bblock                                                                                                         \
                         EGAL(ITb1(fond,INDX(niveau,NOIR)),logique2);                                                                   \
                         EGAL(ITb1(bord,INDX(niveau,NOIR)),logique1);                                                                   \
                         Eblock                                                                                                         \
                    EBoI                                                                                                                \
                    Eblock                                                                                                              \
                                        /* Definition de l'interieur et de l'exterieur d'un contour.                                 */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        R E M P L I S S A G E   D ' U N   C O N T O U R  :                                                                         */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
BCommande(nombre_d_arguments,arguments)
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     DEFV(CHAR,INIC(POINTERc(nom_imageR),NOM_PIPE));
     DEFV(CHAR,INIC(POINTERc(nom_imageA),NOM_PIPE));

     DEFV(genere_p,INIT(seuil_de_limite_entre_l_interieur_et_l_exterieur,SEUIL_DE_LIMITE_ENTRE_L_INTERIEUR_ET_L_EXTERIEUR));
                                        /* Seuil de limite entre l'interieur et l'exterieur des contours.                            */

     DEFV(Logical,DTb1(fond,COULEURS));
                                        /* Definition du fond (ce que l'on doit remplir).                                            */
     DEFV(Logical,DTb1(bord,COULEURS));
                                        /* Et du bord (ce qui definit le contour et son exterieur).                                  */

     DEFV(pointF_2D,point_de_depart);
                                        /* Point de depart de l'extraction de contour.                                               */

     DEFV(genere_p,INIT(niveau_de_remplissage_du_contour,NIVEAU_DE_REMPLISSAGE_DU_CONTOUR));
                                        /* Niveau de remplissage du contour.                                                         */

     DEFV(Logical,INIT(parcours___est,PARCOURS___EST));
     DEFV(Logical,INIT(parcours__nord,PARCOURS__NORD));
     DEFV(Logical,INIT(parcours_ouest,PARCOURS_OUEST));
     DEFV(Logical,INIT(parcours___sud,PARCOURS___SUD));
     DEFV(Logical,INIT(parcours__nord___est,PARCOURS__NORD___EST));
     DEFV(Logical,INIT(parcours__nord_ouest,PARCOURS__NORD_OUEST));
     DEFV(Logical,INIT(parcours___sud_ouest,PARCOURS___SUD_OUEST));
     DEFV(Logical,INIT(parcours___sud___est,PARCOURS___SUD___EST));
                                        /* Pour choisir les directions de parcours (introduit le 20070213121905)...                  */
     /*..............................................................................................................................*/
     INITIALISATION_POINT_2D(point_de_depart,X_POINT_DE_DEPART_DU_CONTOUR,Y_POINT_DE_DEPART_DU_CONTOUR);
                                        /* Introduit le 20050310160202 pour eviter de voir "n'importe quoi" lorsque l'option         */
                                        /* "Parametres=VRAI" est active...                                                           */

     GET_ARGUMENTSv(nombre_d_arguments
                   ,BLOC(GET_ARGUMENT_C("imageA=""A=",nom_imageA);
                         GET_ARGUMENT_C("imageR=""R=",nom_imageR);
                         GET_ARGUMENT_P("seuil=""s=",seuil_de_limite_entre_l_interieur_et_l_exterieur);
                         GET_ARGUMENT_P("niveau=",niveau_de_remplissage_du_contour);
                         GIT_ARGUMENT_F("x=""XI=""X=",ASD1(point_de_depart,x),X_POINT_DE_DEPART_DU_CONTOUR);
                                        /* 'XI' a ete introduit le 20051207141742 suite a la modification effectuee dans             */
                                        /* 'v $xci/contours.11$K XI='.                                                               */
                         GIT_ARGUMENT_F("y=""YI=""Y=",ASD1(point_de_depart,y),Y_POINT_DE_DEPART_DU_CONTOUR);
                                        /* 'YI' a ete introduit le 20051207141742 suite a la modification effectuee dans             */
                                        /* 'v $xci/contours.11$K YI='.                                                               */
                         GET_ARGUMENT_L("est=""dc1=",parcours___est);
                         GET_ARGUMENT_L("nord=""dc2=",parcours__nord);
                         GET_ARGUMENT_L("ouest=""dc3=",parcours_ouest);
                         GET_ARGUMENT_L("sud=""dc4=",parcours___sud);
                         GET_ARGUMENT_L("nord___est=""dc12=",parcours__nord___est);
                         GET_ARGUMENT_L("nord_ouest=""dc23=",parcours__nord_ouest);
                         GET_ARGUMENT_L("sud_ouest=""dc34=",parcours___sud_ouest);
                         GET_ARGUMENT_L("sud___est=""dc41=",parcours___sud___est);
                                        /* Pour choisir les directions de parcours (introduit le 20070213121905)...                  */
                                        /*                                                                                           */
                                        /* Les Directions Cardinales de type 'v $xiii/vecteurs$DEF Rappel.sur.les.orientations'      */
                                        /* ont ete introduites le 20231201094206 dans l'idee d'une extension tridimensionnelle...    */

                         GET_ARGUMENT_L("editer_centre_gravite=""ecg="
                                       ,Iremplissage_____editer_le_centre_de_gravite
                                        );
                                        /* Parametres introduits le 20161105105953...                                                */
                         GET_ARGUMENT_L("editer_matrice_intertie=""emi="
                                       ,Iremplissage_____editer_la_matrice_d_inertie
                                        );
                                        /* Parametres introduits le 20230825102403...                                                */
                         )
                    );

     CALi(Inoir(ImageR));
                                        /* Initialisation de l'image Resultat.                                                       */

     Test(IFGE(seuil_de_limite_entre_l_interieur_et_l_exterieur,BLANC))
          Bblock
          PRINT_ERREUR("le seuil de limite entre l'interieur et l'exterieur doit etre inferieur au niveau maximal");
          EGAL(seuil_de_limite_entre_l_interieur_et_l_exterieur,PREN(BLANC));
          Eblock
     ATes
          Bblock
          Eblock
     ETes

     Test(PAS_D_ERREUR(CODE_ERROR(Iload_image(ImageA,nom_imageA))))
          Bblock
          DEFV(pointF_2D,coin_inferieur_gauche);
                                        /* Coin inferieur gauche de la zone de remplissage,                                          */
          DEFV(pointF_2D,coin_superieur_droite);
                                        /* Coin superieur droite de la zone de remplissage.                                          */

          INITIALISATION_POINT_2D(coin_inferieur_gauche,CADRE_GAUCHE,CADRE_INFERIEUR);
                                        /* Definition du coin inferieur gauche de remplissage,                                       */
          INITIALISATION_POINT_2D(coin_superieur_droite,CADRE_DROITE,CADRE_SUPERIEUR);
                                        /* Definition du coin superieur droite de remplissage.                                       */

          DEFINE_CONTOUR(VRAI,FAUX);
                                        /* Definition de l'interieur et de l'exterieur du contour...                                 */

          CALS(Iremplissage(ImageR
                           ,ImageA
                           ,ADRESSE(point_de_depart)
                           ,ADRESSE(coin_inferieur_gauche)
                           ,ADRESSE(coin_superieur_droite)
                           ,fond,bord
                           ,parcours___est,parcours__nord,parcours_ouest,parcours___sud
                           ,parcours__nord___est,parcours__nord_ouest,parcours___sud_ouest,parcours___sud___est
                           ,niveau_de_remplissage_du_contour
                            )
               );
                                        /* Remplissage du contour...                                                                 */

          CALi(Iupdate_image(nom_imageR,ImageR));
                                        /* Memorisation du resultat.                                                                 */
          Eblock
     ATes
          Bblock
          Test__CODE_ERREUR__ERREUR07;
          Eblock
     ETes

     RETU_Commande;
     Eblock
ECommande



Copyright © Jean-François COLONNA, 2019-2024.
Copyright © CMAP (Centre de Mathématiques APpliquées) UMR CNRS 7641 / École polytechnique, Institut Polytechnique de Paris, 2019-2024.