/*************************************************************************************************************************************/
/* */
/* I N I T I A L I S A T I O N D ' U N E I M A G E P A R U N C H A M P G A U S S I E N : */
/* */
/* */
/* Author of '$xci/gauss$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 : */
/* */
/*************************************************************************************************************************************/
#define GENERER_LES_GET_ARGUMENTS_DE_CONTROLE_DE_L_ARITHMETIQUE_ETENDUE_DES_NOMBRES_FLOTTANTS
/* Introduit le 20071224095359... */
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* 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
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* P A R A M E T R E S : */
/* */
/*************************************************************************************************************************************/
#include xci/genere_ch.01.I"
#define GAUSS \
FLOT(HUIT) \
/* Efficacite du gaussien, */
#define GAUSS_X2 \
FU
#define GAUSS_Y2 \
FU
#define GAUSS_Z2 \
FU
/* Ponderation des carres des coordonnees 'X', 'Y' et 'Z'. */
#define GAUSS_XY \
FZERO
#define GAUSS_YZ \
FZERO
#define GAUSS_ZX \
FZERO
/* Ponderation des produit de deux coordonnees. */
#define GAUSS_XYZ \
FZERO \
/* Ponderation du produit des trois coordonnees 'X', 'Y' et 'Z'. */
#define INSCRIRE_LE_CHAMP_GAUSSIEN_DANS_UN_CERCLE \
FAUX \
/* Indique si le champ gaussien doit etre inscrit dans un cercle et ce de facon a avoir */ \
/* du NOIR a la peripherie ('VRAI') ou pas ('FAUX'). Cela a ete introduit le 20141105132134, */ \
/* la valeur par defaut garantissant la compatibilite anterieure... */
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* M A C R O S U T I L E S : */
/* */
/*************************************************************************************************************************************/
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* I N I T I A L I S A T I O N D ' U N E I M A G E P A R U N C H A M P G A U S S I E N : */
/* */
/*************************************************************************************************************************************/
BCommande(nombre_d_arguments,arguments)
/*-----------------------------------------------------------------------------------------------------------------------------------*/
Bblock
DEFV(CHAR,INIC(POINTERc(nom_imageR),NOM_PIPE));
#include xci/genere_ch.02.I"
DEFV(Logical,INIT(inscrire_le_champ_gaussien_dans_un_cercle,INSCRIRE_LE_CHAMP_GAUSSIEN_DANS_UN_CERCLE));
/* Indique si le champ gaussien doit etre inscrit dans un cercle et ce de facon a avoir */
/* du NOIR a la peripherie ('VRAI') ou pas ('FAUX'). Cela a ete introduit le 20141105132134, */
/* la valeur par defaut garantissant la compatibilite anterieure... */
/*..............................................................................................................................*/
EGAL(Fgaussien_____coefficient,GAUSS);
EGAL(Fgaussien_____coefficient_X2,GAUSS_X2);
EGAL(Fgaussien_____coefficient_Y2,GAUSS_Y2);
EGAL(Fgaussien_____coefficient_Z2,GAUSS_Z2);
EGAL(Fgaussien_____coefficient_XY,GAUSS_XY);
EGAL(Fgaussien_____coefficient_YZ,GAUSS_YZ);
EGAL(Fgaussien_____coefficient_ZX,GAUSS_ZX);
EGAL(Fgaussien_____coefficient_XYZ,GAUSS_XYZ);
/* Definition du champ gaussien... */
#include xci/genere_ch.03.I"
#include xci/genere_ch.11.I"
GET_ARGUMENTSi(nombre_d_arguments
,BLOC(GET_ARGUMENT_C("imageR=""R=",nom_imageR);
GET_ARGUMENT_L("standard=",les_images_sont_standards);
PROCESS_ARGUMENT_L("arithmetique_etendue_gauss=""arieg=""ariec="
,Fgaussien____`use_arithmetique_etendue_et_non_basique
,BLOC(VIDE;)
,BLOC(Bblock
EGAL(si_le_GooF_est_activable`use_arithmetique_etendue_et_non_basique
,Fgaussien____`use_arithmetique_etendue_et_non_basique
);
Eblock
)
);
PROCESS_ARGUMENT_N("arithmetique_de_base_gauss=""aribg=""aribc="
,Fgaussien____`use_arithmetique_etendue_et_non_basique
,BLOC(VIDE;)
,BLOC(Bblock
EGAL(si_le_GooF_est_activable`use_arithmetique_etendue_et_non_basique
,NOTL(Fgaussien____`use_arithmetique_etendue_et_non_basique)
);
/* Le 20071226163024 fut introduit le 'NOTL(...)' a cause de 'PROCESS_ARGUMENT_N(...)' car, */
/* en effet, lorsque le 'EGAL(...)' est execute, le parametre logique en cours de traitement */
/* est alors inverse ('v $xig/fonct$vv$DEF NOTL.valeur_L_par_defaut'). */
Eblock
)
);
/* Parametres d'arithmetique etendue introduits le 20071224095359... */
GET_ARGUMENT_F("c=",Fgaussien_____coefficient);
GET_ARGUMENT_F("cx2=",Fgaussien_____coefficient_X2);
GET_ARGUMENT_F("cy2=",Fgaussien_____coefficient_Y2);
GET_ARGUMENT_F("cz2=",Fgaussien_____coefficient_Z2);
GET_ARGUMENT_F("cxy=",Fgaussien_____coefficient_XY);
GET_ARGUMENT_F("cyz=",Fgaussien_____coefficient_YZ);
GET_ARGUMENT_F("czx=",Fgaussien_____coefficient_ZX);
GET_ARGUMENT_F("cxyz=",Fgaussien_____coefficient_XYZ);
PROCESS_ARGUMENTS_DE_PARAMETRAGE_3D_DE_____ACCES_A_UN_CHAMP_3D;
/* Introduit le 20060516103326... */
GET_ARGUMENT_L("cercle_inscrit=""cercle=",inscrire_le_champ_gaussien_dans_un_cercle);
/* Introduit le 20141105132134... */
)
);
#include xci/genere_ch.04.I"
GENERATION_DU_CHAMP_DEMANDE(Fgaussien
,nom_imageR
,AXPB(facteur_Zf,Zf,translation_Zf)
,Tf_ARGUMENT_INUTILE
,IFOU(EST_FAUX(les_images_sont_standards)
,IFET(EST_VRAI(les_images_sont_standards)
,IL_NE_FAUT_PAS(inscrire_le_champ_gaussien_dans_un_cercle)
)
)
);
/* L'argument 'Tf_ARGUMENT_INUTILE' a ete introduit le 20100209111608. */
/* */
/* Je rappelle le 20190408142741 que pour faire une gaussienne "carree" (et non pas */
/* "circulaire"...), il convient d'utiliser de plus les arguments suivants : */
/* */
/* arithmetique_etendue_gauss=VRAI */
/* pxADD2_ADD2=0 */
/* pxMAX2_ADD2=1 */
/* */
Test(IL_FAUT(inscrire_le_champ_gaussien_dans_un_cercle))
/* Possibilite introduite le 20141105132134 pour 'v $xiirc/.MANE.41.4.$U 20141105133848'... */
Bblock
Test(EST_VRAI(les_images_sont_standards))
Bblock
DEFV(genere_p,INIT(niveau_du_cercle
,load_point(ImageR
,COND(IFGE(dimX,dimY),Xmin2,Xmin)
,COND(IFGE(dimX,dimY),Ymin,Ymin2)
)
)
);
/* Le niveau du cercle est choisi sur un point proche du bord et ce en fonction du format */
/* de l'image... */
BSaveModifyVariable(genere_p,Ipasse_bande_____niveau_inferieur,niveau_du_cercle);
Test(IFLT(niveau_du_cercle,BLANC))
Bblock
EGAL(niveau_du_cercle,SUCN(niveau_du_cercle));
/* Afin de laisser une petite marge NOIRe autour du cercle... */
Eblock
ATes
Bblock
Eblock
ETes
CALS(Ipasse_bande(ImageR
,ImageR
,niveau_du_cercle,BLANC
,VRAI
)
);
/* Ainsi, l'exterieur du cercle prend le niveau du cercle... */
CALS(Inormalisation(ImageR,ImageR));
/* Enfin, renormalisation afin d'occuper tout [NOIR,BLANC]... */
CALi(Iupdate_image(nom_imageR,ImageR));
ESaveModifyVariable(genere_p,Ipasse_bande_____niveau_inferieur);
Eblock
ATes
Bblock
PRINT_ATTENTION("l'inscription dans un cercle ne peut se faire que pour une image en mode 'standard'");
Eblock
ETes
Eblock
ATes
Bblock
Eblock
ETes
RETU_Commande;
Eblock
ECommande