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