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