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