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