/*************************************************************************************************************************************/
/* */
/* I N T E G R A T I O N D ' U N E S E R I E D ' I M A G E S A V E C T R A N S P A R E N C E : */
/* */
/* */
/* Definition : */
/* */
/* Cette commande "empile" d'avant (la premiere */
/* image) en arriere (la derniere image) une */
/* serie d'images ; pour chaque point Resultat, */
/* on somme les points de memes coordonnees des */
/* images Arguments avec une ponderation fonction */
/* de l'eloignement. Enfin, les images Arguments */
/* sont binarisees au prealable... */
/* */
/* */
/* Author of '$xci/integre.02$K' : */
/* */
/* Jean-Francois COLONNA (LACTAMME, 1989??????????). */
/* */
/*************************************************************************************************************************************/
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* 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_QUAD_IMAGE_EXT
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* P A R A M E T R E S : */
/* */
/*************************************************************************************************************************************/
#include xci/sequence.01.I"
#define SEUIL_NOIR_BLANC \
GRIS \
/* Seuil de discrimination entre le 'NOIR' et le 'BLANC'... */
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* M A C R O S U T I L E S : */
/* */
/*************************************************************************************************************************************/
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* I N T E G R A T I O N D ' U N E S E R I E D ' I M A G E S A V E C T R A N S P A R E N C E : */
/* */
/*************************************************************************************************************************************/
BCommande(nombre_d_arguments,arguments)
/*-----------------------------------------------------------------------------------------------------------------------------------*/
Bblock
DEFV(CHAR,INIC(POINTERc(nom_imageA),NOM_PIPE));
/* Nom de la sequence a integrer. */
DEFV(CHAR,INIC(POINTERc(nom_postfixe),NOM_UNDEF_VIDE));
/* Nom d'un eventuel postfixe a placer derriere <nom_imageA><numero> (par exemple '$ROUGE'). */
DEFV(CHAR,INIC(POINTERc(nom_imageR),NOM_PIPE));
/* Nom du Resultat de l'integration. */
DEFV(genere_Float,INIT(premiere_image,FLOT(PREMIERE_IMAGE)));
/* Numero de la premiere image, */
DEFV(genere_Float,INIT(derniere_image,FLOT(DERNIERE_IMAGE)));
/* Numero de la derniere image. */
DEFV(genere_Float,INIT(pas_des_images,FLOT(PAS_DES_IMAGES)));
/* Pas de passage d'un numero d'image a une autre. */
DEFV(Int,INIT(nombre_de_chiffres,NOMBRE_DE_CHIFFRES));
/* Nombre de chiffres codant le numero des images de la serie... */
DEFV(genere_Float,INIT(numero_d_image,FLOT__UNDEF));
/* Numero de l'image courante. */
DEFV(CHAR,INIT(POINTERc(nom_image),NOM_UNDEF));
/* Nom courant des images. */
DEFV(genere_p,INIT(seuil_de_binarisation,SEUIL_NOIR_BLANC));
/* Seuil de selection entre le 'NOIR' et le 'BLANC'... */
/*..............................................................................................................................*/
GET_ARGUMENTSi(nombre_d_arguments
,BLOC(GET_ARGUMENT_C("imageA=""A=",nom_imageA);
GET_ARGUMENT_C("postfixe=",nom_postfixe);
GET_ARGUMENT_C("imageR=""R=",nom_imageR);
GET_ARGUMENT_F("premiere=",premiere_image);
GET_ARGUMENT_F("derniere=",derniere_image);
GET_ARGUMENT_F("pas=",pas_des_images);
GET_ARGUMENT_I("chiffres=",nombre_de_chiffres);
GET_ARGUMENT_P("seuil=",seuil_de_binarisation);
)
);
begin_nouveau_block
Bblock
BDEFV(imageF,cumul_des_couches);
/* Image flottante dans laquelle on cumule les differentes couches d'avant en arriere. */
BDEFV(imageF,couche_courante);
/* Image flottante dans laquelle on trouve la couche courante apres attenuation, et */
/* binarisation par 'seuil_de_binarisation'. */
CALi(IFinitialisation(cumul_des_couches,FZERO));
/* Nettoyage de l'image finale flottante... */
DoIn(numero_d_image,premiere_image,derniere_image,pas_des_images)
Bblock
Test(IFNE(numero_d_image,fINTE(numero_d_image)))
Bblock
PRINT_ATTENTION("le numero de l'image courante n'est pas entier et va donc etre tronque");
Eblock
ATes
Bblock
Eblock
ETes
EGAL(nom_image
,COND(IFEQ_chaine(nom_postfixe,NOM_UNDEF_VIDE)
,chain_Aconcaten2_sauf_nom_pipe(nom_imageA
,chain_numero_modulo(INTE(numero_d_image),nombre_de_chiffres)
)
,chain_Aconcaten3_sauf_nom_pipe(nom_imageA
,chain_numero_modulo(INTE(numero_d_image),nombre_de_chiffres)
,nom_postfixe
)
)
);
/* Le 20221212115033, 'chain_numero_modulo(...)' a remplace 'chain_numero(...)'... */
Test(PAS_D_ERREUR(CODE_ERROR(Iload_image(ImageA,nom_image))))
Bblock
/* 'ImageA' donne la couche a l'instant courant, */
CALS(Ibinarisation(ImageA1,ImageA,seuil_de_binarisation));
/* 'ImageA1' donne la couche binarisee a l'instant courant. */
CALS(Istd_float(couche_courante
,FLOT(NIVA(SOUS(premiere_image,PREMIERE_IMAGE)))
,FLOT(NIVA(SOUS(ADD2(premiere_image,SOUS(derniere_image,numero_d_image)),PREMIERE_IMAGE)))
,ImageA1
)
);
/* Calcul de l'effet de transparence ; pour ce faire, les niveaux [NOIR,BLANC] de la couche */
/* 'numero_d_image' courante, sont ramenes dans : */
/* [premiere_image,premiere_image+(derniere_image-numero_d_image)], */
/* cet intervalle tend vers [premiere_image,premiere_image], ce qui equivaut a [NOIR,NOIR] */
/* au fur et a mesure que l'on s'enfonce vers les arriere-plans. Il s'agit donc d'une */
/* transparence lineaire... */
CALS(IFaddition(cumul_des_couches,cumul_des_couches,couche_courante));
/* Et on cumule d'avant en arriere. */
Eblock
ATes
Bblock
Test__CODE_ERREUR__ERREUR07;
Eblock
ETes
CALZ_FreCC(nom_image);
Eblock
EDoI
CALS(Ifloat_std_avec_renormalisation(ImageR,cumul_des_couches));
/* Enfin, on convertit en une image standard... */
CALi(Iupdate_image(nom_imageR,ImageR));
EDEFV(imageF,couche_courante);
/* Image flottante dans laquelle on trouve la couche courante apres attenuation, et */
/* binarisation par 'seuil_de_binarisation'. */
EDEFV(imageF,cumul_des_couches);
/* Image flottante dans laquelle on cumule les differentes couches d'avant en arriere. */
Eblock
end_nouveau_block
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.