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