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



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.