/*************************************************************************************************************************************/ /* */ /* G R A D I E N T " S I M P L I F I E " D ' U N E I M A G E F L O T T A N T E : */ /* */ /* */ /* Author of '$xci/gradient.02$K' : */ /* */ /* Jean-Francois COLONNA (LACTAMME, 1998??????????). */ /* */ /*************************************************************************************************************************************/ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* 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 /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* P A R A M E T R E S : */ /* */ /*************************************************************************************************************************************/ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* M A C R O S U T I L E S : */ /* */ /*************************************************************************************************************************************/ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* G R A D I E N T " S I M P L I F I E " D ' U N E I M A G E F L O T T A N T E : */ /* */ /*************************************************************************************************************************************/ BCommande(nombre_d_arguments,arguments) /*-----------------------------------------------------------------------------------------------------------------------------------*/ Bblock DEFV(CHAR,INIC(POINTERc(nom_imageR),NOM_PIPE)); DEFV(CHAR,INIC(POINTERc(nom_imageA),NOM_PIPE)); /*..............................................................................................................................*/ GET_ARGUMENTSi(nombre_d_arguments ,BLOC(GET_ARGUMENT_C("imageA=""A=",nom_imageA); GET_ARGUMENT_C("imageR=""R=",nom_imageR); GET_ARGUMENT_L("gradient_moyen=",IFgradient_simplifie_____evaluer_le_gradient_local_moyen); GET_ARGUMENT_L("histogramme=",IFgradient_simplifie_____calculer_l_histogramme); GET_ARGUMENT_L("module=",IFgradient_simplifie_____calculer_le_module); GET_ARGUMENT_L("periodiser_X=""periodX=",IFgradient_simplifie_____periodiser_X); GET_ARGUMENT_L("periodiser_Y=""periodY=",IFgradient_simplifie_____periodiser_Y); GET_ARGUMENT_L("symetriser_X=""symetrX=",IFgradient_simplifie_____symetriser_X); GET_ARGUMENT_L("symetriser_Y=""symetrY=",IFgradient_simplifie_____symetriser_Y); GET_ARGUMENT_L("prolonger_X=""prolX=",IFgradient_simplifie_____prolonger_X); GET_ARGUMENT_L("prolonger_Y=""prolY=",IFgradient_simplifie_____prolonger_Y); GET_ARGUMENT_F("niveau_hors_image=""niveau=",IFgradient_simplifie_____niveau_hors_image); GET_ARGUMENT_L("v8=""sv=""seconds_voisins=" ,IFgradient_simplifie_____utiliser_les_4_premiers_voisins_et_aussi_les_4_seconds_voisins ); GET_ARGUMENT_N("v4=""pv=""premiers_voisins=" ,IFgradient_simplifie_____utiliser_les_4_premiers_voisins_et_aussi_les_4_seconds_voisins ); /* Options introduites le 20171128171947... */ GET_ARGUMENT_F("pS=",IFgradient_simplifie_____ponderation_des_voisins___Sud); GET_ARGUMENT_F("pO=",IFgradient_simplifie_____ponderation_des_voisins_Ouest); GET_ARGUMENT_F("pN=",IFgradient_simplifie_____ponderation_des_voisins__Nord); GET_ARGUMENT_F("pE=",IFgradient_simplifie_____ponderation_des_voisins___Est); GET_ARGUMENT_L("normaliser=",IFgradient_simplifie_____normaliser_les_gradients_3x3); GET_ARGUMENT_L("circulaire=",IFgradient_simplifie_____domaine_circulaire); GET_ARGUMENT_I("dimensionX=""demi_dimension_X=""dX=",IFgradient_simplifie_____demi_dimension_X); GET_ARGUMENT_I("dimensionY=""demi_dimension_Y=""dY=",IFgradient_simplifie_____demi_dimension_Y); GET_ARGUMENT_I("facteur_du_pas_en_X=""facteurX=" ,IFgradient_simplifie_____facteur_du_pas_en_X ); GET_ARGUMENT_I("facteur_du_pas_en_Y=""facteurY=" ,IFgradient_simplifie_____facteur_du_pas_en_Y ); /* Introduit le 20230408115926 acr oublie depuis bien longtemps... */ GET_ARGUMENT_F("echelleX=",IFgradient_simplifie_____echelle_en_X_de_l_histogramme); GET_ARGUMENT_F("echelleY=",IFgradient_simplifie_____echelle_en_Y_de_l_histogramme); GET_ARGUMENT_F("translationX=",IFgradient_simplifie_____translation_en_X_de_l_histogramme); GET_ARGUMENT_F("translationY=",IFgradient_simplifie_____translation_en_Y_de_l_histogramme); ) ); CALi(IFinitialisation(IFmageR,FZERO)); /* Initialisation de l'image Resultat. */ Test(PAS_D_ERREUR(CODE_ERROR(IloadF_image(IFmageA,nom_imageA)))) Bblock CALS(IFgradient_simplifie(IFmageR,IFmageA)); /* Calcul du gradient. Lorsque 'IL_FAUT(IFgradient_simplifie_____calculer_l_histogramme)', */ /* on notera qu'il est preferable que 'IFmageA' soit dans [0,1] et ce afin que le vecteur */ /* gradient calcule ne soit pas plus grand qu'un vecteur unitaire (en particulier si elle */ /* provient d'une image 'EST_VRAI(les_images_sont_standards)', il sera preferable de lui */ /* appliquer '$xci/normalise.01$X' avant '$xci/gradient.02$X'. Ensuite, etant donne que l'on */ /* calcule finalement des compteurs, il est possible que l'un deux l'emporte largement sur */ /* les autres (cas d'une image ayant, par exemple, un grand fond uniforme) ; alors, il est */ /* suggere d'appliquer '$xci/decibel.01$X' au resultat (tout ceci s'est vu lors de tests */ /* effectues avec la luminance de l'image 'v $xiirc/JULI.k1'). */ /* */ /* D'autre part, si l'image provient d'une image 'EST_VRAI(les_images_sont_standards)' et */ /* qu'elle n'a pas ete lissee (par 'v $xci/lissage$K'), l'histogramme du gradient est fait */ /* d'un nuage de points sur un reseau carre dont le pas est fonction de {echelleX,echelleY}. */ CALi(IupdateF_image(nom_imageR,IFmageR)); Eblock ATes Bblock Test__CODE_ERREUR__ERREUR07; Eblock ETes RETU_Commande; Eblock ECommande