/*************************************************************************************************************************************/ /* */ /* G E N E R A T I O N D ' U N C H A M P C O M P L E T E M E N T A L E A T O I R E P A R N I V E A U X : */ /* */ /* */ /* Definition : */ /* */ /* Cette commande genere dans l'image */ /* nomme un champ completement aleatoire */ /* ("random") en ce qui concerne les niveaux. */ /* */ /* */ /* Author of '$xci/random.01$K' : */ /* */ /* Jean-Francois COLONNA (LACTAMME, 1987??????????). */ /* */ /*************************************************************************************************************************************/ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* 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 image_image_ALEATOIRES_1_EXT /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* P A R A M E T R E S : */ /* */ /*************************************************************************************************************************************/ #include xci/substitue.01.I" /* Introduit le 20110401191527... */ #define GRAINE \ PARE(1789) \ /* Graine initiale. */ \ /* */ \ /* Le 20081124153024 la valeur par defaut est passee de 'DEUX' a 'PARE(1789)' car, en */ \ /* effet, la valeur 'DEUX' donnait, quel que soit le '$formatI' les lignes d'ordonnees */ \ /* 'Ymin' (=0) et 'Ymin+2' (=2) identiques. A cette date-la, tous les '$Fnota's et les */ \ /* '$U's qui referencaient '$xci/random.01$X', sans specifier de graines, se sont vu */ \ /* modifier par ajout de l'argument : */ \ /* */ \ /* graine=2 */ \ /* */ \ /* assurant ainsi la compatibilite anterieure... */ #define BORNE_INFERIEURE \ FLOT__NOIR #define BORNE_SUPERIEURE \ FLOT__BLANC #define GARANTIR_L_EQUIREPARTITION \ VRAI \ /* Introduit le 20190124133051. Le 20190125092046 il y a eu passage de 'FAUX' a 'VRAI' car, */ \ /* en effet, c'est plus de garantir par defaut l'equirepartition... */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* M A C R O S U T I L E S : */ /* */ /*************************************************************************************************************************************/ #include xci/substitue.02.I" /* Introduit le 20110401191527... */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* G E N E R A T I O N D ' U N C H A M P C O M P L E T E M E N T A L E A T O I R E P A R N I V E A U X : */ /* */ /*************************************************************************************************************************************/ BCommande(nombre_d_arguments,arguments) /*-----------------------------------------------------------------------------------------------------------------------------------*/ Bblock DEFV(CHAR,INIC(POINTERc(nom_imageR),NOM_PIPE)); DEFV(Int,INIT(graine,GRAINE)); /* Graine du generateur aleatoire... */ DEFV(Float,INIT(borne_inferieure,BORNE_INFERIEURE)); DEFV(Float,INIT(borne_superieure,BORNE_SUPERIEURE)); DEFV(Logical,INIT(garantir_l_equirepartition,GARANTIR_L_EQUIREPARTITION)); /* Introduit le 20190124133051. Le 20190125092046 il y a eu passage de 'FAUX' a 'VRAI' car, */ /* en effet, c'est plus de garantir par defaut l'equirepartition... */ #include xci/substitue.03.I" /* Introduit le 20110401191527... */ /*..............................................................................................................................*/ GET_ARGUMENTSi(nombre_d_arguments ,BLOC(GET_ARGUMENT_L("equirepartition=""equi=",garantir_l_equirepartition); GET_ARGUMENT_N("compatibilite_20190124=",garantir_l_equirepartition); /* Parametres introduits le 20190124133051 et completes le 20190125091746 avec */ /* l'introduction de la compatibilite... */ GET_ARGUMENT_C("imageR=""R=",nom_imageR); GET_ARGUMENT_I("methode=",gen_ft_____methode_standard); GET_ARGUMENT_I("graine=",graine); GET_ARGUMENT_L("affiner_rdn=",rdnIFnD_____affiner_la_generation); GET_ARGUMENT_L("iterer_rdn=",rdnIFnD_____iterer_la_generation); GET_ARGUMENT_F("PrdnI2D_NEUT=""NEUT=",rdnI2D_____ponderation_NEUT); GET_ARGUMENT_F("PrdnI2D_GAUS=""GAUS=",rdnI2D_____ponderation_GAUS); GET_ARGUMENT_F("PrdnI2D_GAUS_esperance=""GAUS_esperance=",rdnI2D_____ponderation_GAUS_esperance_); GET_ARGUMENT_F("PrdnI2D_GAUS_ecart_type=""GAUS_ecart_type=",rdnI2D_____ponderation_GAUS_ecart_type); /* Parametres introduits le 20110325114739... */ CONTROLE_DE_L_ADAPTATION_A_UNE_LOI_DE_DISTRIBUTION_QUELCONQUE; /* Introduit le 20110401182358 sous cette forme... */ GET_ARGUMENT_F("borne_inferieure=""inf=",borne_inferieure); GET_ARGUMENT_F("borne_superieure=""sup=",borne_superieure); GET_ARGUMENT_L("standard=",les_images_sont_standards); GET_ARGUMENTS2_F("maximum_ouvert_ferme=""mof=" ,Irandom_niveaux_____maximum_ouvert ,Irandom_niveaux_____maximum_ferme ); /* Parametres introduits le 20190124113722 pour permettre de garantir, si besoin est, */ /* l'equirepartition des niveaux y compris aux deux extremites 'NOIR' et 'BLANC' d'un */ /* histogramme. On doit alors utiliser : */ /* */ /* maximum_ouvert_ferme=256 */ /* sup=256 */ /* */ /* D'ou l'introduction de 'garantir_l_equirepartition' le 20190124133051... */ GET_ARGUMENT_L("aleatoire=""a=",rdnI2D_____generer_une_valeur_aleatoire); GET_ARGUMENT_N("non_aleatoire=""na=",rdnI2D_____generer_une_valeur_aleatoire); GET_ARGUMENT_F("non_aleatoire_ponderation_X=""napx=",rdnI2D_____ponderation_X); GET_ARGUMENT_F("non_aleatoire_ponderation_Y=""napy=",rdnI2D_____ponderation_Y); GET_ARGUMENT_F("non_aleatoire_translation_XY=""natxy=",rdnI2D_____translation_XY); /* Parametres introduits le 20220116110147... */ GET_ARGUMENT_F("non_aleatoire_ponderation_de_NEUT=""napNEUT=" ,FfTransformUniverselle1_____ponderation_de_NEUT ); GET_ARGUMENT_F("non_aleatoire_ponderation_de_COSX=""napCOSX=" ,FfTransformUniverselle1_____ponderation_de_COSX ); GET_ARGUMENT_F("non_aleatoire_ponderation_de_SINX=""napSINX=" ,FfTransformUniverselle1_____ponderation_de_SINX ); GET_ARGUMENT_F("non_aleatoire_ponderation_de_TANX=""napTANX=" ,FfTransformUniverselle1_____ponderation_de_TANX ); GET_ARGUMENT_F("non_aleatoire_ponderation_de_ATAN=""napATAN=" ,FfTransformUniverselle1_____ponderation_de_ATAN ); GET_ARGUMENT_F("non_aleatoire_arg_x_ATAN=""naaxATAN=" ,FfTransformUniverselle1_____arg_x_ATAN ); GET_ARGUMENT_F("non_aleatoire_ponderation_de_COHX=""napCOHX=" ,FfTransformUniverselle1_____ponderation_de_COHX ); GET_ARGUMENT_F("non_aleatoire_ponderation_de_SIHX=""napSIHX=" ,FfTransformUniverselle1_____ponderation_de_SIHX ); GET_ARGUMENT_F("non_aleatoire_ponderation_de_TAHX=""napTAHX=" ,FfTransformUniverselle1_____ponderation_de_TAHX ); GET_ARGUMENT_F("non_aleatoire_ponderation_de_CSHX=""napCSHX=" ,FfTransformUniverselle1_____ponderation_de_CSHX ); GET_ARGUMENT_F("non_aleatoire_ponderation_de_SSHX=""napSSHX=" ,FfTransformUniverselle1_____ponderation_de_SSHX ); GET_ARGUMENT_F("non_aleatoire_ponderation_de_CTHX=""napCTHX=" ,FfTransformUniverselle1_____ponderation_de_CTHX ); GET_ARGUMENT_F("non_aleatoire_ponderation_de_ATAH=""napATAH=" ,FfTransformUniverselle1_____ponderation_de_ATAH ); GET_ARGUMENT_F("non_aleatoire_ponderation_de_SLOGX=""napSLOGX=" ,FfTransformUniverselle1_____ponderation_de_SLOGX ); GET_ARGUMENT_F("non_aleatoire_ponderation_de_EXPX=""napEXPX=" ,FfTransformUniverselle1_____ponderation_de_EXPX ); /* Parametres introduits le 20220116165734... */ ) ); #include xci/substitue.05.I" /* Introduit le 20110401191527... */ Test(EST_VRAI(les_images_sont_standards)) Bblock /* Cas d'une image 'image' (test introduit le 20190606122407...) : */ Test(IL_FAUT(garantir_l_equirepartition)) /* Test introduit le 20190124133051... */ Bblock Test(IFEQ(borne_superieure,BORNE_SUPERIEURE)) /* Test introduit le 20190606122407, le probleme ne se posant que si la borne superieure */ /* est vraiment "extremale"... */ Bblock EGAL(borne_superieure,SUCN(BORNE_SUPERIEURE)); EGAL(Irandom_niveaux_____maximum_ouvert,borne_superieure); EGAL(Irandom_niveaux_____maximum_ferme,borne_superieure); /* Ainsi, dans l'histogramme, 'BLANC' sera bien atteint a la fois a gauche (par exces) et */ /* a droite (par defaut). De plus, 'BLANC+1' sera lui-aussi atteint mais uniquement par */ /* la gauche (par exces) et se retrouvera, via le "modulo" dans [NOIR,BLANC], a completer */ /* le 'NOIR' qui lui n'est atteint que par la droite (par defaut). Il y a donc bien alors */ /* equirepartition... */ Eblock ATes Bblock Eblock ETes Eblock ATes Bblock Eblock ETes Eblock ATes Bblock Eblock ETes Test(IFOU(IFGT(borne_superieure,Irandom_niveaux_____maximum_ouvert) ,IFGT(borne_superieure,Irandom_niveaux_____maximum_ferme) ) ) Bblock PRINT_ATTENTION("les maxima 'ouvert' et 'ferme' sont rendus compatibles avec la borne superieure"); EGAL(Irandom_niveaux_____maximum_ouvert,borne_superieure); EGAL(Irandom_niveaux_____maximum_ferme,borne_superieure); /* Introduit le 20190124120742... */ Eblock ATes Bblock Eblock ETes CALi(gInettoyage(les_images_sont_standards,ImageR,IFmageR)); /* Initialisation de l'image Resultat. */ Test(EST_VRAI(les_images_sont_standards)) Bblock /* Cas d'une image 'image' : */ CALS(Irandom_niveaux(ImageR,graine,borne_inferieure,borne_superieure)); Eblock ATes Bblock /* Cas d'une image 'imageF' : */ CALS(IFrandom_niveaux(IFmageR,graine,borne_inferieure,borne_superieure)); Eblock ETes CALi(gIupdate_image(les_images_sont_standards,nom_imageR,ImageR,IFmageR)); RETU_Commande; Eblock ECommande