/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        G E N E R A T I O N   D ' U N   T R I A N G L E   E T   G E N E R A T I O N                                                */
/*        D ' U N   C H A M P   D E   P O T E N T I E L   P A R   F I L T R A G E   D E   F O U R I E R  :                           */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Author of '$xrq/triplet.20$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  :                                               */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
@define   PRAGMA_CPP_____MODULE_NON_DERIVABLE

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

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        P A R A M E T R E S  :                                                                                                     */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   NIVEAU_DE_MARQUAGE_DU_TRIPLET                                                                                                 \
                    BLANC                                                                                                               \
                                        /* Niveau de marquage des points.                                                            */
#define   NOM_DU_FILTRE                                                                                                                 \
                    "images/outils/GAUSS.8110"                                                                                          \
                                        /* Nom du filtre d'elimination des hautes frequences.                                        */
#define   SEUIL_D_ETALEMENT_DU_FILTRE                                                                                                   \
                    PARE(252)                                                                                                           \
                                        /* Definition de la partie superieure du spectre conservee dans les                          */ \
                                        /* frequences basses.                                                                        */
#define   X_TRANSLATION                                                                                                                 \
                    MOIT(dimX)                                                                                                          \
                                        /* Translation horizontale du noyau de convolution,                                          */
#define   Y_TRANSLATION                                                                                                                 \
                    MOIT(dimY)                                                                                                          \
                                        /* Translation verticale du noyau de convolution.                                            */
#nodefine NOM_DE_L_IMAGE                                                                                                                \
                    "images/tests/TRIPLET.21"
#define   NOM_DE_L_IMAGE                                                                                                                \
                    nom_imageR
                                        /* Nom de l'image a generer (mise "en conformite" le 20021103124836).                        */

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

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

     DEFV(Int,INIT(seuil_d_etalement_du_filtre,SEUIL_D_ETALEMENT_DU_FILTRE));
                                        /* Seuil de definition du masque d'extraction des frequences basses, ce qui signifie         */
                                        /* que l'on ne garde que les points appartenant au segment                                   */
                                        /* [seuil_d_etalement_du_filtre,BLANC] du filtre.                                            */
     DEFV(deltaF_2D,translation);
                                        /* Translation du champ.                                                                     */
     DEFV(genere_Float,INIT(minimum_reel_de_la_transformee,FLOT__UNDEF));
     DEFV(genere_Float,INIT(maximum_reel_de_la_transformee,FLOT__UNDEF));
                                        /* Donnent le minimum et le maximum de la partie reelle de la transformee                    */
                                        /* de Fourier, afin de faire ensuite la conversion en une image "standard"...                */
     DEFV(genere_Float,INIT(minimum_imaginaire_de_la_transformee,FLOT__UNDEF));
     DEFV(genere_Float,INIT(maximum_imaginaire_de_la_transformee,FLOT__UNDEF));
                                        /* Donnent le minimum et le maximum de la partie imaginaire de la transformee                */
                                        /* de Fourier.                                                                               */
     /*..............................................................................................................................*/
     GET_ARGUMENTSi(nombre_d_arguments
                   ,BLOC(GET_ARGUMENT_L("SX_SY_SZ_____compatibilite_20070416=""compatibilite_20070416="
                                       ,SX_SY_SZ_____compatibilite_20070416
                                        );
                                        /* Parametre introduit le 20070416161949...                                                  */

                         GET_ARGUMENT_C("imageR=""R=",nom_imageR);
                         )
                    );

     begin_nouveau_block
          Bblock
          BDEFV(imageJ,transformee_de_fourier_avant_filtrage);
                                        /* Image complexe contenant la transformee de Fourier complexe de l'image                    */
                                        /* Argument (avant filtrage).                                                                */
          BDEFV(imageJ,transformee_de_fourier_apres_filtrage);
                                        /* Image complexe contenant la transformee de Fourier complexe de l'image                    */
                                        /* Resultat (apres filtrage).                                                                */
          DEFV(Float,INIT(translation_OX,_____lNORMALISE_OX(X_TRANSLATION)));
          DEFV(Float,INIT(translation_OY,_____lNORMALISE_OY(Y_TRANSLATION)));
                                        /* Argument de translation du noyau initialise a priori en son centre...                     */

          CALS(FgERASE());
          CALS(Iinit_Z_Buffer());
          SET_ANTI_ALIASING(VRAI);
          SET_COULEURS(NOIR,NIVEAU_DE_MARQUAGE_DU_TRIPLET);

          SK(8);
                                        /* Definition de l'echelle globale.                                                          */
          SX(8);
                                        /* Definition de l'echelle sur l'axe des 'X'.                                                */
          SY(8);
                                        /* Definition de l'echelle sur l'axe des 'X'.                                                */
          SZ(8);
                                        /* Definition de l'echelle sur l'axe des 'Z'.                                                */
          g1;g1;g2;g2;gA;
                                        /* Positionnement.                                                                           */
          g1;g1;g1;g1;gB;
                                        /* Marquage du premier cote,                                                                 */
          g3;g3;g2;g2;g2;gB;
                                        /* Marquage du deuxieme cote,                                                                */
          g3;g3;g4;g4;g4;gB;
                                        /* Marquage du troisieme cote.                                                               */

          CALi(Inoir(ImageR));
                                        /* Initialisation de l'image Resultat.                                                       */
          INITIALISATION_ACCROISSEMENT_2D(translation,translation_OX,translation_OY);
                                        /* Definition de la translation sur le noyau.                                                */
          CALi(Iload_image(ImageA1,NOM_DU_FILTRE));
                                        /* A1 = image definissant le noyau de filtrage, et                                           */
                                        /* G  = image a filtrer.                                                                     */
          BoIn(niveau,NOIR,BLANC,PAS_COULEURS)
               Bblock
               MODIFICATION_LISTE_DE_SUBSTITUTION(niveau
                                                 ,GENP(COND(IFLE(niveau,seuil_d_etalement_du_filtre)
                                                           ,NOIR
                                                           ,MAX2(SCAL(SOUS(niveau,seuil_d_etalement_du_filtre)
                                                                     ,SOUS(BLANC,seuil_d_etalement_du_filtre)
                                                                     ,NIVR(BLANC)
                                                                      )
                                                                ,NOIR_PLANCHER
                                                                 )
                                                            )
                                                       )
                                                  );
                                        /* La liste de substitution (associee au masque) est telle que tout ce qui                   */
                                        /* est inferieur au seuil disparait ('NOIR'), et que les autres utilisent tout               */
                                        /* le "spectre" [NOIR_PLANCHER,BLANC].                                                       */
               Eblock
          EBoI
          SUBSTITUTION(L_SUBSTITUTION_VARIABLE);
          SET_FILTRAGE(ACTIF);
          CALS(Imove(ImageA2,ImageA1));
                                        /* A2 = filtre "etale".                                                                      */
          SET_FILTRAGE(INACTIF);
          CALS(Istd_float(IFmage_PR,FLOT__NOIR,FLOT__BLANC,ImageG));
          CALS(Istd_float(IFmage_PI,FLOT__NOIR,FLOT__BLANC,ImageR));
          CALS(Ireelle_complexe(IJmageA,IFmage_PR));
          CALS(Iimaginaire_complexe(IJmageA,IFmage_PI));
                                        /* Generation de l'image Argument complexe a transformee avec (ImageG,NOIR).                 */
          CALS(IJfourier_2D_directe_complexe(transformee_de_fourier_avant_filtrage,IJmageA));
                                        /* On fait la transformee directe,                                                           */
          CALS(IJfiltrage_multiplicatif(transformee_de_fourier_apres_filtrage
                                       ,transformee_de_fourier_avant_filtrage
                                       ,ImageA2
                                       ,ImageA2
                                       ,ADRESSE(translation)
                                       ,ADRESSE(translation)
                                        )
               );
                                        /* Filtrage par le noyau "etale",                                                            */
          CALS(IJfourier_2D_inverse_complexe(IJmageR,transformee_de_fourier_apres_filtrage));
                                        /* Puis la transformee inverse.                                                              */
          CALS(Icomplexe_reelle(IFmage_PR,IJmageR));
          CALS(IFnivo_extrema(IFmage_PR
                             ,ADRESSE(minimum_reel_de_la_transformee)
                             ,ADRESSE(maximum_reel_de_la_transformee)
                              )
               );
                                        /* Recherche du minimum et du maximum de la partie reelle de la                              */
                                        /* transformee de Fourier inverse.                                                           */
          CALS(Icomplexe_imaginaire(IFmage_PI,IJmageR));
          CALS(IFnivo_extrema(IFmage_PI
                             ,ADRESSE(minimum_imaginaire_de_la_transformee)
                             ,ADRESSE(maximum_imaginaire_de_la_transformee)
                              )
               );
                                        /* Recherche du minimum et du maximum de la partie imaginaire de la                          */
                                        /* transformee de Fourier inverse.                                                           */
          Test(IFGE(SOUS(maximum_imaginaire_de_la_transformee,minimum_imaginaire_de_la_transformee)
                   ,SOUS(maximum_reel_de_la_transformee,minimum_reel_de_la_transformee)
                    )
               )
               Bblock
               PRINT_ERREUR("la partie imaginaire est trop importante");
               Eblock
          ATes
               Bblock
               Eblock
          ETes
          CALS(Ifloat_std(ImageR
                         ,IFmage_PR
                         ,minimum_reel_de_la_transformee
                         ,maximum_reel_de_la_transformee
                          )
               );
                                        /* Renormalisation du resultat...                                                            */

          CALi(Iupdate_image(NOM_DE_L_IMAGE,ImageR));

          EDEFV(imageJ,transformee_de_fourier_apres_filtrage);
                                        /* Image complexe contenant la transformee de Fourier complexe de l'image                    */
                                        /* Resultat (apres filtrage).                                                                */
          EDEFV(imageJ,transformee_de_fourier_avant_filtrage);
                                        /* Image complexe contenant la transformee de Fourier complexe de l'image                    */
                                        /* Argument (avant filtrage).                                                                */
          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.