/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        I N T E G R A T I O N   D ' U N E   S E R I E   D ' I M A G E S   A V E C   T R A N S P A R E N C E  :                     */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Definition :                                                                                                               */
/*                                                                                                                                   */
/*                    Cette commande "empile" d'avant (la premiere                                                                   */
/*                  image) en arriere (la derniere image) une                                                                        */
/*                  serie d'images ; pour chaque point Resultat,                                                                     */
/*                  on somme les points de memes coordonnees des                                                                     */
/*                  images Arguments avec une ponderation fonction                                                                   */
/*                  de l'eloignement. Enfin, les images Arguments                                                                    */
/*                  sont binarisees au prealable...                                                                                  */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Author of '$xci/integre.02$K' :                                                                                            */
/*                                                                                                                                   */
/*                    Jean-Francois COLONNA (LACTAMME, 1989??????????).                                                              */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        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_QUAD_IMAGE_EXT

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        P A R A M E T R E S  :                                                                                                     */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#include  xci/sequence.01.I"

#define   SEUIL_NOIR_BLANC                                                                                                              \
                    GRIS                                                                                                                \
                                        /* Seuil de discrimination entre le 'NOIR' et le 'BLANC'...                                  */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        M A C R O S   U T I L E S  :                                                                                               */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        I N T E G R A T I O N   D ' U N E   S E R I E   D ' I M A G E S   A V E C   T R A N S P A R E N C E  :                     */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
BCommande(nombre_d_arguments,arguments)
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     DEFV(CHAR,INIC(POINTERc(nom_imageA),NOM_PIPE));
                                        /* Nom de la sequence a integrer.                                                            */
     DEFV(CHAR,INIC(POINTERc(nom_postfixe),NOM_UNDEF_VIDE));
                                        /* Nom d'un eventuel postfixe a placer derriere <nom_imageA><numero> (par exemple '$ROUGE'). */
     DEFV(CHAR,INIC(POINTERc(nom_imageR),NOM_PIPE));
                                        /* Nom du Resultat de l'integration.                                                         */
     DEFV(genere_Float,INIT(premiere_image,FLOT(PREMIERE_IMAGE)));
                                        /* Numero de la premiere image,                                                              */
     DEFV(genere_Float,INIT(derniere_image,FLOT(DERNIERE_IMAGE)));
                                        /* Numero de la derniere image.                                                              */
     DEFV(genere_Float,INIT(pas_des_images,FLOT(PAS_DES_IMAGES)));
                                        /* Pas de passage d'un numero d'image a une autre.                                           */
     DEFV(Int,INIT(nombre_de_chiffres,NOMBRE_DE_CHIFFRES));
                                        /* Nombre de chiffres codant le numero des images de la serie...                             */
     DEFV(genere_Float,INIT(numero_d_image,FLOT__UNDEF));
                                        /* Numero de l'image courante.                                                               */
     DEFV(CHAR,INIT(POINTERc(nom_image),NOM_UNDEF));
                                        /* Nom courant des images.                                                                   */
     DEFV(genere_p,INIT(seuil_de_binarisation,SEUIL_NOIR_BLANC));
                                        /* Seuil de selection entre le 'NOIR' et le 'BLANC'...                                       */
     /*..............................................................................................................................*/
     GET_ARGUMENTSi(nombre_d_arguments
                   ,BLOC(GET_ARGUMENT_C("imageA=""A=",nom_imageA);
                         GET_ARGUMENT_C("postfixe=",nom_postfixe);
                         GET_ARGUMENT_C("imageR=""R=",nom_imageR);
                         GET_ARGUMENT_F("premiere=",premiere_image);
                         GET_ARGUMENT_F("derniere=",derniere_image);
                         GET_ARGUMENT_F("pas=",pas_des_images);
                         GET_ARGUMENT_I("chiffres=",nombre_de_chiffres);
                         GET_ARGUMENT_P("seuil=",seuil_de_binarisation);
                         )
                    );

     begin_nouveau_block
          Bblock
          BDEFV(imageF,cumul_des_couches);
                                        /* Image flottante dans laquelle on cumule les differentes couches d'avant en arriere.       */
          BDEFV(imageF,couche_courante);
                                        /* Image flottante dans laquelle on trouve la couche courante apres attenuation, et          */
                                        /* binarisation par 'seuil_de_binarisation'.                                                 */

          CALi(IFinitialisation(cumul_des_couches,FZERO));
                                        /* Nettoyage de l'image finale flottante...                                                  */

          DoIn(numero_d_image,premiere_image,derniere_image,pas_des_images)
               Bblock
               Test(IFNE(numero_d_image,fINTE(numero_d_image)))
                    Bblock
                    PRINT_ATTENTION("le numero de l'image courante n'est pas entier et va donc etre tronque");
                    Eblock
               ATes
                    Bblock
                    Eblock
               ETes
               EGAL(nom_image
                   ,COND(IFEQ_chaine(nom_postfixe,NOM_UNDEF_VIDE)
                        ,chain_Aconcaten2_sauf_nom_pipe(nom_imageA
                                                       ,chain_numero_modulo(INTE(numero_d_image),nombre_de_chiffres)
                                                        )
                        ,chain_Aconcaten3_sauf_nom_pipe(nom_imageA
                                                       ,chain_numero_modulo(INTE(numero_d_image),nombre_de_chiffres)
                                                       ,nom_postfixe
                                                        )
                         )
                    );
                                        /* Le 20221212115033, 'chain_numero_modulo(...)' a remplace 'chain_numero(...)'...           */

               Test(PAS_D_ERREUR(CODE_ERROR(Iload_image(ImageA,nom_image))))
                    Bblock
                                        /* 'ImageA' donne la couche a l'instant courant,                                             */
                    CALS(Ibinarisation(ImageA1,ImageA,seuil_de_binarisation));
                                        /* 'ImageA1' donne la couche binarisee a l'instant courant.                                  */
                    CALS(Istd_float(couche_courante
                                   ,FLOT(NIVA(SOUS(premiere_image,PREMIERE_IMAGE)))
                                   ,FLOT(NIVA(SOUS(ADD2(premiere_image,SOUS(derniere_image,numero_d_image)),PREMIERE_IMAGE)))
                                   ,ImageA1
                                    )
                         );
                                        /* Calcul de l'effet de transparence ; pour ce faire, les niveaux [NOIR,BLANC] de la couche  */
                                        /* 'numero_d_image' courante, sont ramenes dans :                                            */
                                        /* [premiere_image,premiere_image+(derniere_image-numero_d_image)],                          */
                                        /* cet intervalle tend vers [premiere_image,premiere_image], ce qui equivaut a [NOIR,NOIR]   */
                                        /* au fur et a mesure que l'on s'enfonce vers les arriere-plans. Il s'agit donc d'une        */
                                        /* transparence lineaire...                                                                  */
                    CALS(IFaddition(cumul_des_couches,cumul_des_couches,couche_courante));
                                        /* Et on cumule d'avant en arriere.                                                          */
                    Eblock
               ATes
                    Bblock
                    Test__CODE_ERREUR__ERREUR07;
                    Eblock
               ETes
               CALZ_FreCC(nom_image);
               Eblock
          EDoI
          CALS(Ifloat_std_avec_renormalisation(ImageR,cumul_des_couches));
                                        /* Enfin, on convertit en une image standard...                                              */
          CALi(Iupdate_image(nom_imageR,ImageR));

          EDEFV(imageF,couche_courante);
                                        /* Image flottante dans laquelle on trouve la couche courante apres attenuation, et          */
                                        /* binarisation par 'seuil_de_binarisation'.                                                 */
          EDEFV(imageF,cumul_des_couches);
                                        /* Image flottante dans laquelle on cumule les differentes couches d'avant en arriere.       */

          Eblock
     end_nouveau_block

     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.