/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        C A L C U L   D E   L A   P H A S E   E T   D U   M O D U L E   D E   L A   T R A N S F O R M E E                          */
/*        P A R   L ' O N D E L E T T E   D E   M O R L E T   D ' U N   S I G N A L   M O N O -                                      */
/*        D I M E N S I O N N E L   E X T R A I T   D ' U N E   I M A G E  :                                                         */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Author of '$xci/ondes.01$K' :                                                                                              */
/*                                                                                                                                   */
/*                    Jean-Francois COLONNA (LACTAMME, 1988??????????).                                                              */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        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  maths_trans_ONDELETTES_EXT
#include  image_image_QUAD_IMAGE_EXT

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        P A R A M E T R E S  :                                                                                                     */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   COEFFICIENT_A                                                                                                                 \
                    FZERO                                                                                                               \
                                        /* Coefficient 'A' de : A.X + B.Y - C = 0,                                                   */
#define   COEFFICIENT_B                                                                                                                 \
                    FU                                                                                                                  \
                                        /* Coefficient 'B' de : A.X + B.Y - C = 0,                                                   */
#define   COEFFICIENT_C                                                                                                                 \
                    FLOT(CHOI(Xcentre,Ycentre))                                                                                         \
                                        /* Coefficient 'C' de : A.X + B.Y - C = 0.                                                   */
#define   FREQUENCE_REELLE                                                                                                              \
                    CERCLE_TRIGONOMETRIQUE                                                                                              \
                                        /* Definition de la frequence "reelle",                                                      */
#define   FREQUENCE_IMAGINAIRE                                                                                                          \
                    CERCLE_TRIGONOMETRIQUE                                                                                              \
                                        /* Definition de la frequence "imaginaire".                                                  */
#define   ECHELLES_LINEAIRES                                                                                                            \
                    VRAI                                                                                                                \
                                        /* Indique si l'on utilise des echelles lineaires ('VRAI') ou logarithmiques ('FAUX').       */
#define   ECHELLE_MINIMALE                                                                                                              \
                    FLOT(COND(IL_FAUT(ECHELLES_LINEAIRES)                                                                               \
                             ,SLLS(BIT                                                                                                  \
                                  ,UN                                                                                                   \
                                   )                                                                                                    \
                             ,ZERO                                                                                                      \
                              )                                                                                                         \
                         )                                                                                                              \
                                        /* Valeur minimale du parametre d'echelle,                                                   */
#define   ECHELLE_MAXIMALE                                                                                                              \
                    FLOT(COND(IL_FAUT(ECHELLES_LINEAIRES)                                                                               \
                             ,SLLS(BIT                                                                                                  \
                                  ,HUIT                                                                                                 \
                                   )                                                                                                    \
                             ,DEUX                                                                                                      \
                              )                                                                                                         \
                         )                                                                                                              \
                                        /* Valeur maximale du parametre d'echelle.                                                   */

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

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        C A L C U L   D E   L A   P H A S E   E T   D U   M O D U L E   D E   L A   T R A N S F O R M E E                          */
/*        P A R   L ' O N D E L E T T E   D E   M O R L E T   D ' U N   S I G N A L   M O N O -                                      */
/*        D I M E N S I O N N E L   E X T R A I T   D ' U N E   I M A G E  :                                                         */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
BCommande(nombre_d_arguments,arguments)
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     DEFV(CHAR,INIC(POINTERc(nom_imageRR),NOM_PIPE));
     DEFV(CHAR,INIC(POINTERc(nom_imageRI),NOM_PIPE));
     DEFV(CHAR,INIC(POINTERc(nom_imageRP),NOM_PIPE));
     DEFV(CHAR,INIC(POINTERc(nom_imageRM),NOM_PIPE));
     DEFV(CHAR,INIC(POINTERc(nom_imageA),NOM_PIPE));
     DEFV(Float,INIT(coefficient_A,COEFFICIENT_A));
                                        /* Coefficient 'A' de : A.X + B.Y - C = 0,                                                   */
     DEFV(Float,INIT(coefficient_B,COEFFICIENT_B));
                                        /* Coefficient 'B' de : A.X + B.Y - C = 0,                                                   */
     DEFV(Float,INIT(coefficient_C,COEFFICIENT_C));
                                        /* Coefficient 'C' de : A.X + B.Y - C = 0.                                                   */
     DEFV(Int,INIT(index_de_la_fonction,Xmin));
                                        /* Index d'initialisation de la fonction.                                                    */
     DEFV(coeffF_2D,frequences);
                                        /* Frequences reelle et imaginaire.                                                          */
     DEFV(Logical,INIT(echelles_lineaires,ECHELLES_LINEAIRES));
                                        /* Indique si l'on utilise des echelles lineaires ('VRAI') ou logarithmiques ('FAUX').       */
     DEFV(Float,INIT(echelle_minimale,ECHELLE_MINIMALE));
                                        /* Definition de l'echelle minimale d'observation,                                           */
     DEFV(Float,INIT(echelle_maximale,ECHELLE_MAXIMALE));
                                        /* Definition de l'echelle maximale d'observation.                                           */
     /*..............................................................................................................................*/
     INITIALISATION_COEFFICIENT_2D(frequences,FREQUENCE_REELLE,FREQUENCE_IMAGINAIRE);
                                        /* Initialisation a priori des frequences reelle et imaginaire.                              */
     GET_ARGUMENTSi(nombre_d_arguments
                   ,BLOC(GET_ARGUMENT_C("imageA=""A=",nom_imageA);
                         GET_ARGUMENT_C("imageRR=""RR=",nom_imageRR);
                         GET_ARGUMENT_C("imageRI=""RI=",nom_imageRI);
                         GET_ARGUMENT_C("imageRM=""RM=",nom_imageRM);
                         GET_ARGUMENT_C("imageRP=""RP=",nom_imageRP);
                         GET_ARGUMENT_F("ca=""cA=""Ca=""CA=",coefficient_A);
                         GET_ARGUMENT_F("cb=""cB=""Cb=""CB=",coefficient_B);
                         GET_ARGUMENT_F("cc=""cC=""Cc=""CC=",coefficient_C);
                         GET_ARGUMENT_L("lineaire=",echelles_lineaires);
                         GET_ARGUMENT_F("min=",echelle_minimale);
                         GET_ARGUMENT_F("max=",echelle_maximale);
                         GET_ARGUMENT_F("fr=""Fr=",ASD1(frequences,cx));
                         GET_ARGUMENT_F("fi=""Fi=",ASD1(frequences,cy));
                         )
                    );
     CALi(Inoir(ImageA1));
     CALi(Inoir(ImageA2));
     CALi(Inoir(ImageA3));
     CALi(Inoir(ImageA4));
                                        /* Initialisation de quatre images Resultat avant le changement eventuel de (pasX,pasY).     */
     Test(PAS_D_ERREUR(CODE_ERROR(Iload_image(ImageA,nom_imageA))))
          Bblock
          BDEFV(ligneD,fonction);
                                        /* Ligne contenant la definition de la fonction ; la fonction est en fait un segment de      */
                                        /* de droite d'equation :                                                                    */
                                        /*                                                                                           */
                                        /*                  A.X + B.Y - C = 0                                                        */
                                        /*                                                                                           */
                                        /* extrait de l'image argument.                                                              */
          PUSH_ECHANTILLONNAGE;
          SET_ECHANTILLONNAGE(PasX,PasY);

          begin_ligne
               Bblock
               EGAL(LIGNE(fonction,X,Ymin),FZERO);
                                        /* Initialisation a priori a zero de la fonction...                                          */
               Eblock
          end_ligne

          PULL_ECHANTILLONNAGE;

          begin_image
               Bblock
               Test(IZEQ(INTE(LIN2(coefficient_A,FLOT(X),coefficient_B,FLOT(Y),NEGA(coefficient_C))
                              )
                         )
                    )
                    Bblock
                    EGAL(LIGNE(fonction,MIN2(index_de_la_fonction,Xmax),Ymin)
                        ,______NORMALISE_NIVEAU(load_point(ImageA,X,Y))
                         );
                                        /* On extrait un segment lineaire de l'image Argument.                                       */
                    INCR(index_de_la_fonction,pasX);
                                        /* Et progression de l'index de la fonction.                                                 */
                    Eblock
               ATes
                    Bblock
                    Eblock
               ETes
               Eblock
          end_image

          Test(IFEQ(index_de_la_fonction,Xmin))
               Bblock
               PRINT_ATTENTION("aucun point pour la fonction : incompatibilite (A,B,C) et (pasX,pasY)");
               Eblock
          ATes
               Bblock
               CALS(Iondelettes_1D_complexes(ImageA1,ImageA2
                                            ,ImageA3,ImageA4
                                            ,fonction
                                            ,ADRESSE(frequences)
                                            ,echelles_lineaires,echelle_minimale,echelle_maximale
                                             )
                    );
                                        /* A1 : partie reelle de la transformee mono-dimensionnelle,                                 */
                                        /* A2 : partie imaginaire de la transformee mono-dimensionnelle,                             */
                                        /* A3 : module de la fonction mono-dimensionnelle,                                           */
                                        /* A4 : phase de la fonction mono-dimensionnelle.                                            */
               CALi(Iupdate_image(nom_imageRR,ImageA1));
               CALi(Iupdate_image(nom_imageRI,ImageA2));
               CALi(Iupdate_image(nom_imageRM,ImageA3));
               CALi(Iupdate_image(nom_imageRP,ImageA4));
               Eblock
          ETes

          EDEFV(ligneD,fonction);
                                        /* Ligne contenant la definition de la fonction ; la fonction est en fait un segment de      */
                                        /* de droite d'equation :                                                                    */
                                        /*                                                                                           */
                                        /*                  A.X + B.Y - C = 0                                                        */
                                        /*                                                                                           */
                                        /* extrait de l'image argument.                                                              */

          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.