/*************************************************************************************************************************************/
/* */
/* J E U D E L A V I E G E N E R A L I S E : */
/* */
/* */
/* Author of '$xci/jeu_vie.01$K' : */
/* */
/* Jean-Francois COLONNA (LACTAMME, 1994??????????). */
/* */
/*************************************************************************************************************************************/
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* 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 image_image_IMAGESF_EXT
/* Include introduit le 20240826142855... */
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* P A R A M E T R E S : */
/* */
/*************************************************************************************************************************************/
#define NOMBRE_DE_GENERATIONS \
UN \
/* Nombre de generations, la valeur par defaut garantissant la compatibilite anterieure. */ \
/* Ce parametre a ete introduit le 20090125120250... */
#define SEUIL_D_INHIBITION \
GRIS_4 \
/* Seuil de definition de l'autorisation (>=seuil) ou d'inhibition (<seuil) du noyau. */
#define FACTEUR_MULTIPLICATIF_DE_CONVOLUTION \
FU \
/* Facteur multiplicatif du produit de convolution en chaque point {X,Y}. */
#define FACTEUR_DU_NOMBRE_DE_POINTS \
INVE(FLOT(DIVI(FLOT(NIVR(BLANC)) \
,FLOT(EXP2(DOUP(DEUX))) \
) \
) \
) \
/* Facteur par lequel on multiplie chaque niveau de 'imageN' pour obtenir */ \
/* la longueur courante du noyau au point {X,Y}. */
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* M A C R O S U T I L E S : */
/* */
/*************************************************************************************************************************************/
#include xci/convol.01.I"
/* Introduits le 20190805120543 pour 'SELECTION_DES_NIVEAUX(...)'. */
#define CHOIX_IMAGE(image1,image2) \
COND(IL_NE_FAUT_PAS(permuter_les_deux_images),image1,image2) \
/* Ceci fut introduit le 20120429082425 afin de supprimer le 'Imove(...)' assez penalisant */ \
/* en terme de performance... */
#define ImageN \
ImageA1
#define ImageV \
ImageA2
#define ImageF \
ImageA3
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* J E U D E L A V I E G E N E R A L I S E : */
/* */
/*************************************************************************************************************************************/
BCommande(nombre_d_arguments,arguments)
/*-----------------------------------------------------------------------------------------------------------------------------------*/
Bblock
DEFV(CHAR,INIC(POINTERc(nom_imageR),NOM_PIPE));
DEFV(CHAR,INIC(POINTERc(nom_imageA),NOM_PIPE));
DEFV(CHAR,INIC(POINTERc(nom_imageN),NOM_PIPE));
DEFV(CHAR,INIC(POINTERc(nom_imageV),NOM_PIPE));
DEFV(CHAR,INIC(POINTERc(nom_imageF),NOM_PIPE));
/* Les trois images {N,V,F} ont ete introduites le 20190805120543... */
DEFV(Int,INIT(nombre_de_generations,NOMBRE_DE_GENERATIONS));
/* Nombre de generations, la valeur par defaut garantissant la compatibilite anterieure. */
/* Ce parametre a ete introduit le 20090125120250... */
/* */
/* On notera que grace a 'CHOIX_IMAGE(...)' l'image Resultat est identique a l'image */
/* Argument lorsque le nombre de generations est negatif ou nul... */
DEFV(genere_p,INIT(seuil_d_inhibition,SEUIL_D_INHIBITION));
/* Seuil de definition de l'autorisation (>=seuil) ou d'inhibition (<seuil) du noyau. */
DEFV(Float,INIT(facteur_multiplicatif,FACTEUR_MULTIPLICATIF_DE_CONVOLUTION));
/* Facteur multiplicatif du produit de convolution en chaque point {X,Y}. */
DEFV(Float,INIT(facteur_du_nombre_de_points,FACTEUR_DU_NOMBRE_DE_POINTS));
/* Facteur par lequel on multiplie chaque niveau de 'imageN' pour obtenir */
/* la longueur courante du noyau au point {X,Y}. */
/*..............................................................................................................................*/
GET_ARGUMENTSi(nombre_d_arguments
,BLOC(GET_ARGUMENT_C("imageA=""A=",nom_imageA);
GET_ARGUMENT_C("imageN=""N=",nom_imageN);
GET_ARGUMENT_C("imageV=""V=",nom_imageV);
GET_ARGUMENT_C("imageF=""F=",nom_imageF);
GET_ARGUMENT_C("imageR=""R=",nom_imageR);
GET_ARGUMENT_L("standard=",les_images_sont_standards);
/* Option introduite le 20240826142855... */
GET_ARGUMENT_L("tore=",Pconvolution_____placer_l_image_sur_un_tore);
GET_ARGUMENT_L("ponderations_utiles=",Pconvolution_____normaliser_uniquement_avec_les_ponderations_utilisees);
GET_ARGUMENT_I("pmX=",Pconvolution_____pasX_de_la_mosaique_de_convolution);
GET_ARGUMENT_I("pmY=",Pconvolution_____pasY_de_la_mosaique_de_convolution);
GET_ARGUMENT_I("tmX=",Pconvolution_____translationX_de_la_mosaique_de_convolution);
GET_ARGUMENT_I("tmY=",Pconvolution_____translationY_de_la_mosaique_de_convolution);
GET_ARGUMENT_I("sautC=""saut=",Pconvolution_____nombre_de_points_sautes);
GET_ARGUMENT_I("sautN=",CALCUL_D_UN_NOYAU_DE_CONVOLUTION_VARIABLE_____Pnoyau_nombre_de_points_sautes);
GET_ARGUMENT_I("spirale_horizontal=",SPIRALE_DEFINITION_____facteur_delta_horizontal);
GET_ARGUMENT_I("spirale_vertical=",SPIRALE_DEFINITION_____facteur_delta_vertical);
GET_ARGUMENT_F("Pcumul=""Pcum=",Pconvolution_____ponderation_de_cumul_courant_normalise_apres_transfert);
GET_ARGUMENT_F("Pminimum=""Pmin=",Pconvolution_____ponderation_de_Pconvolution_____minimum_sur_la_spirale);
GET_ARGUMENT_F("Pmaximum=""Pmax=",Pconvolution_____ponderation_de_Pconvolution_____maximum_sur_la_spirale);
GET_ARGUMENT_F("Pmoyenne=""Pmoy=",Pconvolution_____ponderation_de_Pconvolution_____moyenne_sur_la_spirale);
GET_ARGUMENT_L("conserver_minimum=""cmin="
,Pconvolution_____conserver_le_niveau_du_centre_de_la_spirale_s_il_est_le_minimum
);
GET_ARGUMENT_L("conserver_maximum=""cmax="
,Pconvolution_____conserver_le_niveau_du_centre_de_la_spirale_s_il_est_le_maximum
);
GET_ARGUMENT_P("seuil=",seuil_d_inhibition);
GET_ARGUMENT_F("fc=""facteur_convolution=""facteur=""f=",facteur_multiplicatif);
GET_ARGUMENT_F("fp=""facteur_points=""Facteur=",facteur_du_nombre_de_points);
/* Options introduites le 20190805120543... */
GET_ARGUMENT_L("circulaire=",Pconvolution_____parcourir_circulairement_les_spirales_carrees);
/* Option introduite le 20040703110338... */
GET_ARGUMENT_L("circulaire_optimale="
,Pconvolution_____adapter_le_nombre_de_points_lors_du_parcours_circulaire_des_spirales_carrees
);
/* Option introduite le 20061224122843... */
GET_ARGUMENTS2_I("taille=""noyau=""demi_taille="
,Ijeu_de_la_vie_generalise_____demi_taille_du_noyau
,IFjeu_de_la_vie_generalise_____demi_taille_du_noyau
);
GET_ARGUMENT_I("nombre_generations=""generations=""ng=""iterations=""iter=",nombre_de_generations);
/* Option introduite le 20090125120250 et completee le 20090126113528 ("iterations=",...). */
GET_ARGUMENTS4_F("force_vie=""fv="
,Ijeu_de_la_vie_generalise_____force_de_la_vie
,Ijeu_de_la_vie_generalise_variable_____force_de_la_vie
,IFjeu_de_la_vie_generalise_____force_de_la_vie
,IFjeu_de_la_vie_generalise_variable_____force_de_la_vie
);
GET_ARGUMENTS2_F("rapport_critique=""rc="
,Ijeu_de_la_vie_generalise_____rapport_critique
,IFjeu_de_la_vie_generalise_____rapport_critique
);
GET_ARGUMENTS2_F("rapport_critique_variable=""rcv="
,Ijeu_de_la_vie_generalise_variable_____rapport_critique
,IFjeu_de_la_vie_generalise_variable_____rapport_critique
);
/* Options introduites le 20090125100558... */
/* */
/* On notera que l'on ne peut utiliser 'GET_ARGUMENTS2_F(...)' ici car les valeurs par */
/* defaut pour 'Ijeu_de_la_vie_generalise(...)' et 'Ijeu_de_la_vie_generalise_variable(...)' */
/* sont differentes ('v $xig/fonct$vv$DEF 20190806104105' a ce propos). */
/* */
/* Je note le 20240826142855 que le commentaire precedent relatif a 'GET_ARGUMENTS2_F(...)' */
/* concerne evidemment "rc=" et "rcv=" qui ne peuvent etre regroupes a cette date en un */
/* seul 'GET_ARGUMENTS4_F(...)'... */
GET_ARGUMENT_L("messages_noyau_convolution_variable=""messages=""mncv="
,CALCUL_D_UN_NOYAU_DE_CONVOLUTION_VARIABLE_____editer_les_messages_du_calcul
);
/* Options introduites le 20190805124137... */
)
);
CALi(gInettoyage(les_images_sont_standards,ImageR,IFmageR));
/* Initialisation de l'image Resultat. */
BSaveModifyVariable(Logical,Iload_image_____un_nom_absent_est_une_erreur,FAUX);
CALi(Iload_image(ImageN,nom_imageN));
CALi(Iload_image(ImageV,nom_imageV));
CALi(Iload_image(ImageF,nom_imageF));
ESaveModifyVariable(Logical,Iload_image_____un_nom_absent_est_une_erreur);
Test(PAS_D_ERREUR(CODE_ERROR(gIload_image(les_images_sont_standards,ImageA,IFmageA,nom_imageA))))
Bblock
DEFV(Logical,INIT(permuter_les_deux_images,FAUX));
/* Ceci fut introduit le 20120429082425 afin de supprimer le 'Imove(...)' assez penalisant */
/* en terme de performance... */
Repe(nombre_de_generations)
Bblock
Test(I3ET(IFEQ_chaine(nom_imageN,NOM_PIPE),IFEQ_chaine(nom_imageV,NOM_PIPE),IFEQ_chaine(nom_imageF,NOM_PIPE)))
/* Test introduit le 20190805120543... */
Bblock
CALS(gIjeu_de_la_vie_generalise(les_images_sont_standards
,CHOIX_IMAGE(ImageR,ImageA),CHOIX_IMAGE(IFmageR,IFmageA)
,CHOIX_IMAGE(ImageA,ImageR),CHOIX_IMAGE(IFmageA,IFmageR)
)
);
/* Jeu de la vie generalise... */
Eblock
ATes
Bblock
CALS(gIjeu_de_la_vie_generalise_variable(les_images_sont_standards
,CHOIX_IMAGE(ImageR,ImageA),CHOIX_IMAGE(IFmageR,IFmageA)
,facteur_multiplicatif
,CHOIX_IMAGE(ImageA,ImageR),CHOIX_IMAGE(IFmageA,IFmageR)
,facteur_du_nombre_de_points
,ImageN
,ImageV
,ImageF
,seuil_d_inhibition
)
);
/* Jeu de la vie generalise variable (introduit le 20190805120543...). */
Eblock
ETes
EGAL(permuter_les_deux_images,NOTL(permuter_les_deux_images));
Eblock
ERep
EGAL(permuter_les_deux_images,NOTL(permuter_les_deux_images));
CALi(gIupdate_image(les_images_sont_standards,nom_imageR,ImageR,IFmageR));
Eblock
ATes
Bblock
Test__CODE_ERREUR__ERREUR07;
Eblock
ETes
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.