/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        D E F I N I T I O N S   D U   C A L C U L   D ' U N   S C A L A I R E   T Y P I Q U E  :                                   */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Definition :                                                                                                               */
/*                                                                                                                                   */
/*                    Ce fichier contient toutes les definitions                                                                     */
/*                  de base de calcul d'un scalaire typique d'une                                                                    */
/*                  images raster, quelle que soit la definition.                                                                    */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Author of '$xiii/scalaires$DEF' :                                                                                          */
/*                                                                                                                                   */
/*                    Jean-Francois COLONNA (LACTAMME, 19880000000000).                                                              */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*         C A L C U L   D U   M I N I M U M   D E S   N I V E A U X   D ' U N E   I M A G E   Q U E L C O N Q U E  :                */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   gInivo_minimum(les_images_sont_standards,imageA,FimageA)                                                                      \
                    COND(EST_VRAI(les_images_sont_standards)                                                                            \
                        ,Inivo_minimum(imageA)                                                                                          \
                        ,IFnivo_minimum(FimageA)                                                                                        \
                         )                                                                                                              \
                                        /* Calcul du minimum d'une image quelconque ("standard" ou "flottante").                     */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*         C A L C U L   D U   M A X I M U M   D E S   N I V E A U X   D ' U N E   I M A G E   Q U E L C O N Q U E  :                */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   gInivo_maximum(les_images_sont_standards,imageA,FimageA)                                                                      \
                    COND(EST_VRAI(les_images_sont_standards)                                                                            \
                        ,Inivo_maximum(imageA)                                                                                          \
                        ,IFnivo_maximum(FimageA)                                                                                        \
                         )                                                                                                              \
                                        /* Calcul du maximum d'une image quelconque ("standard" ou "flottante").                     */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*         A C C E S   A   L ' H I S T O G R A M M E  :                                                                              */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   ACCES_HISTOGRAMME(niveau)                                                                                                     \
                    ITb1(histogramme,INDX(niveau,NOIR))                                                                                 \
                                        /* Acces a la valeur de l'histogramme pour le niveau 'niveau'. On notera que cela peut       */ \
                                        /* etre tres utile pour, par exemple, savoir si deux images 'ImageA1' et 'ImageA2' sont      */ \
                                        /* identiques ; on fera alors :                                                              */ \
                                        /*                                                                                           */ \
                                        /*                  CALS(Ihistogramme(Ieor(ImageR,ImageA1,ImageA2));                         */ \
                                        /*                  Test(IFEQ(ACCES_HISTOGRAMME(NOIR),dimXY))                                */ \
                                        /*                       Bblock                                                              */ \
                                        /*                       <Les deux images sont parfaitement identiques>                      */ \
                                        /*                       Eblock                                                              */ \
                                        /*                  ATes                                                                     */ \
                                        /*                       Bblock                                                              */ \
                                        /*                       <Les deux images ont au moins une petite difference>                */ \
                                        /*                       Eblock                                                              */ \
                                        /*                  ETes                                                                     */ \
                                        /*                                                                                           */
#define   ACCES_HISTOGRAMME_CUMULE(niveau)                                                                                              \
                    ITb1(histogramme_cumule,INDX(niveau,NOIR))                                                                          \
                                        /* Acces a la valeur de l'histogramme "cumule" pour le niveau 'niveau'.                      */
#define   ACCES_HISTOGRAMME_CUMULE___NORMALISE(niveau)                                                                                  \
                    NORM(FLOT(ACCES_HISTOGRAMME_CUMULE(niveau)),FZERO,FLOT(dimXY))                                                      \
                                        /* Acces a la valeur de l'histogramme "cumule" pour le niveau 'niveau' mis dans [0,1].       */ \
                                        /*                                                                                           */ \
                                        /* Le 20050502092309, le nom 'ACCES_HISTOGRAMME_CUMULE_DENORMALISE(...)' a ete change en     */ \
                                        /* 'ACCES_HISTOGRAMME_CUMULE___NORMALISE(...)' beaucoup plus logique...                      */ \
                                        /*                                                                                           */ \
                                        /* Le 20081001135908, les 'FLOT(...)'s (essentiels !) ont ete introduits...                  */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        C A L C U L   D ' U N E   L I S T E   D E   S U B S T I T U T I O N                                                        */
/*        A   P A R T I R   D E   L ' H I S T O G R A M M E   C O U R A N T  :                                                       */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   V_NOIR                                                                                                                        \
                    BLANC                                                                                                               \
                                        /* Donne le numero du niveau le moins rempli.                                                */
#define   V_BLANC                                                                                                                       \
                    NOIR                                                                                                                \
                                        /* Donne le numero du niveau le plus rempli.                                                 */
#define   PREMIER_NIVEAU                                                                                                                \
                    ITb1(classement_des_niveaux,INDX(V_BLANC,V_BLANC))                                                                  \
                                        /* Acces au niveau le plus rempli...                                                         */
#define   SECOND_NIVEAU                                                                                                                 \
                    ITb1(classement_des_niveaux,INDX(SUCC(V_BLANC),V_BLANC))                                                            \
                                        /* Acces au niveau qui suit immediatement le plus rempli...                                  */
#define   DERNIER_NIVEAU                                                                                                                \
                    ITb1(classement_des_niveaux,INDX(V_NOIR,V_BLANC))                                                                   \
                                        /* Acces au niveau le moins rempli...                                                        */
#define   SET_SUBSTITUTION_HISTOGRAMME(premier_niveau_de_substitution,population_minimale,seuillage_des_niveaux)                        \
                                        /* Cette fonction permet de calculer la liste de substituition VARIABLE                      */ \
                                        /* en fonction de l'histogramme courant et de trois parametres :                             */ \
                                        /*                                                                                           */ \
                                        /*        'premier_niveau_de_substitution' : il donne le premier niveau de substitution      */ \
                                        /*                                           genere,                                         */ \
                                        /*        'population_minimale'            : donne la population minimale de regroupement    */ \
                                        /*                                           des niveaux ; s'il est nul, on prend la valeur  */ \
                                        /*                                           'Ihistogramme______nombre_de_points_maximal',   */ \
                                        /*        'seuillage_des_niveaux'          : qui est une valeur logique qui indique          */ \
                                        /*                                           si l'on va seuiller a 'BLANC', ou bien faire    */ \
                                        /*                                           un modulo dans [NOIR,BLANC].                    */ \
                                        /*                                                                                           */ \
                    Bblock                                                                                                              \
                    DEFV(Int,INIT(niveau_substitue_courant,premier_niveau_de_substitution));                                            \
                                        /* Donne en permanence le niveau de substitution courant ; celui-ci ne progresse             */ \
                                        /* que lorsque la population minimale est atteinte ou depassee...                            */ \
                    DEFV(Int,INIT(population_courante,ZERO));                                                                           \
                                        /* Donne en permanence la population courante cumule des niveaux anterieurs.                 */ \
                    Test(EST_VALIDE(Ihistogramme_____etat))                                                                             \
                         Bblock                                                                                                         \
                         BoIn(niveau_courant,NOIR,BLANC,PAS_COULEURS)                                                                   \
                              Bblock                                                                                                    \
                              EGAL(niveau_substitue_courant                                                                             \
                                  ,COND(EST_VRAI(seuillage_des_niveaux)                                                                 \
                                       ,MIN2(niveau_substitue_courant,BLANC)                                                            \
                                       ,MODU(niveau_substitue_courant,NOIR,BLANC)                                                       \
                                        )                                                                                               \
                                   );                                                                                                   \
                                        /* Traitement des sorties de [NOIR,BLANC]...                                                 */ \
                              MODIFICATION_LISTE_DE_SUBSTITUTION(niveau_courant,niveau_substitue_courant);                              \
                              INCR(population_courante,ACCES_HISTOGRAMME(niveau_courant));                                              \
                                        /* On cumule la population du niveau courant...                                              */ \
                              Test(IFGE(population_courante                                                                             \
                                       ,COND(IZGT(population_minimale)                                                                  \
                                            ,population_minimale                                                                        \
                                            ,COND(IFNE(PREMIER_NIVEAU,NOIR)                                                             \
                                                 ,ACCES_HISTOGRAMME(PREMIER_NIVEAU)                                                     \
                                                 ,ACCES_HISTOGRAMME(SECOND_NIVEAU)                                                      \
                                                  )                                                                                     \
                                             )                                                                                          \
                                        )                                                                                               \
                                   )                                                                                                    \
                                   Bblock                                                                                               \
                                   CLIR(population_courante);                                                                           \
                                        /* Lorsque la population courante a depasse le seuil, on la reinitialise,                    */ \
                                   INCR(niveau_substitue_courant,I);                                                                    \
                                        /* Et on incremente le niveau de substitution courant.                                       */ \
                                   Eblock                                                                                               \
                              ATes                                                                                                      \
                                   Bblock                                                                                               \
                                   Eblock                                                                                               \
                              ETes                                                                                                      \
                              Eblock                                                                                                    \
                         EBoI                                                                                                           \
                         Eblock                                                                                                         \
                    ATes                                                                                                                \
                         Bblock                                                                                                         \
                         PRINT_ERREUR("l'histogramme est invalide");                                                                    \
                         Eblock                                                                                                         \
                    ETes                                                                                                                \
                    Eblock

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        C A L C U L   D E   L A   D I M E N S I O N   F R A C T A L E                                                              */
/*        D E   " H A U S D O R F F "   G E N E R A L I S E E   D ' U N E   I M A G E  :                                             */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   DIMENSION_FRACTALE_NULLE                                                                                                      \
                    FZERO                                                                                                               \
                                        /* Valeur renvoyee pour la dimension fractale lorsqu'aucun point n'a ete                     */ \
                                        /* trouve lors du calcul des histogrammes successifs.                                        */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        C A L C U L   M A S Q U E   D U   N O M B R E   D E   P O I N T S                                                          */
/*        A P P A R T E N A N T   A   U N   C E R T A I N   I N T E R V A L L E                                                      */
/*        D A N S   U N E   I M A G E  :                                                                                             */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   gIcomptage_des_points_dans_un_intervalle(les_images_sont_standards,imageA,FimageA,niveau1,Fniveau1,niveau2,Fniveau2)          \
                    COND(EST_VRAI(les_images_sont_standards)                                                                            \
                        ,Icomptage_des_points_dans_un_intervalle(imageA,niveau1,niveau2)                                                \
                        ,IFcomptage_des_points_dans_un_intervalle(FimageA,Fniveau1,Fniveau2)                                            \
                         )                                                                                                              \
                                        /* Calcul du nombre de points appartenant a un certain intervalle (bornes incluses) dans     */ \
                                        /* une image.                                                                                */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        C A L C U L   M A S Q U E   D U   N O M B R E   D E   C O I N C I D E N C E S                                              */
/*        E N T R E   D E U X   I M A G E S  :                                                                                       */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   gIcomptage_des_coincidences(les_images_sont_standards,imageA1,FimageA1,imageA2,FimageA2)                                      \
                    COND(EST_VRAI(les_images_sont_standards)                                                                            \
                        ,Icomptage_des_coincidences(imageA1,imageA2)                                                                    \
                        ,IFcomptage_des_coincidences(FimageA1,FimageA2)                                                                 \
                         )                                                                                                              \
                                        /* Calcul du nombre de coincidences entre 2 images quelconques ("standard" ou "flottante").  */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        C A L C U L   D U   C E N T R E   D E   G R A V I T E   D ' U N E   I M A G E  :                                           */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   gIcentre_de_gravite(les_images_sont_standards,imageA,FimageA)                                                                 \
                    COND(EST_VRAI(les_images_sont_standards)                                                                            \
                        ,Icentre_de_gravite(imageA)                                                                                     \
                        ,IFcentre_de_gravite(FimageA)                                                                                   \
                         )                                                                                                              \
                                        /* Calcul du centre de gravite d'une image quelconque ("standard" ou "flottante"). Ceci      */ \
                                        /* fut introduit le 20220204185418...                                                        */



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.