/*************************************************************************************************************************************/
/* */
/* C O N V O L U T I O N V A R I A B L E D E L ' I M A G E A R G U M E N T : */
/* P A R L ' I N T E R M E D I A I R E D U G R A D I E N T L O C A L : */
/* */
/* */
/* Definition : */
/* */
/* Cette commande genere une image */
/* dont le nom est le premier argument */
/* d'appel ; elle est le resultat de */
/* la convolution de la deuxieme image */
/* par un noyau dont la longueur est */
/* variable et depend du gradient local. */
/* */
/* */
/* Author of '$xci/convol.03$K' : */
/* */
/* Jean-Francois COLONNA (LACTAMME, 1991??????????). */
/* */
/*************************************************************************************************************************************/
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* 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
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* P A R A M E T R E S : */
/* */
/*************************************************************************************************************************************/
#define SEUIL_DE_FAUX_VRAI_POUR_LES_NIVEAUX_A_TRAITER \
GRIS_4 \
/* Seuil de discrimination {FAUX,VRAI} introduit le 20060304185431 lors de l'entree de la */ \
/* liste des niveaux a traiter via une palette de couleur. */
#define EXCLURE_UN_NIVEAU_DE_LA_CONVOLUTION \
FAUX
#define NIVEAU_A_EXCLURE_DE_LA_CONVOLUTION \
NOIR
/* Faut-il ('VRAI') ou pas ('FAUX') exclure un niveau de la convolution (par defaut le */
/* NOIR) ? Cela fut introduit le 20060303101458... */
#define FACTEUR_MULTIPLICATIF_DE_CONVOLUTION \
FU \
/* Facteur multiplicatif du produit de convolution en chaque point {X,Y}. */
#define FACTEUR_DU_NOMBRE_DE_POINTS \
FDU \
/* Facteur par lequel on multiplie chaque gradient local pour obtenir la longueur */ \
/* courante du noyau au point {X,Y}. La valeur implicite (0.5) est choisie parce que, par */ \
/* definition du gradient, sa valeur maximale est 0.5, dont l'inverse vaut 2 ; le produit */ \
/* par 'FACTEUR_DU_NOMBRE_DE_POINTS' donnera 1, et ainsi le plus petit noyau... */
#define DEMI_TAILLE_MAXIMALE_DU_NOYAU \
DEUX \
/* Demi-cote maximum du noyau de convolution. */
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* M A C R O S U T I L E S : */
/* */
/*************************************************************************************************************************************/
#include xci/convol.01.I"
/* Introduits le 20060304190155 pour 'SELECTION_DES_NIVEAUX(...)'. */
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* C O N V O L U T I O N V A R I A B L E D E L ' I M A G E A R G U M E N T : */
/* P A R L ' I N T E R M E D I A I R E D U G R A D I E N T L O C A L : */
/* */
/*************************************************************************************************************************************/
BCommande(nombre_d_arguments,arguments)
/*-----------------------------------------------------------------------------------------------------------------------------------*/
Bblock
DEFV(CHAR,INIC(POINTERc(nom_imageR),NOM_PIPE));
DEFV(CHAR,INIC(POINTERc(nom_imageA),NOM_PIPE));
DEFV(genere_p,INIT(seuil_de_FAUX_VRAI_pour_les_niveaux_a_traiter,SEUIL_DE_FAUX_VRAI_POUR_LES_NIVEAUX_A_TRAITER));
DEFV(CHAR,INIC(POINTERc(nom_paletteA),NOM_PIPE));
/* Nom de la palette a utiliser eventuellement et seuil de discrimination {FAUX,VRAI} */
/* introduits le 20060304185431... */
DEFV(Logical,INIT(exclure_un_niveau_de_la_convolution,EXCLURE_UN_NIVEAU_DE_LA_CONVOLUTION));
DEFV(genere_p,INIT(niveau_a_exclure_de_la_convolution,NIVEAU_A_EXCLURE_DE_LA_CONVOLUTION));
/* Faut-il ('VRAI') ou pas ('FAUX') exclure un niveau de la convolution (par defaut le */
/* NOIR) ? Cela fut introduit le 20060303101458... */
DEFV(Logical,DTb1(niveaux_a_traiter,COULEURS));
/* Definit les niveaux sur lesquels on doit faire la convolution par 'Pconvolution()'. */
DEFV(Logical,DTb1(niveaux_cumulables,COULEURS));
/* Definit les niveaux cumulables lors du calcul de 'Pconvolution_____cumul_courant'. */
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}. */
DEFV(Positive,INIT(demi_taille_maximale_du_noyau,DEMI_TAILLE_MAXIMALE_DU_NOYAU));
/* Demi-cote maximum du noyau de convolution. */
/*..............................................................................................................................*/
GET_ARGUMENTSi(nombre_d_arguments
,BLOC(GET_ARGUMENT_C("imageA=""A=",nom_imageA);
GET_ARGUMENT_C("imageR=""R=",nom_imageR);
GET_ARGUMENT_C("paletteA=""palette=""pA=""p=",nom_paletteA);
GET_ARGUMENT_P("sp=""seuil_palette=",seuil_de_FAUX_VRAI_pour_les_niveaux_a_traiter);
GET_ARGUMENT_L("exclure=",exclure_un_niveau_de_la_convolution);
GET_ARGUMENT_P("niveau_a_exclure=""ne=",niveau_a_exclure_de_la_convolution);
GET_ARGUMENT_L("circulaire=",Pconvolution_____parcourir_circulairement_les_spirales_carrees);
/* Option introduite le 20040703110005... */
GET_ARGUMENT_L("circulaire_optimale="
,Pconvolution_____adapter_le_nombre_de_points_lors_du_parcours_circulaire_des_spirales_carrees
);
/* Option introduite le 20061224122039... */
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_F("fn=""facteur=""f=""FacteurNoyau=",facteur_multiplicatif);
/* Options introduites le 20070110100100 afin de rendre plus lisible la sortie de "use"... */
GET_ARGUMENT_F("fp=""FacteurPoints=""Facteur=",facteur_du_nombre_de_points);
/* Options introduites le 20070110100100 afin de rendre plus lisible la sortie de "use"... */
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("saut=",Pconvolution_____nombre_de_points_sautes);
GET_ARGUMENT_F("transfert=",Pconvolution_____exposant_de_la_fonction_de_transfert);
GET_ARGUMENT_I("spirale_horizontal=",SPIRALE_DEFINITION_____facteur_delta_horizontal);
GET_ARGUMENT_I("spirale_vertical=",SPIRALE_DEFINITION_____facteur_delta_vertical);
GET_ARGUMENT_I("noyau=""n=""N=",demi_taille_maximale_du_noyau);
)
);
CALi(Inoir(ImageR));
/* Initialisation de l'image Resultat. */
Test(PAS_D_ERREUR(CODE_ERROR(Iload_image(ImageA1,nom_imageA))))
/* Chargement de l'image a transformer. */
Bblock
SELECTION_DES_NIVEAUX(nom_paletteA,niveaux_a_traiter,niveaux_cumulables);
/* Introduit sous cette forme le 20060304185431... */
CALS(Iconvolution_en_fonction_du_gradient_local(ImageR
,facteur_multiplicatif
,ImageA1
,niveaux_a_traiter,niveaux_cumulables
,facteur_du_nombre_de_points
,demi_taille_maximale_du_noyau
)
);
/* Et convolution de l'image Argument. */
CALi(Iupdate_image(nom_imageR,ImageR));
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.