/*************************************************************************************************************************************/ /* */ /* I N T E R P O L A T I O N E N T R E D E U X I M A G E S S U I V A N T U N P O N D E R A T E U R : */ /* */ /* */ /* Definition : */ /* */ /* Cette commande genere une image */ /* dont le nom est le premier argument */ /* d'appel ; elle est le resultat de */ /* l'interpolation entre les deux images */ /* Arguments suivant un Ponderateur et */ /* son complement. */ /* */ /* */ /* Exemple : */ /* */ /* La commande : */ /* */ /* $xci/interpole.02$X A1=$xiio/ETOILE.11 A2=$xiio/SPIRALE P=$xiio/GAUSS.8110 R=... $formatI */ /* */ /* donne le resultat suivant : */ /* */ /* */ /* ################################################################ */ /* ###%%%%%%%%%%%%%%%%%%%%%%%%%%%%####%%%%%%%%%%%%%%%%%%%%%%%%%%%## */ /* ###%%%OOOOOOOOOOOOOOOO%%%%%%%%%%%%%%%%%%%%%%%OOOOOOOOOOOOOO%%%## */ /* ###%%%OOOOOOOOOOOOOOOOOOOOOO%%%%%%%%%%OOOOOOOOOOOOOOOOOOOOO%%%## */ /* ###%%%OOOoooooooooooooOOOOOOOO%%%%%%OOOOOOOOooooooooooooOOO%%%## */ /* ###%%%OOOooo::::::ooooooooOOOOO%%%OOOOOOooooooooo::::oooOOO%%%## */ /* ###%%%OOOooo:::::::::::oooooOOOO%%OOOOooooo::::::::::oooOOO%%%## */ /* ###%%%OOOoooo::------::::oooOOOO%%OOOooo:::::-----:::oooOOO%%%## */ /* ###%%%OOOOooo:::--..----::oooOO%%%OOooo:::----.--:::oooOOOO%%%## */ /* ###%%%%OOOoooo:::--....--::ooOO%%%OOoo::--....---:::oooOOOO%%%## */ /* ###%%%%OOOOoooo:::---....--:ooO%%%OOo::-.....--::::oooOOOO%%%%## */ /* ###%%%%%OOOOooooo:::--.....-:oO%#%Oo:--....---:::ooooOOOOO%%%%## */ /* ####%%%%OOOOOOooooo::::--...-:o%#%O:-....--:::ooooooOOOOO%%%%%## */ /* ####%%%%%%OOOOOOOOOooooo::-...:O#O:-..--::ooooooOOOOOOOO%%%%%### */ /* #####%%%%%%%%OOOOOOOOOOOOOOoo-.:#o.-:ooOOOOOOOOOOOOOOO%%%%%%%### */ /* #####%%%%%%%%%%%%%%%%%%%########.%#######%%%%%%%%%%%%%%%%%%%#### */ /* ####%%%%%%%OOOOOOOOOOOOOOOoo:-.o#:.-ooOOOOOOOOOOOOOOO%%%%%%%#### */ /* ####%%%%%OOOOOOOooooooo::--..-oO#O:...-::ooooooOOOOOOOOO%%%%%### */ /* ###%%%%%OOOOOooooo::::--....-:O%#%o:-...--::::oooooOOOOOO%%%%### */ /* ###%%%%OOOOooooo:::---....--:oO%#%Oo:-.....--::::ooooOOOOO%%%%## */ /* ###%%%%OOOoooo::::--.....-::oOO%%%Ooo:--....---:::ooooOOOO%%%%## */ /* ###%%%OOOOooo:::---....--::ooOO%%%OOoo::--....--:::ooooOOO%%%%## */ /* ###%%%OOOoooo::---.----:::oooOO%%%OOooo:::---..--:::oooOOOO%%%## */ /* ###%%%OOOooo:::-----:::::oooOOO%%%OOOooo::::------::ooooOOO%%%## */ /* ###%%%OOOooo::::::::::oooooOOOO%%%OOOOoooo:::::::::::oooOOO%%%## */ /* ###%%%OOOooo:::::ooooooooOOOOOO%%%OOOOOooooooooo:::::oooOOO%%%## */ /* ###%%%OOOoooooooooooooOOOOOOOO%%%%%OOOOOOOOoooooooooooooOOO%%%## */ /* ###%%%OOOOOOOOOOOOOOOOOOOOO%%%%%%%%%%OOOOOOOOOOOOOOOOOOOOOO%%%## */ /* ###%%%OOOOOOOOOOOOOOO%%%%%%%%%%%%%%%%%%%%%%%OOOOOOOOOOOOOOO%%%## */ /* ###%%%%%%%%%%%%%%%%%%%%%%%%%%%####%%%%%%%%%%%%%%%%%%%%%%%%%%%%## */ /* ################################################################ */ /* ################################################################ */ /* */ /* */ /* ou l'on retrouve l'image 'A1' au centre (la ou la ponderation 'P' */ /* est forte), et l'image 'A2' a la peripherie (la ou la ponderation */ /* 'P' est faible, et donc la ou son complement est fort). */ /* */ /* */ /* Nota : */ /* */ /* Dans le cas ou le ponderateur "P=" est un masque binaire [NOIR,BLANC] */ /* on pourra proceder a une convolution preliminaire de celui-ci suivant : */ /* */ /* $xci/convol.01$X A=PONDERATEUR points=... $formatI | */ /* $xci/interpole.02$X A1=... A2=... R=... $formatI */ /* */ /* afin de faire une sorte d'anti-aliasing a la "frontiere" des deux */ /* images "A1=" et "A2=". */ /* */ /* */ /* Author of '$xci/interpole.02$K' : */ /* */ /* Jean-Francois COLONNA (LACTAMME, 1988??????????). */ /* */ /*************************************************************************************************************************************/ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* 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_PENT_IMAGE_EXT /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* P A R A M E T R E S : */ /* */ /*************************************************************************************************************************************/ #define INVERSER_LE_PONDERATEUR \ FAUX \ /* Faut-il inverser le ponderateur ('VRAI') ou le conserver tel quel ('FAUX') ? Ce parametre */ \ /* fut introduit le 20081021090238... */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* M A C R O S U T I L E S : */ /* */ /*************************************************************************************************************************************/ #define INVERSION_EVENTUELLE_DU_PONDERATEUR(ponderateur1,ponderateur2) \ COND(IL_NE_FAUT_PAS(inverser_le_ponderateur),ponderateur1,ponderateur2) \ /* Inversion eventuelle du ponderateur introduite le 20081021090238... */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* I N T E R P O L A T I O N E N T R E D E U X I M A G E S S U I V A N T U N P O N D E R A T E U R : */ /* */ /*************************************************************************************************************************************/ BCommande(nombre_d_arguments,arguments) /*-----------------------------------------------------------------------------------------------------------------------------------*/ Bblock DEFV(CHAR,INIC(POINTERc(nom_imageR),NOM_PIPE)); DEFV(CHAR,INIC(POINTERc(nom_imageA1),NOM_PIPE)); DEFV(CHAR,INIC(POINTERc(nom_imageA2),NOM_PIPE)); DEFV(CHAR,INIC(POINTERc(nom_imageP),NOM_PIPE)); DEFV(Logical,INIT(inverser_le_ponderateur,INVERSER_LE_PONDERATEUR)); /* Faut-il inverser le ponderateur ('VRAI') ou le conserver tel quel ('FAUX') ? Ce parametre */ /* fut introduit le 20081021090238... */ /*..............................................................................................................................*/ GET_ARGUMENTSi(nombre_d_arguments ,BLOC(GET_ARGUMENT_C("imageA1=""A1=",nom_imageA1); GET_ARGUMENT_C("imageA2=""A2=",nom_imageA2); GET_ARGUMENT_C("imageP=""P=",nom_imageP); GET_ARGUMENT_C("imageR=""R=",nom_imageR); GET_ARGUMENT_L("standard=",les_images_sont_standards); GET_ARGUMENT_L("methode_basique=""basique=""mb=",Iinterpolation_quelconque_____methode_basique); /* Argument introduit le 20240731130726 pour l'image 'v $xiirv/HELI.I4.pi_2pi'... */ GET_ARGUMENT_L("inverser_ponderateur=""inverser=""inv=",inverser_le_ponderateur); GET_ARGUMENT_L("complement_a_1=",IFcomplementation_____forcer_les_extrema); GET_ARGUMENT_F("minimum=""min=",IFcomplementation_____niveau_minimum); GET_ARGUMENT_F("maximum=""max=",IFcomplementation_____niveau_maximum); ) ); CALi(gInettoyage(les_images_sont_standards,ImageR,IFmageR)); /* Initialisation de l'image Resultat. */ Test(PAS_D_ERREUR(CODE_ERROR(gIload_image(les_images_sont_standards,ImageA1,IFmageA1,nom_imageA1)))) Bblock /* Chargement de la premiere image Argument. */ Test(PAS_D_ERREUR(CODE_ERROR(gIload_image(les_images_sont_standards,ImageA3,IFmageA3,nom_imageA2)))) Bblock /* Chargement de la deuxieme image Argument. */ Test(PAS_D_ERREUR(CODE_ERROR(gIload_image(les_images_sont_standards,ImageA2,IFmageA2,nom_imageP)))) Bblock /* Chargement de l'image de definition de la Ponderation, ou */ /* premier ponderateur, */ Test(EST_VRAI(les_images_sont_standards)) Bblock /* Cas d'une image 'image' : */ CALS(Icomplementation(ImageA4,ImageA2)); /* Puis generation du second ponderateur (complementaire du premier). */ CALS(Iinterpolation_quelconque(ImageR ,INVERSION_EVENTUELLE_DU_PONDERATEUR(ImageA2,ImageA4) ,ImageA1 ,INVERSION_EVENTUELLE_DU_PONDERATEUR(ImageA4,ImageA2) ,ImageA3 ) ); /* Et interpolation a l'aide des deux ponderateurs 'ImageA2' et 'ImageA4' */ /* entre les deux images arguments 'ImageA1' et 'ImageA3'. */ Eblock ATes Bblock /* Cas d'une image 'imageF' : */ CALS(IFcomplementation(IFmageA4,IFmageA2)); /* Puis generation du second ponderateur (complementaire du premier). */ CALS(IFinterpolation_quelconque(IFmageR ,INVERSION_EVENTUELLE_DU_PONDERATEUR(IFmageA2,IFmageA4) ,IFmageA1 ,INVERSION_EVENTUELLE_DU_PONDERATEUR(IFmageA4,IFmageA2) ,IFmageA3 ) ); /* Et interpolation a l'aide des deux ponderateurs 'IFmageA2' et 'IFmageA4' */ /* entre les deux images arguments 'IFmageA1' et 'IFmageA3'. */ Eblock ETes CALi(gIupdate_image(les_images_sont_standards,nom_imageR,ImageR,IFmageR)); Eblock ATes Bblock Test__CODE_ERREUR__ERREUR07; Eblock ETes Eblock ATes Bblock Test__CODE_ERREUR__ERREUR07; Eblock ETes Eblock ATes Bblock Test__CODE_ERREUR__ERREUR07; Eblock ETes RETU_Commande; Eblock ECommande