_______________________________________________________________________________________________________________________________________
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        F O N C T I O N S   D E   B A S E   A   C I N Q   I M A G E S   ( E T   P L U S )  :                                       */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Definition :                                                                                                               */
/*                                                                                                                                   */
/*                    Ce fichier contient toutes les fonctions                                                                       */
/*                  de base de gestion et de manipulation de                                                                         */
/*                  cinq images raster (et plus), quelle que soit la definition.                                                     */
/*                  Ainsi, on pourra avec elles passer des                                                                           */
/*                  fausses aux vraies couleurs...                                                                                   */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Author of '$xiii/pent_image$FON' :                                                                                         */
/*                                                                                                                                   */
/*                    Jean-Francois COLONNA (LACTAMME, 19880000000000).                                                              */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

                                        /* Le 20080709142723, la fonction 'IFpolynome_4_01(...)' fut deplacee d'ici au module        */
                                        /* 'v $xiii/GooF_image$FON 20080709142600' tout en etant simultanement rebaptisee            */
                                        /* 'IFcombinaison_hornerienne_var4_degre1(...)' pour des raisons de logique evidentes...     */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        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   D E U X   P O N D E R A T E U R S  :                                                                       */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Petit probleme :                                                                                                           */
/*                                                                                                                                   */
/*                    Soit deux suites D(n) et C(n) respectivement                                                                   */
/*                  decroissante ('D') et croissante ('C') mais ne                                                                   */
/*                  ne variant pas, en valeur absolue, a la meme                                                                     */
/*                  "vitesse". Toutes deux sont en fait des 'CHAR',                                                                  */
/*                  et varient donc dans [NOIR,BLANC]. On calcule la                                                                 */
/*                  suite P(n) qui est leur produit ('P') renormalise                                                                */
/*                  par rapport a 'BLANC'.                                                                                           */
/*                                                                                                                                   */
/*                    Le phenomene etonnant que l'on observe, est que,                                                               */
/*                  pour des valeurs du meme ordre de grandeur de D(n)                                                               */
/*                  et de C(n), la suite P(n) decroit globalement, en                                                                */
/*                  presentant localement des petites croissances. Ce                                                                */
/*                  phenomene est a la base d'un defaut d'interpolation,                                                             */
/*                  que les calculs soient faits par defaut ou par exces.                                                            */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*                  D(n): C(n):         P(n):             GENP(P(n)) par defaut :               GENP(P(n)) par exces :               */
/*                                                                                                                                   */
/*                  (253 x 100)/255 = 99.215686   (par defaut=99 : *******************.   par exces=99 : *******************.)       */
/*                  (252 x 100)/255 = 98.823529   (par defaut=98 : ******************..   par exces=99 : *******************.)       */
/*                  (251 x 100)/255 = 98.431373   (par defaut=98 : ******************..   par exces=98 : ******************..)       */
/*                  (250 x 100)/255 = 98.039216   (par defaut=98 : ******************..   par exces=98 : ******************..)       */
/*                  (249 x 101)/255 = 98.623529   (par defaut=98 : ******************..   par exces=99 : *******************.)       */
/*                  (248 x 101)/255 = 98.227451   (par defaut=98 : ******************..   par exces=98 : ******************..)       */
/*                  (247 x 101)/255 = 97.831373   (par defaut=97 : *****************...   par exces=98 : ******************..)       */
/*                  (246 x 102)/255 = 98.400000   (par defaut=98 : ******************..   par exces=98 : ******************..)       */
/*                  (245 x 102)/255 = 98.000000   (par defaut=98 : ******************..   par exces=98 : ******************..)       */
/*                  (244 x 102)/255 = 97.600000   (par defaut=97 : *****************...   par exces=98 : ******************..)       */
/*                  (243 x 102)/255 = 97.200000   (par defaut=97 : *****************...   par exces=97 : *****************...)       */
/*                  (242 x 103)/255 = 97.749020   (par defaut=97 : *****************...   par exces=98 : ******************..)       */
/*                  (241 x 103)/255 = 97.345098   (par defaut=97 : *****************...   par exces=97 : *****************...)       */
/*                  (240 x 103)/255 = 96.941176   (par defaut=96 : ****************....   par exces=97 : *****************...)       */
/*                  (239 x 104)/255 = 97.474510   (par defaut=97 : *****************...   par exces=97 : *****************...)       */
/*                  (238 x 104)/255 = 97.066667   (par defaut=97 : *****************...   par exces=97 : *****************...)       */
/*                  (237 x 104)/255 = 96.658824   (par defaut=96 : ****************....   par exces=97 : *****************...)       */
/*                  (236 x 105)/255 = 97.176471   (par defaut=97 : *****************...   par exces=97 : *****************...)       */
/*                  (235 x 105)/255 = 96.764706   (par defaut=96 : ****************....   par exces=97 : *****************...)       */
/*                  (234 x 105)/255 = 96.352941   (par defaut=96 : ****************....   par exces=96 : ****************....)       */
/*                  (233 x 105)/255 = 95.941176   (par defaut=95 : ***************.....   par exces=96 : ****************....)       */
/*                  (232 x 106)/255 = 96.439216   (par defaut=96 : ****************....   par exces=96 : ****************....)       */
/*                  (231 x 106)/255 = 96.023529   (par defaut=96 : ****************....   par exces=96 : ****************....)       */
/*                  (230 x 106)/255 = 95.607843   (par defaut=95 : ***************.....   par exces=96 : ****************....)       */
/*                  (229 x 107)/255 = 96.090196   (par defaut=96 : ****************....   par exces=96 : ****************....)       */
/*                  (228 x 107)/255 = 95.670588   (par defaut=95 : ***************.....   par exces=96 : ****************....)       */
/*                  (227 x 107)/255 = 95.250980   (par defaut=95 : ***************.....   par exces=95 : ***************.....)       */
/*                  (226 x 108)/255 = 95.717647   (par defaut=95 : ***************.....   par exces=96 : ****************....)       */
/*                  (225 x 108)/255 = 95.294118   (par defaut=95 : ***************.....   par exces=95 : ***************.....)       */
/*                  (224 x 108)/255 = 94.870588   (par defaut=94 : **************......   par exces=95 : ***************.....)       */
/*                  (223 x 108)/255 = 94.447059   (par defaut=94 : **************......   par exces=94 : **************......)       */
/*                  (222 x 109)/255 = 94.894118   (par defaut=94 : **************......   par exces=95 : ***************.....)       */
/*                  (221 x 109)/255 = 94.466667   (par defaut=94 : **************......   par exces=94 : **************......)       */
/*                  (220 x 109)/255 = 94.039216   (par defaut=94 : **************......   par exces=94 : **************......)       */
/*                  (219 x 110)/255 = 94.470588   (par defaut=94 : **************......   par exces=94 : **************......)       */
/*                  (218 x 110)/255 = 94.039216   (par defaut=94 : **************......   par exces=94 : **************......)       */
/*                  (217 x 110)/255 = 93.607843   (par defaut=93 : *************.......   par exces=94 : **************......)       */
/*                  (216 x 111)/255 = 94.023529   (par defaut=94 : **************......   par exces=94 : **************......)       */
/*                  (215 x 111)/255 = 93.588235   (par defaut=93 : *************.......   par exces=94 : **************......)       */
/*                  (214 x 111)/255 = 93.152941   (par defaut=93 : *************.......   par exces=93 : *************.......)       */
/*                  (213 x 111)/255 = 92.717647   (par defaut=92 : ************........   par exces=93 : *************.......)       */
/*                  (212 x 112)/255 = 93.113725   (par defaut=93 : *************.......   par exces=93 : *************.......)       */
/*                  (211 x 112)/255 = 92.674510   (par defaut=92 : ************........   par exces=93 : *************.......)       */
/*                  (210 x 112)/255 = 92.235294   (par defaut=92 : ************........   par exces=92 : ************........)       */
/*                  (209 x 113)/255 = 92.615686   (par defaut=92 : ************........   par exces=93 : *************.......)       */
/*                  (208 x 113)/255 = 92.172549   (par defaut=92 : ************........   par exces=92 : ************........)       */
/*                  (207 x 113)/255 = 91.729412   (par defaut=91 : ***********.........   par exces=92 : ************........)       */
/*                  (206 x 114)/255 = 92.094118   (par defaut=92 : ************........   par exces=92 : ************........)       */
/*                  (205 x 114)/255 = 91.647059   (par defaut=91 : ***********.........   par exces=92 : ************........)       */
/*                  (204 x 114)/255 = 91.200000   (par defaut=91 : ***********.........   par exces=91 : ***********.........)       */
/*                  (203 x 114)/255 = 90.752941   (par defaut=90 : **********..........   par exces=91 : ***********.........)       */
/*                  (202 x 115)/255 = 91.098039   (par defaut=91 : ***********.........   par exces=91 : ***********.........)       */
/*                  (201 x 115)/255 = 90.647059   (par defaut=90 : **********..........   par exces=91 : ***********.........)       */
/*                  (200 x 115)/255 = 90.196078   (par defaut=90 : **********..........   par exces=90 : **********..........)       */
/*                  (199 x 116)/255 = 90.525490   (par defaut=90 : **********..........   par exces=91 : ***********.........)       */
/*                  (198 x 116)/255 = 90.070588   (par defaut=90 : **********..........   par exces=90 : **********..........)       */
/*                  (197 x 116)/255 = 89.615686   (par defaut=89 : *********...........   par exces=90 : **********..........)       */
/*                  (196 x 117)/255 = 89.929412   (par defaut=89 : *********...........   par exces=90 : **********..........)       */
/*                  (195 x 117)/255 = 89.470588   (par defaut=89 : *********...........   par exces=89 : *********...........)       */
/*                  (194 x 117)/255 = 89.011765   (par defaut=89 : *********...........   par exces=89 : *********...........)       */
/*                  (193 x 117)/255 = 88.552941   (par defaut=88 : ********............   par exces=89 : *********...........)       */
/*                  (192 x 118)/255 = 88.847059   (par defaut=88 : ********............   par exces=89 : *********...........)       */
/*                  (191 x 118)/255 = 88.384314   (par defaut=88 : ********............   par exces=88 : ********............)       */
/*                  (190 x 118)/255 = 87.921569   (par defaut=87 : *******.............   par exces=88 : ********............)       */
/*                  (189 x 119)/255 = 88.200000   (par defaut=88 : ********............   par exces=88 : ********............)       */
/*                  (188 x 119)/255 = 87.733333   (par defaut=87 : *******.............   par exces=88 : ********............)       */
/*                  (187 x 119)/255 = 87.266667   (par defaut=87 : *******.............   par exces=87 : *******.............)       */
/*                  (186 x 120)/255 = 87.529412   (par defaut=87 : *******.............   par exces=88 : ********............)       */
/*                  (185 x 120)/255 = 87.058824   (par defaut=87 : *******.............   par exces=87 : *******.............)       */
/*                  (184 x 120)/255 = 86.588235   (par defaut=86 : ******..............   par exces=87 : *******.............)       */
/*                  (183 x 120)/255 = 86.117647   (par defaut=86 : ******..............   par exces=86 : ******..............)       */
/*                  (182 x 121)/255 = 86.360784   (par defaut=86 : ******..............   par exces=86 : ******..............)       */
/*                  (181 x 121)/255 = 85.886275   (par defaut=85 : *****...............   par exces=86 : ******..............)       */
/*                  (180 x 121)/255 = 85.411765   (par defaut=85 : *****...............   par exces=85 : *****...............)       */
/*                  (179 x 122)/255 = 85.639216   (par defaut=85 : *****...............   par exces=86 : ******..............)       */
/*                  (178 x 122)/255 = 85.160784   (par defaut=85 : *****...............   par exces=85 : *****...............)       */
/*                  (177 x 122)/255 = 84.682353   (par defaut=84 : ****................   par exces=85 : *****...............)       */
/*                  (176 x 123)/255 = 84.894118   (par defaut=84 : ****................   par exces=85 : *****...............)       */
/*                  (175 x 123)/255 = 84.411765   (par defaut=84 : ****................   par exces=84 : ****................)       */
/*                  (174 x 123)/255 = 83.929412   (par defaut=83 : ***.................   par exces=84 : ****................)       */
/*                  (173 x 123)/255 = 83.447059   (par defaut=83 : ***.................   par exces=83 : ***.................)       */
/*                  (172 x 124)/255 = 83.639216   (par defaut=83 : ***.................   par exces=84 : ****................)       */
/*                  (171 x 124)/255 = 83.152941   (par defaut=83 : ***.................   par exces=83 : ***.................)       */
/*                  (170 x 124)/255 = 82.666667   (par defaut=82 : **..................   par exces=83 : ***.................)       */
/*                  (169 x 125)/255 = 82.843137   (par defaut=82 : **..................   par exces=83 : ***.................)       */
/*                  (168 x 125)/255 = 82.352941   (par defaut=82 : **..................   par exces=82 : **..................)       */
/*                  (167 x 125)/255 = 81.862745   (par defaut=81 : *...................   par exces=82 : **..................)       */
/*                  (166 x 126)/255 = 82.023529   (par defaut=82 : **..................   par exces=82 : **..................)       */
/*                  (165 x 126)/255 = 81.529412   (par defaut=81 : *...................   par exces=82 : **..................)       */
/*                  (164 x 126)/255 = 81.035294   (par defaut=81 : *...................   par exces=81 : *...................)       */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*                  resultats obtenus par 'v $xtc/interpole.11$c'.                                                                   */
/*                                                                                                                                   */
/*                    Un probleme similaire a ete mis en evidence                                                                    */
/*                  aux environs du 20120615090941 (voir a ce propos                                                                 */
/*                  'v $xiii/quad_image$FON 20120615074526').                                                                        */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionP

DEFV(Common,DEFV(Logical,SINT(Iinterpolation_quelconque_____methode_basique,FAUX)));
                                        /* Introduit le 20240731130249 pour l'image 'v $xiirv/HELI.I4.pi_2pi'...                     */

DEFV(Common,DEFV(FonctionP,POINTERp(Iinterpolation_quelconque(imageR,ponderateur1,imageA1,ponderateur2,imageA2))))
                                        /* Le 20101012102920 l'ordre des arguments a ete modifie de facon a le rendre plus logique   */
                                        /* et compatible avec celui de 'v $xiii/tri_image$FON Iinterpolation'...                     */
DEFV(Argument,DEFV(image,imageR));
                                        /* Image Resultat, telle que :                                                               */
                                        /*                                                                                           */
                                        /* imageR[X][Y]=(ponderateur1[X][Y] * imageA1[X][Y]) +                                       */
                                        /*              (ponderateur2[X][Y] * imageA2[X][Y])                                         */
                                        /*                                                                                           */
                                        /* et on notera qu'en general, 'ponderateur1' et 'ponderateur2' seront deux                  */
                                        /* images complementaires (en particulier a cause de 'Iaddition').                           */
DEFV(Argument,DEFV(image,ponderateur1));
                                        /* Image de ponderation de 'imageA1'.                                                        */
DEFV(Argument,DEFV(image,imageA1));
                                        /* Premiere image Argument.                                                                  */
DEFV(Argument,DEFV(image,ponderateur2));
                                        /* Image de ponderation de 'imageA2'.                                                        */
DEFV(Argument,DEFV(image,imageA2));
                                        /* Deuxieme image Argument.                                                                  */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     BDEFV(image,imageMA1);
                                        /* Premiere image de manoeuvre,                                                              */
     BDEFV(image,imageMA2);
                                        /* Deuxieme image de manoeuvre,                                                              */
     BDEFV(image,imageMR);
                                        /* Troisieme image de manoeuvre.                                                             */

     DEFV(genere_p,INIT(point_courant,NIVEAU_UNDEF));
     DEFV(genere_p,INIT(voisin_de_gauche,NIVEAU_UNDEF));
     DEFV(genere_p,INIT(voisin_de_droite,NIVEAU_UNDEF));
     DEFV(genere_p,INIT(voisin_du_bas,NIVEAU_UNDEF));
     DEFV(genere_p,INIT(voisin_du_haut,NIVEAU_UNDEF));
     /*..............................................................................................................................*/
     CALS(Imultiplication(imageMA1,ponderateur1,imageA1));
                                        /* Calcul de : imageMA1[X][Y]=(ponderateur1[X][Y] * imageA1[X][Y]).                          */
     CALS(Imultiplication(imageMA2,ponderateur2,imageA2));
                                        /* Calcul de : imageMA2[X][Y]=(ponderateur2[X][Y] * imageA2[X][Y]).                          */

     CALS(Iaddition(imageMR,imageMA1,imageMA2));
                                        /* Calcul de : imageMR[X][Y]=(imageMA1[X][Y] + imageMA2[X][Y]).                              */

     begin_image
          Bblock
          EGAL(point_courant,load_point(imageMR,X,Y));
                                        /* Recuperation du point courant,                                                            */
          EGAL(voisin_de_gauche,load_point_valide(imageMR,PREX(X),NEUT(Y)));
          EGAL(voisin_de_droite,load_point_valide(imageMR,SUCX(X),NEUT(Y)));
          EGAL(voisin_du_bas,load_point_valide(imageMR,NEUT(X),PREY(Y)));
          EGAL(voisin_du_haut,load_point_valide(imageMR,NEUT(X),SUCY(Y)));
                                        /* Et de ses quatre plus proches voisins.                                                    */

          Test(IFET(IL_NE_FAUT_PAS(Iinterpolation_quelconque_____methode_basique)
                   ,IFET(IFEQ(voisin_de_gauche,voisin_de_droite)
                        ,IFGT(point_courant,CHOI(voisin_de_gauche,voisin_de_droite))
                         )
                    )
               )
               Bblock
               store_point(CHOI(voisin_de_gauche,voisin_de_droite),imageR,X,Y,FVARIABLE);
                                        /* Lorsque le point courant est plus grand que ses voisins de droite et de gauche,           */
                                        /* et que ces deux derniers sont egaux, c'est leur valeur commune qui est attribuee          */
                                        /* au point courant {X,Y}.                                                                   */
               Eblock
          ATes
               Bblock
               Test(IFET(IL_NE_FAUT_PAS(Iinterpolation_quelconque_____methode_basique)
                        ,IFET(IFEQ(voisin_du_bas,voisin_du_haut)
                             ,IFGT(point_courant,CHOI(voisin_du_bas,voisin_du_haut))
                              )
                         )
                    )
                    Bblock
                    store_point(CHOI(voisin_du_bas,voisin_du_haut),imageR,X,Y,FVARIABLE);
                                        /* Lorsque le point courant est plus grand que ses voisins du bas et du haut,                */
                                        /* et que ces deux derniers sont egaux, c'est leur valeur commune qui est attribuee          */
                                        /* au point courant {X,Y}.                                                                   */
                    Eblock
               ATes
                    Bblock
                    store_point(point_courant,imageR,X,Y,FVARIABLE);
                                        /* Lorsque le point courant semble correct, on le prend tel quel...                          */
                    Eblock
               ETes
               Eblock
          ETes
          Eblock
     end_image

     EDEFV(image,imageMR);
                                        /* Troisieme image de manoeuvre,                                                             */
     EDEFV(image,imageMA2);
                                        /* Deuxieme image de manoeuvre,                                                              */
     EDEFV(image,imageMA1);
                                        /* Premiere image de manoeuvre.                                                              */

     RETI(imageR);
     Eblock

EFonctionP

_______________________________________________________________________________________________________________________________________
_______________________________________________________________________________________________________________________________________
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        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   F L O T T A N T E S                                        */
/*        S U I V A N T   D E U X   P O N D E R A T E U R S   F L O T T A N T S  :                                                   */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionF

DEFV(Common,DEFV(FonctionF,POINTERF(IFinterpolation_quelconque(imageR,ponderateur1,imageA1,ponderateur2,imageA2))))
                                        /* Le 20101012102920 l'ordre des arguments a ete modifie de facon a le rendre plus logique   */
                                        /* et compatible avec celui de 'v $xiii/tri_image$FON Iinterpolation'...                     */
DEFV(Argument,DEFV(imageF,imageR));
                                        /* Image Resultat, telle que :                                                               */
                                        /*                                                                                           */
                                        /* imageR[X][Y]=(ponderateur1[X][Y] * imageA1[X][Y]) +                                       */
                                        /*              (ponderateur1[X][Y] * imageA1[X][Y]),                                        */
                                        /*                                                                                           */
                                        /* et on notera qu'en general, 'ponderateur1' et 'ponderateur2' seront deux                  */
                                        /* images complementaires (en particulier a cause de 'Iaddition').                           */
DEFV(Argument,DEFV(imageF,ponderateur1));
                                        /* Image de ponderation de 'imageA1'.                                                        */
DEFV(Argument,DEFV(imageF,imageA1));
                                        /* Premiere image Argument.                                                                  */
DEFV(Argument,DEFV(imageF,ponderateur2));
                                        /* Image de ponderation de 'imageA2'.                                                        */
DEFV(Argument,DEFV(imageF,imageA2));
                                        /* Deuxieme image Argument.                                                                  */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     BDEFV(imageF,imageMA1);
                                        /* Premiere image de manoeuvre,                                                              */
     BDEFV(imageF,imageMA2);
                                        /* Deuxieme image de manoeuvre,                                                              */
     BDEFV(imageF,imageMR);
                                        /* Troisieme image de manoeuvre.                                                             */

     DEFV(genere_Float,INIT(point_courant,FLOT__NIVEAU_UNDEF));
     DEFV(genere_Float,INIT(voisin_de_gauche,FLOT__NIVEAU_UNDEF));
     DEFV(genere_Float,INIT(voisin_de_droite,FLOT__NIVEAU_UNDEF));
     DEFV(genere_Float,INIT(voisin_du_bas,FLOT__NIVEAU_UNDEF));
     DEFV(genere_Float,INIT(voisin_du_haut,FLOT__NIVEAU_UNDEF));
     /*..............................................................................................................................*/
     CALS(IFmultiplication(imageMA1,ponderateur1,imageA1));
                                        /* Calcul de : imageMA1[X][Y]=(ponderateur1[X][Y] * imageA1[X][Y]).                          */
     CALS(IFmultiplication(imageMA2,ponderateur2,imageA2));
                                        /* Calcul de : imageMA2[X][Y]=(ponderateur2[X][Y] * imageA2[X][Y]).                          */

     CALS(IFaddition(imageMR,imageMA1,imageMA2));
                                        /* Calcul de : imageMR[X][Y]=(imageMA1[X][Y] + imageMA2[X][Y]).                              */

     begin_image
          Bblock
          EGAL(point_courant,loadF_point(imageMR,X,Y));
                                        /* Recuperation du point courant,                                                            */
          EGAL(voisin_de_gauche,loadF_point_valide(imageMR,PREX(X),NEUT(Y)));
          EGAL(voisin_de_droite,loadF_point_valide(imageMR,SUCX(X),NEUT(Y)));
          EGAL(voisin_du_bas,loadF_point_valide(imageMR,NEUT(X),PREY(Y)));
          EGAL(voisin_du_haut,loadF_point_valide(imageMR,NEUT(X),SUCY(Y)));
                                        /* Et de ses quatre plus proches voisins.                                                    */

          Test(IFET(IFEQ(voisin_de_gauche,voisin_de_droite)
                   ,IFGT(point_courant,CHOI(voisin_de_gauche,voisin_de_droite))
                    )
               )
               Bblock
               storeF_point(CHOI(voisin_de_gauche,voisin_de_droite),imageR,X,Y);
                                        /* Lorsque le point courant est plus grand que ses voisins de droite et de gauche,           */
                                        /* et que ces deux derniers sont egaux, c'est leur valeur commune qui est attribuee          */
                                        /* au point courant {X,Y}.                                                                   */
               Eblock
          ATes
               Bblock
               Test(IFET(IFEQ(voisin_du_bas,voisin_du_haut)
                        ,IFGT(point_courant,CHOI(voisin_du_bas,voisin_du_haut))
                         )
                    )
                    Bblock
                    storeF_point(CHOI(voisin_du_bas,voisin_du_haut),imageR,X,Y);
                                        /* Lorsque le point courant est plus grand que ses voisins du bas et du haut,                */
                                        /* et que ces deux derniers sont egaux, c'est leur valeur commune qui est attribuee          */
                                        /* au point courant {X,Y}.                                                                   */
                    Eblock
               ATes
                    Bblock
                    storeF_point(point_courant,imageR,X,Y);
                                        /* Lorsque le point courant semble correct, on le prend tel quel...                          */
                    Eblock
               ETes
               Eblock
          ETes
          Eblock
     end_image

     EDEFV(imageF,imageMR);
                                        /* Troisieme image de manoeuvre,                                                             */
     EDEFV(imageF,imageMA2);
                                        /* Deuxieme image de manoeuvre,                                                              */
     EDEFV(imageF,imageMA1);
                                        /* Premiere image de manoeuvre.                                                              */

     RETIF(imageR);
     Eblock

EFonctionF

_______________________________________________________________________________________________________________________________________
_______________________________________________________________________________________________________________________________________
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        I N T E R P O L A T I O N   L O C A L E   D E   V O I S I N A G E   E N T R E   D E U X   I M A G E S                      */
/*        F L O T T A N T E S   S U I V A N T   D E U X   P O N D E R A T E U R S   F L O T T A N T S  :                             */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Illustration du principe le 20120422090922 (voir aussi 'v $xiav/INTERPOLE_12.11$R16') :                                    */
/*                                                                                                                                   */
/*                    Soient les deux images suivantes :                                                                             */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*                          I1                            I2                                                                         */
/*                                                                                                                                   */
/*                   ----------------              ----------------                                                                  */
/*                  | ....--:ooOO%%##|            |################|                                                                 */
/*                  | ....--:ooOO%%##|            |%%%%%%%%%%%%%%%%|                                                                 */
/*                  | ....--:ooOO%%##|            |OOOOOOOOOOOOOOOO|                                                                 */
/*                  | ....--:ooOO%%##|            |oooooooooooooooo|                                                                 */
/*                  | ....--:ooOO%%##|            |----------------|                                                                 */
/*                  | ....--:ooOO%%##|            |................|                                                                 */
/*                  | ....--:ooOO%%##|            |................|                                                                 */
/*                  | ....--:ooOO%%##|            |                |                                                                 */
/*                   ----------------              ----------------                                                                  */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*                  et le ponderateur (une mire de barres verticales transformee par la substitution utilisant '$xiP/gris.A3') :     */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*                          Po                                                                                                       */
/*                                                                                                                                   */
/*                   ----------------                                                                                                */
/*                  |     ..-o%######|                                                                                               */
/*                  |     ..-o%######|                                                                                               */
/*                  |     ..-o%######|                                                                                               */
/*                  |     ..-o%######|                                                                                               */
/*                  |     ..-o%######|                                                                                               */
/*                  |     ..-o%######|                                                                                               */
/*                  |     ..-o%######|                                                                                               */
/*                  |     ..-o%######|                                                                                               */
/*                   ----------------                                                                                                */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*                  ce qui donne ensuite les quatre possibilites d'interpolation :                                                   */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*                     A1=I1  A2=I2                  A1=I1  A2=I2                  A1=I2  A2=I1                  A1=I2  A2=I1        */
/*                  P=Po inverser=FAUX            P=Po inverser=VRAI            P=Po inverser=FAUX            P=Po inverser=VRAI     */
/*                                                                                                                                   */
/*                   ----------------              ----------------              ----------------              ----------------      */
/*                  |       o o O%%##|            | ....-       ###| < I2       |           #####| < I2       |#####--##oOO%%##|     */
/*                  |       oo OO%%##|            | ....:   %%%%%%%|            |          %#%%%%|            |%%%%%%%%ooOO%%##|     */
/*                  |    :  oooOO%%##|            | ....-ooooO OO O|            |          OO#OOO|            |OOOOOO-:OO%%%   |     */
/*                  |  ::: : oooO%%##|            | ....-::ooo oo  |            |        oo:%%ooo|            |oooooo-oo       |     */
/*                  |  -----:::oO%%##|            | ....--::: o    |            |     --:ooO--%##|            |-------         |     */
/*                  |.........  O%%##|            | ....-- :::     |            | ....--:ooOO%%##|            |......          |     */
/*                  |.....      O%%##|            | ....--::       |            | ....--:ooOO%%##|            |......          |     */
/*             I2 > |           O%%##|            | ....-          |       I1 > | ....--:ooOO%%##|            |                |     */
/*                   ----------------              ----------------              ----------------              ----------------      */
/*                                                                                                                                   */
/*                                /|\              /|\                                                         /|\          /|\      */
/*                                 |                |                                                           |            |       */
/*                                                                                                                                   */
/*                                 I1               I1                                                          I2           I1      */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*                  en notant que les points qui apparaissent NOIR ci dessus sont                                                    */
/*                  majoritairement des points qui ne sont pas atteints dans les                                                     */
/*                  interpolations de coordonnees {X,X_associe} et {Y,Y_associe}                                                     */
/*                  dans le 'storeF_point_valide(...)' ci-apres...                                                                   */
/*                                                                                                                                   */
/*                    On notera bien que :                                                                                           */
/*                                                                                                                                   */
/*                                      interpolation(I1,I2) # interpolation(I2,I1)                                                  */
/*                                                                                                                                   */
/*                  et que donc cette operation ne "commute" pas...                                                                  */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionF

DEFV(Common,DEFV(FonctionF,POINTERF(IFinterpolation_locale_de_voisinage(imageR,imageALPHA,imageA1,imageBETA_,imageA2))))
                                        /* Fonction introduite le 20101011154400.                                                    */
                                        /*                                                                                           */
                                        /* Le 20101012102920 l'ordre des arguments a ete modifie de facon a le rendre plus logique   */
                                        /* et compatible avec celui de 'v $xiii/tri_image$FON Iinterpolation'...                     */
DEFV(Argument,DEFV(imageF,imageR));
                                        /* Image Resultat, telle que : imageR=alpha*imageA1+beta*imageA2, sachant que les            */
                                        /* coordonnees utilisees sont pour :                                                         */
                                        /*                                                                                           */
                                        /* imageA1 : {X,Y},                                                                          */
                                        /* imageA2 : (Iassociation_de_voisinage_____X(X,Y),Iassociation_de_voisinage_____Y(X,Y)),    */
                                        /* imageR  : {X,Y}.                                                                          */
                                        /*                                                                                           */
                                        /* ce qui implique que cette interpolation ne "commute" pas :                                */
                                        /*                                                                                           */
                                        /*                  interpolation(imageA1,imageA2) # interpolation(imageA2,imageA1)          */
                                        /*                                                                                           */
DEFV(Argument,DEFV(imageF,imageALPHA));
                                        /* Premier coefficient d'interpolation,                                                      */
DEFV(Argument,DEFV(imageF,imageA1));
                                        /* Premiere image Argument,                                                                  */
DEFV(Argument,DEFV(imageF,imageBETA_));
                                        /* Second coefficient d'interpolation.                                                       */
DEFV(Argument,DEFV(imageF,imageA2));
                                        /* Seconde image Argument.                                                                   */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     /*..............................................................................................................................*/
     Test(EST_VRAI(Iassociation_de_voisinage_____X_association__et__Y_association__sont_initialisees))
          Bblock
          begin_image
               Bblock
               DEFV(Int,INIT(X_associe,loadI_point(Iassociation_de_voisinage_____X,X,Y)));
               DEFV(Int,INIT(Y_associe,loadI_point(Iassociation_de_voisinage_____Y,X,Y)));
                                        /* Definition des coordonnees associees dans 'imageA2' a {X,Y} de 'imageA1'.                 */
               Test(TEST_DANS_L_IMAGE(X_associe,Y_associe))
                                        /* Test introduit le 20101013094728 car, en effet, il manquait...                            */
                    Bblock
                    DEFV(Float,INIT(alpha,loadF_point(imageALPHA,X,Y)));
                    DEFV(Float,INIT(beta_,loadF_point(imageBETA_,X,Y)));
                                        /* Definition des interpolateurs en {X,Y}.                                                   */

                    storeF_point_valide(LIZ2(alpha,loadF_point(imageA1,X,Y)
                                            ,beta_,loadF_point_valide(imageA2,X_associe,Y_associe)
                                             )
                                       ,imageR
                                       ,ARRI(COXA(LIZ2(alpha,FLOT(COXR(X))
                                                      ,beta_,FLOT(COXR(X_associe))
                                                       )
                                                  )
                                             )
                                       ,ARRI(COYA(LIZ2(alpha,FLOT(COYR(Y))
                                                      ,beta_,FLOT(COYR(Y_associe))
                                                       )
                                                  )
                                             )
                                        );
                                        /* Interpolation des niveaux et des coordonnees entre 'imageA1' et les points associes       */
                                        /* de 'imageA2'...                                                                           */
                                        /*                                                                                           */
                                        /* Le 20101012183152 les 'INTE(...)'s furent remplaces par des 'ARRI(...)'s qui donnent un   */
                                        /* meilleur resultat...                                                                      */
                                        /*                                                                                           */
                                        /* Le 20101013183449 je note que ce sont les interpolations 'LIN2(...)'s sur les coordonnees */
                                        /* qui sont responsables des trous et des dechirures dans l'image 'imageR'. A cette date     */
                                        /* cela demande des convolutions de correction ('v $xiirf/$Fnota Debut_listG_FRA3_R2').      */
                    Eblock
               ATes
                    Bblock
                    Eblock
               ETes
               Eblock
          end_image
          Eblock
     ATes
          Bblock
          PRINT_ERREUR("l'initialisation par 'Iassociation_de_voisinage(...)' n'a pas encore etait faite");
                                        /* Les matrices 'Iassociation_de_voisinage_____X' et 'Iassociation_de_voisinage_____Y'       */
                                        /* n'ont pas encore ete initialisees...                                                      */
          Eblock
     ETes

     RETIF(imageR);
     Eblock

EFonctionF

_______________________________________________________________________________________________________________________________________
_______________________________________________________________________________________________________________________________________
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        C O M B I N A I S O N   D E   T Y P E   " HORNER_4_02(...) '   D E   Q U A T R E   I M A G E S   F L O T T A N T E S  :    */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionF

DEFV(Common,DEFV(Float,SINT(IFcombinaison_hornerienne_var4_degre2____a2222,FZERO)));
DEFV(Common,DEFV(Float,SINT(IFcombinaison_hornerienne_var4_degre2____a2221,FZERO)));
DEFV(Common,DEFV(Float,SINT(IFcombinaison_hornerienne_var4_degre2____a2220,FZERO)));
DEFV(Common,DEFV(Float,SINT(IFcombinaison_hornerienne_var4_degre2____a2212,FZERO)));
DEFV(Common,DEFV(Float,SINT(IFcombinaison_hornerienne_var4_degre2____a2211,FZERO)));
DEFV(Common,DEFV(Float,SINT(IFcombinaison_hornerienne_var4_degre2____a2210,FZERO)));
DEFV(Common,DEFV(Float,SINT(IFcombinaison_hornerienne_var4_degre2____a2202,FZERO)));
DEFV(Common,DEFV(Float,SINT(IFcombinaison_hornerienne_var4_degre2____a2201,FZERO)));
DEFV(Common,DEFV(Float,SINT(IFcombinaison_hornerienne_var4_degre2____a2200,FZERO)));

DEFV(Common,DEFV(Float,SINT(IFcombinaison_hornerienne_var4_degre2____a2122,FZERO)));
DEFV(Common,DEFV(Float,SINT(IFcombinaison_hornerienne_var4_degre2____a2121,FZERO)));
DEFV(Common,DEFV(Float,SINT(IFcombinaison_hornerienne_var4_degre2____a2120,FZERO)));
DEFV(Common,DEFV(Float,SINT(IFcombinaison_hornerienne_var4_degre2____a2112,FZERO)));
DEFV(Common,DEFV(Float,SINT(IFcombinaison_hornerienne_var4_degre2____a2111,FZERO)));
DEFV(Common,DEFV(Float,SINT(IFcombinaison_hornerienne_var4_degre2____a2110,FZERO)));
DEFV(Common,DEFV(Float,SINT(IFcombinaison_hornerienne_var4_degre2____a2102,FZERO)));
DEFV(Common,DEFV(Float,SINT(IFcombinaison_hornerienne_var4_degre2____a2101,FZERO)));
DEFV(Common,DEFV(Float,SINT(IFcombinaison_hornerienne_var4_degre2____a2100,FZERO)));

DEFV(Common,DEFV(Float,SINT(IFcombinaison_hornerienne_var4_degre2____a2022,FZERO)));
DEFV(Common,DEFV(Float,SINT(IFcombinaison_hornerienne_var4_degre2____a2021,FZERO)));
DEFV(Common,DEFV(Float,SINT(IFcombinaison_hornerienne_var4_degre2____a2020,FZERO)));
DEFV(Common,DEFV(Float,SINT(IFcombinaison_hornerienne_var4_degre2____a2012,FZERO)));
DEFV(Common,DEFV(Float,SINT(IFcombinaison_hornerienne_var4_degre2____a2011,FZERO)));
DEFV(Common,DEFV(Float,SINT(IFcombinaison_hornerienne_var4_degre2____a2010,FZERO)));
DEFV(Common,DEFV(Float,SINT(IFcombinaison_hornerienne_var4_degre2____a2002,FZERO)));
DEFV(Common,DEFV(Float,SINT(IFcombinaison_hornerienne_var4_degre2____a2001,FZERO)));
DEFV(Common,DEFV(Float,SINT(IFcombinaison_hornerienne_var4_degre2____a2000,FZERO)));

DEFV(Common,DEFV(Float,SINT(IFcombinaison_hornerienne_var4_degre2____a1222,FZERO)));
DEFV(Common,DEFV(Float,SINT(IFcombinaison_hornerienne_var4_degre2____a1221,FZERO)));
DEFV(Common,DEFV(Float,SINT(IFcombinaison_hornerienne_var4_degre2____a1220,FZERO)));
DEFV(Common,DEFV(Float,SINT(IFcombinaison_hornerienne_var4_degre2____a1212,FZERO)));
DEFV(Common,DEFV(Float,SINT(IFcombinaison_hornerienne_var4_degre2____a1211,FZERO)));
DEFV(Common,DEFV(Float,SINT(IFcombinaison_hornerienne_var4_degre2____a1210,FZERO)));
DEFV(Common,DEFV(Float,SINT(IFcombinaison_hornerienne_var4_degre2____a1202,FZERO)));
DEFV(Common,DEFV(Float,SINT(IFcombinaison_hornerienne_var4_degre2____a1201,FZERO)));
DEFV(Common,DEFV(Float,SINT(IFcombinaison_hornerienne_var4_degre2____a1200,FZERO)));

DEFV(Common,DEFV(Float,SINT(IFcombinaison_hornerienne_var4_degre2____a1122,FZERO)));
DEFV(Common,DEFV(Float,SINT(IFcombinaison_hornerienne_var4_degre2____a1121,FZERO)));
DEFV(Common,DEFV(Float,SINT(IFcombinaison_hornerienne_var4_degre2____a1120,FZERO)));
DEFV(Common,DEFV(Float,SINT(IFcombinaison_hornerienne_var4_degre2____a1112,FZERO)));
DEFV(Common,DEFV(Float,SINT(IFcombinaison_hornerienne_var4_degre2____a1111,FZERO)));
DEFV(Common,DEFV(Float,SINT(IFcombinaison_hornerienne_var4_degre2____a1110,FZERO)));
DEFV(Common,DEFV(Float,SINT(IFcombinaison_hornerienne_var4_degre2____a1102,FZERO)));
DEFV(Common,DEFV(Float,SINT(IFcombinaison_hornerienne_var4_degre2____a1101,FZERO)));
DEFV(Common,DEFV(Float,SINT(IFcombinaison_hornerienne_var4_degre2____a1100,FZERO)));

DEFV(Common,DEFV(Float,SINT(IFcombinaison_hornerienne_var4_degre2____a1022,FZERO)));
DEFV(Common,DEFV(Float,SINT(IFcombinaison_hornerienne_var4_degre2____a1021,FZERO)));
DEFV(Common,DEFV(Float,SINT(IFcombinaison_hornerienne_var4_degre2____a1020,FZERO)));
DEFV(Common,DEFV(Float,SINT(IFcombinaison_hornerienne_var4_degre2____a1012,FZERO)));
DEFV(Common,DEFV(Float,SINT(IFcombinaison_hornerienne_var4_degre2____a1011,FZERO)));
DEFV(Common,DEFV(Float,SINT(IFcombinaison_hornerienne_var4_degre2____a1010,FZERO)));
DEFV(Common,DEFV(Float,SINT(IFcombinaison_hornerienne_var4_degre2____a1002,FZERO)));
DEFV(Common,DEFV(Float,SINT(IFcombinaison_hornerienne_var4_degre2____a1001,FZERO)));
DEFV(Common,DEFV(Float,SINT(IFcombinaison_hornerienne_var4_degre2____a1000,FU)));

DEFV(Common,DEFV(Float,SINT(IFcombinaison_hornerienne_var4_degre2____a0222,FZERO)));
DEFV(Common,DEFV(Float,SINT(IFcombinaison_hornerienne_var4_degre2____a0221,FZERO)));
DEFV(Common,DEFV(Float,SINT(IFcombinaison_hornerienne_var4_degre2____a0220,FZERO)));
DEFV(Common,DEFV(Float,SINT(IFcombinaison_hornerienne_var4_degre2____a0212,FZERO)));
DEFV(Common,DEFV(Float,SINT(IFcombinaison_hornerienne_var4_degre2____a0211,FZERO)));
DEFV(Common,DEFV(Float,SINT(IFcombinaison_hornerienne_var4_degre2____a0210,FZERO)));
DEFV(Common,DEFV(Float,SINT(IFcombinaison_hornerienne_var4_degre2____a0202,FZERO)));
DEFV(Common,DEFV(Float,SINT(IFcombinaison_hornerienne_var4_degre2____a0201,FZERO)));
DEFV(Common,DEFV(Float,SINT(IFcombinaison_hornerienne_var4_degre2____a0200,FZERO)));

DEFV(Common,DEFV(Float,SINT(IFcombinaison_hornerienne_var4_degre2____a0122,FZERO)));
DEFV(Common,DEFV(Float,SINT(IFcombinaison_hornerienne_var4_degre2____a0121,FZERO)));
DEFV(Common,DEFV(Float,SINT(IFcombinaison_hornerienne_var4_degre2____a0120,FZERO)));
DEFV(Common,DEFV(Float,SINT(IFcombinaison_hornerienne_var4_degre2____a0112,FZERO)));
DEFV(Common,DEFV(Float,SINT(IFcombinaison_hornerienne_var4_degre2____a0111,FZERO)));
DEFV(Common,DEFV(Float,SINT(IFcombinaison_hornerienne_var4_degre2____a0110,FZERO)));
DEFV(Common,DEFV(Float,SINT(IFcombinaison_hornerienne_var4_degre2____a0102,FZERO)));
DEFV(Common,DEFV(Float,SINT(IFcombinaison_hornerienne_var4_degre2____a0101,FZERO)));
DEFV(Common,DEFV(Float,SINT(IFcombinaison_hornerienne_var4_degre2____a0100,FU)));

DEFV(Common,DEFV(Float,SINT(IFcombinaison_hornerienne_var4_degre2____a0022,FZERO)));
DEFV(Common,DEFV(Float,SINT(IFcombinaison_hornerienne_var4_degre2____a0021,FZERO)));
DEFV(Common,DEFV(Float,SINT(IFcombinaison_hornerienne_var4_degre2____a0020,FZERO)));
DEFV(Common,DEFV(Float,SINT(IFcombinaison_hornerienne_var4_degre2____a0012,FZERO)));
DEFV(Common,DEFV(Float,SINT(IFcombinaison_hornerienne_var4_degre2____a0011,FZERO)));
DEFV(Common,DEFV(Float,SINT(IFcombinaison_hornerienne_var4_degre2____a0010,FU)));
DEFV(Common,DEFV(Float,SINT(IFcombinaison_hornerienne_var4_degre2____a0002,FZERO)));
DEFV(Common,DEFV(Float,SINT(IFcombinaison_hornerienne_var4_degre2____a0001,FU)));
DEFV(Common,DEFV(Float,SINT(IFcombinaison_hornerienne_var4_degre2____a0000,FZERO)));
                                        /* Les valeurs par defaut des coefficients de 'HORNER_4_02(...)' sont telles que :           */
                                        /*                                                                                           */
                                        /*                  imageR = imageA1 + imageA2 + imageA3 + imageA4                           */
                                        /*                                                                                           */
                                        /* ('v $ximd/operator.1$FON la.somme..x.y.z.t.').                                            */

DEFV(Common,DEFV(FonctionF,POINTERF(IFcombinaison_hornerienne_var4_degre2(imageR,imageA1,imageA2,imageA3,imageA4))))
                                        /* Fonction introduite le 20190628111223.                                                    */
DEFV(Argument,DEFV(imageF,imageR));
                                        /* Image Resultat.                                                                           */
DEFV(Argument,DEFV(imageF,imageA1));
DEFV(Argument,DEFV(imageF,imageA2));
DEFV(Argument,DEFV(imageF,imageA3));
DEFV(Argument,DEFV(imageF,imageA4));
                                        /* Images Arguments.                                                                         */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     /*..............................................................................................................................*/
     begin_image
          Bblock
          DEFV(genere_Float,INIT(point_courant_A1,loadF_point(imageA1,X,Y)));
          DEFV(genere_Float,INIT(point_courant_A2,loadF_point(imageA2,X,Y)));
          DEFV(genere_Float,INIT(point_courant_A3,loadF_point(imageA3,X,Y)));
          DEFV(genere_Float,INIT(point_courant_A4,loadF_point(imageA4,X,Y)));

          DEFV(genere_Float,INIT(point_courant_R,FLOT__NIVEAU_UNDEF));

          EGAL(point_courant_R
              ,HORNER_4_02(point_courant_A1,point_courant_A2,point_courant_A3,point_courant_A4
                          ,IFcombinaison_hornerienne_var4_degre2____a2222
                          ,IFcombinaison_hornerienne_var4_degre2____a2221
                          ,IFcombinaison_hornerienne_var4_degre2____a2220
                          ,IFcombinaison_hornerienne_var4_degre2____a2212
                          ,IFcombinaison_hornerienne_var4_degre2____a2211
                          ,IFcombinaison_hornerienne_var4_degre2____a2210
                          ,IFcombinaison_hornerienne_var4_degre2____a2202
                          ,IFcombinaison_hornerienne_var4_degre2____a2201
                          ,IFcombinaison_hornerienne_var4_degre2____a2200

                          ,IFcombinaison_hornerienne_var4_degre2____a2122
                          ,IFcombinaison_hornerienne_var4_degre2____a2121
                          ,IFcombinaison_hornerienne_var4_degre2____a2120
                          ,IFcombinaison_hornerienne_var4_degre2____a2112
                          ,IFcombinaison_hornerienne_var4_degre2____a2111
                          ,IFcombinaison_hornerienne_var4_degre2____a2110
                          ,IFcombinaison_hornerienne_var4_degre2____a2102
                          ,IFcombinaison_hornerienne_var4_degre2____a2101
                          ,IFcombinaison_hornerienne_var4_degre2____a2100

                          ,IFcombinaison_hornerienne_var4_degre2____a2022
                          ,IFcombinaison_hornerienne_var4_degre2____a2021
                          ,IFcombinaison_hornerienne_var4_degre2____a2020
                          ,IFcombinaison_hornerienne_var4_degre2____a2012
                          ,IFcombinaison_hornerienne_var4_degre2____a2011
                          ,IFcombinaison_hornerienne_var4_degre2____a2010
                          ,IFcombinaison_hornerienne_var4_degre2____a2002
                          ,IFcombinaison_hornerienne_var4_degre2____a2001
                          ,IFcombinaison_hornerienne_var4_degre2____a2000

                          ,IFcombinaison_hornerienne_var4_degre2____a1222
                          ,IFcombinaison_hornerienne_var4_degre2____a1221
                          ,IFcombinaison_hornerienne_var4_degre2____a1220
                          ,IFcombinaison_hornerienne_var4_degre2____a1212
                          ,IFcombinaison_hornerienne_var4_degre2____a1211
                          ,IFcombinaison_hornerienne_var4_degre2____a1210
                          ,IFcombinaison_hornerienne_var4_degre2____a1202
                          ,IFcombinaison_hornerienne_var4_degre2____a1201
                          ,IFcombinaison_hornerienne_var4_degre2____a1200

                          ,IFcombinaison_hornerienne_var4_degre2____a1122
                          ,IFcombinaison_hornerienne_var4_degre2____a1121
                          ,IFcombinaison_hornerienne_var4_degre2____a1120
                          ,IFcombinaison_hornerienne_var4_degre2____a1112
                          ,IFcombinaison_hornerienne_var4_degre2____a1111
                          ,IFcombinaison_hornerienne_var4_degre2____a1110
                          ,IFcombinaison_hornerienne_var4_degre2____a1102
                          ,IFcombinaison_hornerienne_var4_degre2____a1101
                          ,IFcombinaison_hornerienne_var4_degre2____a1100

                          ,IFcombinaison_hornerienne_var4_degre2____a1022
                          ,IFcombinaison_hornerienne_var4_degre2____a1021
                          ,IFcombinaison_hornerienne_var4_degre2____a1020
                          ,IFcombinaison_hornerienne_var4_degre2____a1012
                          ,IFcombinaison_hornerienne_var4_degre2____a1011
                          ,IFcombinaison_hornerienne_var4_degre2____a1010
                          ,IFcombinaison_hornerienne_var4_degre2____a1002
                          ,IFcombinaison_hornerienne_var4_degre2____a1001
                          ,IFcombinaison_hornerienne_var4_degre2____a1000

                          ,IFcombinaison_hornerienne_var4_degre2____a0222
                          ,IFcombinaison_hornerienne_var4_degre2____a0221
                          ,IFcombinaison_hornerienne_var4_degre2____a0220
                          ,IFcombinaison_hornerienne_var4_degre2____a0212
                          ,IFcombinaison_hornerienne_var4_degre2____a0211
                          ,IFcombinaison_hornerienne_var4_degre2____a0210
                          ,IFcombinaison_hornerienne_var4_degre2____a0202
                          ,IFcombinaison_hornerienne_var4_degre2____a0201
                          ,IFcombinaison_hornerienne_var4_degre2____a0200

                          ,IFcombinaison_hornerienne_var4_degre2____a0122
                          ,IFcombinaison_hornerienne_var4_degre2____a0121
                          ,IFcombinaison_hornerienne_var4_degre2____a0120
                          ,IFcombinaison_hornerienne_var4_degre2____a0112
                          ,IFcombinaison_hornerienne_var4_degre2____a0111
                          ,IFcombinaison_hornerienne_var4_degre2____a0110
                          ,IFcombinaison_hornerienne_var4_degre2____a0102
                          ,IFcombinaison_hornerienne_var4_degre2____a0101
                          ,IFcombinaison_hornerienne_var4_degre2____a0100

                          ,IFcombinaison_hornerienne_var4_degre2____a0022
                          ,IFcombinaison_hornerienne_var4_degre2____a0021
                          ,IFcombinaison_hornerienne_var4_degre2____a0020
                          ,IFcombinaison_hornerienne_var4_degre2____a0012
                          ,IFcombinaison_hornerienne_var4_degre2____a0011
                          ,IFcombinaison_hornerienne_var4_degre2____a0010
                          ,IFcombinaison_hornerienne_var4_degre2____a0002
                          ,IFcombinaison_hornerienne_var4_degre2____a0001
                          ,IFcombinaison_hornerienne_var4_degre2____a0000
                           )
               );

          storeF_point(point_courant_R,imageR,X,Y);
          Eblock
     end_image

     RETIF(imageR);
     Eblock

EFonctionF

_______________________________________________________________________________________________________________________________________
_______________________________________________________________________________________________________________________________________
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        O P E R A T I O N S   C O M P L E X E S   D E   Q U A T R E   I M A G E S  :                                               */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionF

DEFV(Common,DEFV(Logical,SINT(IFproduit_complexe_____multiplicatif,VRAI)));
DEFV(Common,DEFV(Logical,SINT(IFproduit_complexe_____direct,VRAI)));
                                        /* Indicateurs introduits le 20060620125504 afin de permettre en fait les quatre             */
                                        /* operations {{+,-},{*,/}}, la multiplication etant l'operation par defaut...               */

DEFV(Common,DEFV(FonctionF,POINTERF(IFproduit_complexe(imageR
                                                      ,ponderation_R,ponderation_I
                                                      ,ponderation_M,ponderation_A
                                                      ,imageA_R_1,imageA_I_1
                                                      ,imageA_R_2,imageA_I_2
                                                       )
                                    )
                 )
     )
                                        /* Fonction introduite le 20060619134805. Le 20061018093427, elle a donne naissance a la     */
                                        /* fonction 'v $xiii/GooF_image$FON IFproduit_complexe_etendu'...                            */
DEFV(Argument,DEFV(imageF,imageR));
                                        /* Image Resultat.                                                                           */
DEFV(Argument,DEFV(Float,ponderation_R));
DEFV(Argument,DEFV(Float,ponderation_I));
DEFV(Argument,DEFV(Float,ponderation_M));
DEFV(Argument,DEFV(Float,ponderation_A));
                                        /* Ponderations de generation de l'image Resultat.                                           */
DEFV(Argument,DEFV(imageF,imageA_R_1));
DEFV(Argument,DEFV(imageF,imageA_I_1));
                                        /* Definition du doublet d'images {R,I} Argument 1.                                          */
DEFV(Argument,DEFV(imageF,imageA_R_2));
DEFV(Argument,DEFV(imageF,imageA_I_2));
                                        /* Definition du doublet d'images {R,I} Argument 2.                                          */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     /*..............................................................................................................................*/
     begin_image
          Bblock
          DEFV(complexe,complexe_A1);
          DEFV(complexe,complexe_A2);
          DEFV(complexe,complexe_R);
                                        /* Definition des nombres complexes Arguments et Resultat.                                   */

          Cinitialisation(complexe_A1
                         ,loadF_point(imageA_R_1,X,Y)
                         ,loadF_point(imageA_I_1,X,Y)
                          );
          Cinitialisation(complexe_A2
                         ,loadF_point(imageA_R_2,X,Y)
                         ,loadF_point(imageA_I_2,X,Y)
                          );
                                        /* Recuperation des nombres complexes Argument...                                            */

          Test(EST_VRAI(IFproduit_complexe_____multiplicatif))
               Bblock
               Test(EST_VRAI(IFproduit_complexe_____direct))
                    Bblock
                    Cproduit(complexe_R,complexe_A1,complexe_A2);
                                        /* Calcul du produit des deux nombres complexes Argument...                                  */
                    Eblock
               ATes
                    Bblock
                    Cquotient(complexe_R,complexe_A1,complexe_A2);
                                        /* Calcul du quotient des deux nombres complexes Argument...                                 */
                    Eblock
               ETes
               Eblock
          ATes
               Bblock
               Test(EST_VRAI(IFproduit_complexe_____direct))
                    Bblock
                    Csomme(complexe_R,complexe_A1,complexe_A2);
                                        /* Calcul de la somme des deux nombres complexes Argument...                                 */
                    Eblock
               ATes
                    Bblock
                    Cdifference(complexe_R,complexe_A1,complexe_A2);
                                        /* Calcul de la difference des deux nombres complexes Argument...                            */
                    Eblock
               ETes
               Eblock
          ETes

          storeF_point(LIZ4(ponderation_R,Reelle(complexe_R)
                           ,ponderation_I,Imaginaire(complexe_R)
                           ,ponderation_M,Cmodule(complexe_R)
                           ,ponderation_A,Cargument_PI(complexe_R)
                            )
                      ,imageR
                      ,X,Y
                       );
                                        /* Et enfin, renvoi d'une "partie" du Resultat...                                            */
          Eblock
     end_image

     RETIF(imageR);
     Eblock

EFonctionF

_______________________________________________________________________________________________________________________________________
_______________________________________________________________________________________________________________________________________
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        O P E R A T I O N S   H Y P E R - C O M P L E X E S   D E   H U I T   I M A G E S  :                                       */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*             *     * * * * * *   * * * * * *   * * * * * *   *         *   * * * * * *   *   * * * * * *   *         *             */
/*                        *             *        *             **        *        *        *   *         *   **        *             */
/*            * *         *             *        *             * *       *        *        *   *         *   * *       *             */
/*                        *             *        *             *  *      *        *        *   *         *   *  *      *             */
/*           *   *        *             *        *             *   *     *        *        *   *         *   *   *     *             */
/*                        *             *        * * *         *    *    *        *        *   *         *   *    *    *             */
/*          * * * *       *             *        *             *     *   *        *        *   *         *   *     *   *             */
/*                        *             *        *             *      *  *        *        *   *         *   *      *  *             */
/*         *       *      *             *        *             *       * *        *        *   *         *   *       * *             */
/*                        *             *        *             *        **        *        *   *         *   *        **             */
/*        *         *     *             *        * * * * * *   *         *        *        *   * * * * * *   *         *             */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        ATTENTION :                                                                                                                */
/*                                                                                                                                   */
/*                    Pour bien faire, cette fonction 'IFproduit_hyper_complexe(...)'                                                */
/*                  devrait etre dans 'v $xiii/nona_image$FON' -"nona" pour 9- qui n'existe pas                                      */
/*                  et que l'on ne va pas creer specialement pour des raisons economiques                                            */
/*                  evidentes...                                                                                                     */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionF

DEFV(Common,DEFV(Logical,SINT(IFproduit_hyper_complexe_____multiplicatif,VRAI)));
DEFV(Common,DEFV(Logical,SINT(IFproduit_hyper_complexe_____direct,VRAI)));
                                        /* Indicateurs introduits le 20060620125504 afin de permettre en fait les quatre             */
                                        /* operations {{+,-},{*,/}}, la multiplication etant l'operation par defaut...               */

DEFV(Common,DEFV(FonctionF,POINTERF(IFproduit_hyper_complexe(imageR
                                                            ,ponderation_R,ponderation_I,ponderation_J,ponderation_K
                                                            ,ponderation_M,ponderation_T,ponderation_P,ponderation_A
                                                            ,imageA_R_1,imageA_I_1,imageA_J_1,imageA_K_1
                                                            ,imageA_R_2,imageA_I_2,imageA_J_2,imageA_K_2
                                                             )
                                    )
                 )
     )
                                        /* Fonction introduite le 20060619134805. Le 20061018093427, elle a donne naissance a la     */
                                        /* fonction 'v $xiii/GooF_image$FON IFproduit_hyper_complexe_etendu'...                      */
DEFV(Argument,DEFV(imageF,imageR));
                                        /* Image Resultat.                                                                           */
DEFV(Argument,DEFV(Float,ponderation_R));
DEFV(Argument,DEFV(Float,ponderation_I));
DEFV(Argument,DEFV(Float,ponderation_J));
DEFV(Argument,DEFV(Float,ponderation_K));
DEFV(Argument,DEFV(Float,ponderation_M));
DEFV(Argument,DEFV(Float,ponderation_T));
DEFV(Argument,DEFV(Float,ponderation_P));
DEFV(Argument,DEFV(Float,ponderation_A));
                                        /* Ponderations de generation de l'image Resultat.                                           */
DEFV(Argument,DEFV(imageF,imageA_R_1));
DEFV(Argument,DEFV(imageF,imageA_I_1));
DEFV(Argument,DEFV(imageF,imageA_J_1));
DEFV(Argument,DEFV(imageF,imageA_K_1));
                                        /* Definition du quadruplet d'images {R,I,J,K} Argument 1.                                   */
DEFV(Argument,DEFV(imageF,imageA_R_2));
DEFV(Argument,DEFV(imageF,imageA_I_2));
DEFV(Argument,DEFV(imageF,imageA_J_2));
DEFV(Argument,DEFV(imageF,imageA_K_2));
                                        /* Definition du quadruplet d'images {R,I,J,K} Argument 2.                                   */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     /*..............................................................................................................................*/
     begin_image
          Bblock
          DEFV(hyper_complexe,quaternion_A1);
          DEFV(hyper_complexe,quaternion_A2);
          DEFV(hyper_complexe,quaternion_R);
                                        /* Definition des nombres hyper-complexes Arguments et Resultat.                             */

          HCinitialisation(quaternion_A1
                          ,loadF_point(imageA_R_1,X,Y)
                          ,loadF_point(imageA_I_1,X,Y)
                          ,loadF_point(imageA_J_1,X,Y)
                          ,loadF_point(imageA_K_1,X,Y)
                           );
          HCinitialisation(quaternion_A2
                          ,loadF_point(imageA_R_2,X,Y)
                          ,loadF_point(imageA_I_2,X,Y)
                          ,loadF_point(imageA_J_2,X,Y)
                          ,loadF_point(imageA_K_2,X,Y)
                           );
                                        /* Recuperation des nombres hyper-complexes Argument...                                      */

          Test(EST_VRAI(IFproduit_hyper_complexe_____multiplicatif))
               Bblock
               Test(EST_VRAI(IFproduit_hyper_complexe_____direct))
                    Bblock
                    HCproduit(quaternion_R,quaternion_A1,quaternion_A2);
                                        /* Calcul du produit des deux nombres hyper-complexes Argument...                            */
                    Eblock
               ATes
                    Bblock
                    HCquotient(quaternion_R,quaternion_A1,quaternion_A2);
                                        /* Calcul du quotient des deux nombres hyper-complexes Argument...                           */
                    Eblock
               ETes
               Eblock
          ATes
               Bblock
               Test(EST_VRAI(IFproduit_hyper_complexe_____direct))
                    Bblock
                    HCsomme(quaternion_R,quaternion_A1,quaternion_A2);
                                        /* Calcul de la somme des deux nombres hyper-complexes Argument...                           */
                    Eblock
               ATes
                    Bblock
                    HCdifference(quaternion_R,quaternion_A1,quaternion_A2);
                                        /* Calcul de la difference des deux nombres hyper-complexes Argument...                      */
                    Eblock
               ETes
               Eblock
          ETes

          storeF_point(LIZ8(ponderation_R,HReelle(quaternion_R)
                           ,ponderation_I,HImaginaire(quaternion_R)
                           ,ponderation_J,HJmaginaire(quaternion_R)
                           ,ponderation_K,HKmaginaire(quaternion_R)
                           ,ponderation_M,HCmodule(quaternion_R)
                           ,ponderation_T,HCargumentT_PI(quaternion_R)
                           ,ponderation_P,HCargumentP_PI(quaternion_R)
                           ,ponderation_A,HCargumentA_PI(quaternion_R)
                            )
                      ,imageR
                      ,X,Y
                       );
                                        /* Et enfin, renvoi d'une "partie" du Resultat...                                            */
          Eblock
     end_image

     RETIF(imageR);
     Eblock

EFonctionF

_______________________________________________________________________________________________________________________________________
_______________________________________________________________________________________________________________________________________
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        O P E R A T I O N S   H Y P E R - H Y P E R - C O M P L E X E S   D E   S E I Z E   I M A G E S  :                         */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*             *     * * * * * *   * * * * * *   * * * * * *   *         *   * * * * * *   *   * * * * * *   *         *             */
/*                        *             *        *             **        *        *        *   *         *   **        *             */
/*            * *         *             *        *             * *       *        *        *   *         *   * *       *             */
/*                        *             *        *             *  *      *        *        *   *         *   *  *      *             */
/*           *   *        *             *        *             *   *     *        *        *   *         *   *   *     *             */
/*                        *             *        * * *         *    *    *        *        *   *         *   *    *    *             */
/*          * * * *       *             *        *             *     *   *        *        *   *         *   *     *   *             */
/*                        *             *        *             *      *  *        *        *   *         *   *      *  *             */
/*         *       *      *             *        *             *       * *        *        *   *         *   *       * *             */
/*                        *             *        *             *        **        *        *   *         *   *        **             */
/*        *         *     *             *        * * * * * *   *         *        *        *   * * * * * *   *         *             */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        ATTENTION :                                                                                                                */
/*                                                                                                                                   */
/*                    Pour bien faire, cette fonction 'IFproduit_hyper_hyper_complexe(...)'                                          */
/*                  devrait etre dans 'v $xiii/????_image$FON' qui n'existe pas et                                                   */
/*                  que l'on ne va pas creer specialement pour des raisons economiques                                               */
/*                  evidentes...                                                                                                     */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionF

DEFV(Common,DEFV(Logical,SINT(IFproduit_hyper_hyper_complexe_____multiplicatif,VRAI)));
DEFV(Common,DEFV(Logical,SINT(IFproduit_hyper_hyper_complexe_____direct,VRAI)));
                                        /* Indicateurs permettant d'effectuer les quatre operations {{+,-},{*,/}}, la multiplication */
                                        /* etant l'operation par defaut...                                                           */

DEFV(Common,DEFV(FonctionF,POINTERF(IFproduit_hyper_hyper_complexe(imageR
                                                                  ,ponderation_R,ponderation_I,ponderation_J,ponderation_K
                                                                  ,ponderation_S,ponderation_T,ponderation_U,ponderation_V
                                                                  ,ponderation_M_,ponderation_A1,ponderation_A2,ponderation_A3
                                                                  ,ponderation_A4,ponderation_A5,ponderation_A6,ponderation_A7
                                                                  ,imageA_R_1,imageA_I_1,imageA_J_1,imageA_K_1
                                                                  ,imageA_S_1,imageA_T_1,imageA_U_1,imageA_V_1
                                                                  ,imageA_R_2,imageA_I_2,imageA_J_2,imageA_K_2
                                                                  ,imageA_S_2,imageA_T_2,imageA_U_2,imageA_V_2
                                                                   )
                                    )
                 )
     )
                                        /* Fonction introduite le 20110826104347.                                                    */
DEFV(Argument,DEFV(imageF,imageR));
                                        /* Image Resultat.                                                                           */
DEFV(Argument,DEFV(Float,ponderation_R));
DEFV(Argument,DEFV(Float,ponderation_I));
DEFV(Argument,DEFV(Float,ponderation_J));
DEFV(Argument,DEFV(Float,ponderation_K));
DEFV(Argument,DEFV(Float,ponderation_S));
DEFV(Argument,DEFV(Float,ponderation_T));
DEFV(Argument,DEFV(Float,ponderation_U));
DEFV(Argument,DEFV(Float,ponderation_V));

DEFV(Argument,DEFV(Float,ponderation_M_));
DEFV(Argument,DEFV(Float,ponderation_A1));
DEFV(Argument,DEFV(Float,ponderation_A2));
DEFV(Argument,DEFV(Float,ponderation_A3));
DEFV(Argument,DEFV(Float,ponderation_A4));
DEFV(Argument,DEFV(Float,ponderation_A5));
DEFV(Argument,DEFV(Float,ponderation_A6));
DEFV(Argument,DEFV(Float,ponderation_A7));
                                        /* Ponderations de generation de l'image Resultat.                                           */
DEFV(Argument,DEFV(imageF,imageA_R_1));
DEFV(Argument,DEFV(imageF,imageA_I_1));
DEFV(Argument,DEFV(imageF,imageA_J_1));
DEFV(Argument,DEFV(imageF,imageA_K_1));
DEFV(Argument,DEFV(imageF,imageA_S_1));
DEFV(Argument,DEFV(imageF,imageA_T_1));
DEFV(Argument,DEFV(imageF,imageA_U_1));
DEFV(Argument,DEFV(imageF,imageA_V_1));
                                        /* Definition de l'octuplet d'images {R,I,J,K,S,T,U,V} Argument 1.                           */
DEFV(Argument,DEFV(imageF,imageA_R_2));
DEFV(Argument,DEFV(imageF,imageA_I_2));
DEFV(Argument,DEFV(imageF,imageA_J_2));
DEFV(Argument,DEFV(imageF,imageA_K_2));
DEFV(Argument,DEFV(imageF,imageA_S_2));
DEFV(Argument,DEFV(imageF,imageA_T_2));
DEFV(Argument,DEFV(imageF,imageA_U_2));
DEFV(Argument,DEFV(imageF,imageA_V_2));
                                        /* Definition de l'octuplet d'images {R,I,J,K,S,T,U,V} Argument 2.                           */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     /*..............................................................................................................................*/
     begin_image
          Bblock
          DEFV(hyper_hyper_complexe,octonion_A1);
          DEFV(hyper_hyper_complexe,octonion_A2);
          DEFV(hyper_hyper_complexe,octonion_R);
                                        /* Definition des nombres hyper-hyper-complexes Arguments et Resultat.                       */

          HHCinitialisation(octonion_A1
                           ,loadF_point(imageA_R_1,X,Y)
                           ,loadF_point(imageA_I_1,X,Y)
                           ,loadF_point(imageA_J_1,X,Y)
                           ,loadF_point(imageA_K_1,X,Y)
                           ,loadF_point(imageA_S_1,X,Y)
                           ,loadF_point(imageA_T_1,X,Y)
                           ,loadF_point(imageA_U_1,X,Y)
                           ,loadF_point(imageA_V_1,X,Y)
                            );
          HHCinitialisation(octonion_A2
                           ,loadF_point(imageA_R_2,X,Y)
                           ,loadF_point(imageA_I_2,X,Y)
                           ,loadF_point(imageA_J_2,X,Y)
                           ,loadF_point(imageA_K_2,X,Y)
                           ,loadF_point(imageA_S_2,X,Y)
                           ,loadF_point(imageA_T_2,X,Y)
                           ,loadF_point(imageA_U_2,X,Y)
                           ,loadF_point(imageA_V_2,X,Y)
                            );
                                        /* Recuperation des nombres hyper-hyper-complexes Argument...                                */

          Test(EST_VRAI(IFproduit_hyper_hyper_complexe_____multiplicatif))
               Bblock
               Test(EST_VRAI(IFproduit_hyper_hyper_complexe_____direct))
                    Bblock
                    HHCproduit(octonion_R,octonion_A1,octonion_A2);
                                        /* Calcul du produit des deux nombres hyper-hyper-complexes Argument...                      */
                    Eblock
               ATes
                    Bblock
                    HHCquotient(octonion_R,octonion_A1,octonion_A2);
                                        /* Calcul du quotient des deux nombres hyper-hyper-complexes Argument...                     */
                    Eblock
               ETes
               Eblock
          ATes
               Bblock
               Test(EST_VRAI(IFproduit_hyper_hyper_complexe_____direct))
                    Bblock
                    HHCsomme(octonion_R,octonion_A1,octonion_A2);
                                        /* Calcul de la somme des deux nombres hyper-hyper-complexes Argument...                     */
                    Eblock
               ATes
                    Bblock
                    HHCdifference(octonion_R,octonion_A1,octonion_A2);
                                        /* Calcul de la difference des deux nombres hyper-hyper-complexes Argument...                */
                    Eblock
               ETes
               Eblock
          ETes

          storeF_point(LIZ16(ponderation_R,HHReelle(octonion_R)
                            ,ponderation_I,HHImaginaire(octonion_R)
                            ,ponderation_J,HHJmaginaire(octonion_R)
                            ,ponderation_K,HHKmaginaire(octonion_R)
                            ,ponderation_S,HHSmaginaire(octonion_R)
                            ,ponderation_T,HHTmaginaire(octonion_R)
                            ,ponderation_U,HHUmaginaire(octonion_R)
                            ,ponderation_V,HHVmaginaire(octonion_R)
                            ,ponderation_M_,HHCmodule(octonion_R)
                            ,ponderation_A1,HHCargumentA1_PI(octonion_R)
                            ,ponderation_A2,HHCargumentA2_PI(octonion_R)
                            ,ponderation_A3,HHCargumentA3_PI(octonion_R)
                            ,ponderation_A4,HHCargumentA4_PI(octonion_R)
                            ,ponderation_A5,HHCargumentA5_PI(octonion_R)
                            ,ponderation_A6,HHCargumentA6_PI(octonion_R)
                            ,ponderation_A7,HHCargumentA7_PI(octonion_R)
                             )
                      ,imageR
                      ,X,Y
                       );
                                        /* Et enfin, renvoi d'une "partie" du Resultat...                                            */
          Eblock
     end_image

     RETIF(imageR);
     Eblock

EFonctionF

_______________________________________________________________________________________________________________________________________
_______________________________________________________________________________________________________________________________________
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        P R O D U I T S   D I V E R S   E N T R E   S I X   I M A G E S  :                                                         */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   GENERE__FonctionF_Produits_RVB(nom_et_arguments_de_la_fonction,produit_RVB)                                                   \
                                        /* ATTENTION : le nom de la fonction est suivi de ses arguments pour des raisons liees       */ \
                                        /* a la recuperation automatique des fichiers d'arguments.                                   */ \
                                        /*                                                                                           */ \
                                        /* Ce generateur a ete introduit le 20071001095158...                                        */ \
DEFV(FonctionF,POINTERF(nom_et_arguments_de_la_fonction))                                                                               \
DEFV(Argument,DEFV(imageF,iR));                                                                                                         \
                                        /* Image Resultat...                                                                         */ \
DEFV(Argument,DEFV(imageF,iA1));                                                                                                        \
DEFV(Argument,DEFV(imageF,iA2));                                                                                                        \
DEFV(Argument,DEFV(imageF,iA3));                                                                                                        \
DEFV(Argument,DEFV(imageF,iA4));                                                                                                        \
DEFV(Argument,DEFV(imageF,iA5));                                                                                                        \
DEFV(Argument,DEFV(imageF,iA6));                                                                                                        \
                                        /* Images Arguments...                                                                       */ \
/*-----------------------------------------------------------------------------------------------------------------------------------*/ \
     Bblock                                                                                                                             \
     /*..............................................................................................................................*/ \
     begin_image                                                                                                                        \
          Bblock                                                                                                                        \
          storeF_point(produit_RVB(loadF_point(iA1,X,Y),loadF_point(iA2,X,Y),loadF_point(iA3,X,Y)                                       \
                                  ,loadF_point(iA4,X,Y),loadF_point(iA5,X,Y),loadF_point(iA6,X,Y)                                       \
                                   )                                                                                                    \
                      ,iR                                                                                                               \
                      ,X                                                                                                                \
                      ,Y                                                                                                                \
                       );                                                                                                               \
          Eblock                                                                                                                        \
     end_image                                                                                                                          \
                                                                                                                                        \
     RETIF(iR);                                                                                                                         \
     Eblock

BFonctionF

DEFV(Common,GENERE__FonctionF_Produits_RVB(IFproduit_scalaire(iR,iA1,iA2,iA3,iA4,iA5,iA6),ps0F3D))  /* Common,DEFV(Fonction,) :      */
                                        /* on notera qu'en faisant :                                                                 */
                                        /*                                                                                           */
                                        /*                  iA4 = iA1                                                                */
                                        /*                  iA5 = iA2                                                                */
                                        /*                  iA6 = iA3                                                                */
                                        /*                                                                                           */
                                        /* alors 'IFproduit_scalaire(...)' calcule la norme au carre du vecteur {iA1,iA2,iA3},       */
                                        /* soit donc le carre de la distance a l'origine...                                          */

EFonctionF

BFonctionF

DEFV(Common,GENERE__FonctionF_Produits_RVB(IFproduit_vectorX(iR,iA1,iA2,iA3,iA4,iA5,iA6),PvectX))   /* Common,DEFV(Fonction,) :      */

EFonctionF

BFonctionF

DEFV(Common,GENERE__FonctionF_Produits_RVB(IFproduit_vectorY(iR,iA1,iA2,iA3,iA4,iA5,iA6),PvectY))   /* Common,DEFV(Fonction,) :      */

EFonctionF

BFonctionF

DEFV(Common,GENERE__FonctionF_Produits_RVB(IFproduit_vectorZ(iR,iA1,iA2,iA3,iA4,iA5,iA6),PvectZ))   /* Common,DEFV(Fonction,) :      */

EFonctionF

#undef    GENERE__FonctionF_Produits_RVB

_______________________________________________________________________________________________________________________________________
_______________________________________________________________________________________________________________________________________
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        P R O D U I T   M I X T E   E N T R E   N E U F   I M A G E S  :                                                           */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionF

DEFV(Common,DEFV(FonctionF,POINTERF(IFproduit_mixte(iR,iA1,iA2,iA3,iA4,iA5,iA6,iA7,iA8,iA9))))
                                        /* Fonction introduite le 20080708171301...                                                  */
DEFV(Argument,DEFV(imageF,iR));
                                        /* Image Resultat...                                                                         */
DEFV(Argument,DEFV(imageF,iA1));
DEFV(Argument,DEFV(imageF,iA2));
DEFV(Argument,DEFV(imageF,iA3));
DEFV(Argument,DEFV(imageF,iA4));
DEFV(Argument,DEFV(imageF,iA5));
DEFV(Argument,DEFV(imageF,iA6));
DEFV(Argument,DEFV(imageF,iA7));
DEFV(Argument,DEFV(imageF,iA8));
DEFV(Argument,DEFV(imageF,iA9));
                                        /* Images Arguments...                                                                       */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     /*..............................................................................................................................*/
     begin_image
          Bblock
          storeF_point(Pmixte(loadF_point(iA1,X,Y),loadF_point(iA2,X,Y),loadF_point(iA3,X,Y)
                             ,loadF_point(iA4,X,Y),loadF_point(iA5,X,Y),loadF_point(iA6,X,Y)
                             ,loadF_point(iA7,X,Y),loadF_point(iA8,X,Y),loadF_point(iA9,X,Y)
                              )
                      ,iR
                      ,X
                      ,Y
                       );
          Eblock
     end_image

     RETIF(iR);
     Eblock

EFonctionF

_______________________________________________________________________________________________________________________________________
_______________________________________________________________________________________________________________________________________
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        E G A L I S A T I O N   D ' H I S T O G R A M M E   D ' U N E   I M A G E   " S T A N D A R D "   ' RVB '  :               */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionI

DEFV(Common,DEFV(FonctionI,Iegalisation_d_histogrammme_RVB(imageR_ROUGE,imageR_VERTE,imageR_BLEUE
                                                          ,imageA_ROUGE,imageA_VERTE,imageA_BLEUE
                                                           )
                 )
     )
                                        /* Cette fonction a ete introduite le 20081010210517...                                      */
DEFV(Argument,DEFV(image,imageR_ROUGE));
DEFV(Argument,DEFV(image,imageR_VERTE));
DEFV(Argument,DEFV(image,imageR_BLEUE));
                                        /* Images Resultat {ROUGE,VERTE,BLEUE}.                                                      */
DEFV(Argument,DEFV(image,imageA_ROUGE));
DEFV(Argument,DEFV(image,imageA_VERTE));
DEFV(Argument,DEFV(image,imageA_BLEUE));
                                        /* Images Argument {ROUGE,VERTE,BLEUE}.                                                      */

/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     INIT_ERROR;

     BDEFV(image,imageA_Hue);
     BDEFV(image,imageA_Luminance);
     BDEFV(image,imageA_Saturation);
                                        /* Images Argument {Hue,Luminance,Saturation}.                                               */
     BDEFV(image,imageA_Luminance_egalisee);
                                        /* Images 'Luminance' egalisee.                                                              */
     /*..............................................................................................................................*/
     CALS(Iconversion_RVB_en_HLS(imageA_Hue,imageA_Luminance,imageA_Saturation
                                ,imageA_ROUGE,imageA_VERTE,imageA_BLEUE
                                 )
          );
                                        /* Conversion 'RVB' --> 'HLS'.                                                               */
     CALS(Iegalisation_d_histogrammme(imageA_Luminance_egalisee,imageA_Luminance));
                                        /* Egalisation de la luminance.                                                              */

     CALS(Iconversion_HLS_en_RVB(imageR_ROUGE,imageR_VERTE,imageR_BLEUE
                                ,imageA_Hue,imageA_Luminance_egalisee,imageA_Saturation
                                 )
          );
                                        /* Conversion 'HLS' --> 'RVB'.                                                               */

     EDEFV(image,imageA_Luminance_egalisee);
                                        /* Images 'Luminance' egalisee.                                                              */
     EDEFV(image,imageA_Saturation);
     EDEFV(image,imageA_Luminance);
     EDEFV(image,imageA_Hue);
                                        /* Images Argument {Hue,Luminance,Saturation}.                                               */

     RETU_ERROR;
     Eblock

EFonctionI

_______________________________________________________________________________________________________________________________________
_______________________________________________________________________________________________________________________________________
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        E G A L I S A T I O N   D E   N I V E A U X   V O I S I N S   D E S   C O M P O S A N T E S                                */
/*        D ' U N E   I M A G E   " S T A N D A R D "   ' RVB '  :                                                                   */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionI

DEFV(Common,DEFV(Int,SINT(Iegalisation_locale_de_composantes_RVB_____epsilon,SEIZE)));
                                        /* Definition du voisinage des composantes {ROUGE,VERTE,BLEUE}.                              */

DEFV(Common,DEFV(Float,SINT(Iegalisation_locale_de_composantes_RVB_____ponderation_MIN3,FZERO)));
DEFV(Common,DEFV(Float,SINT(Iegalisation_locale_de_composantes_RVB_____ponderation_MOY3,FZERO)));
DEFV(Common,DEFV(Float,SINT(Iegalisation_locale_de_composantes_RVB_____ponderation_MAX3,FU)));
DEFV(Common,DEFV(Float,SINT(Iegalisation_locale_de_composantes_RVB_____translation_____,FZERO)));
                                        /* Choix de la methode d'unification des composantes {ROUGE,VERTE,BLEUE} lorsqu'elles        */
                                        /* sont proches. La translation a ete introduite le 20190102095836...                        */

DEFV(Common,DEFV(FonctionI,Iegalisation_locale_de_composantes_RVB(imageR_ROUGE,imageR_VERTE,imageR_BLEUE
                                                                 ,imageA_ROUGE,imageA_VERTE,imageA_BLEUE
                                                                  )
                 )
     )
                                        /* Cette fonction a ete introduite le 20181228105503...                                      */
DEFV(Argument,DEFV(image,imageR_ROUGE));
DEFV(Argument,DEFV(image,imageR_VERTE));
DEFV(Argument,DEFV(image,imageR_BLEUE));
                                        /* Images Resultat {ROUGE,VERTE,BLEUE}.                                                      */
DEFV(Argument,DEFV(image,imageA_ROUGE));
DEFV(Argument,DEFV(image,imageA_VERTE));
DEFV(Argument,DEFV(image,imageA_BLEUE));
                                        /* Images Argument {ROUGE,VERTE,BLEUE}.                                                      */

/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     INIT_ERROR;
     /*..............................................................................................................................*/
     begin_image
          Bblock
          DEFV(genere_p,INIT(point_courant_ROUGE,load_point(imageA_ROUGE,X,Y)));
          DEFV(genere_p,INIT(point_courant_VERTE,load_point(imageA_VERTE,X,Y)));
          DEFV(genere_p,INIT(point_courant_BLEUE,load_point(imageA_BLEUE,X,Y)));

          Test(I3ET(IFEQ_a_peu_pres_absolu(point_courant_ROUGE,point_courant_VERTE,Iegalisation_locale_de_composantes_RVB_____epsilon)
                   ,IFEQ_a_peu_pres_absolu(point_courant_VERTE,point_courant_BLEUE,Iegalisation_locale_de_composantes_RVB_____epsilon)
                   ,IFEQ_a_peu_pres_absolu(point_courant_BLEUE,point_courant_ROUGE,Iegalisation_locale_de_composantes_RVB_____epsilon)
                    )
               )
               Bblock
               DEFV(genere_p,INIT(point_courant_ROUGE_VERTE_BLEUE
                                 ,GENP(NIVA(LIN3(Iegalisation_locale_de_composantes_RVB_____ponderation_MIN3
                                                ,FLOT(NIVR(MIN3(point_courant_ROUGE
                                                               ,point_courant_VERTE
                                                               ,point_courant_BLEUE
                                                                )
                                                           )
                                                      )
                                                ,Iegalisation_locale_de_composantes_RVB_____ponderation_MOY3
                                                ,FLOT(NIVR(MOY3(point_courant_ROUGE
                                                               ,point_courant_VERTE
                                                               ,point_courant_BLEUE
                                                                )
                                                           )
                                                      )
                                                ,Iegalisation_locale_de_composantes_RVB_____ponderation_MAX3
                                                ,FLOT(NIVR(MAX3(point_courant_ROUGE
                                                               ,point_courant_VERTE
                                                               ,point_courant_BLEUE
                                                                )
                                                           )
                                                      )
                                                ,Iegalisation_locale_de_composantes_RVB_____translation_____
                                                 )
                                            )
                                       )
                                  )
                    );

               store_point(point_courant_ROUGE_VERTE_BLEUE,imageR_ROUGE,X,Y,FVARIABLE);
               store_point(point_courant_ROUGE_VERTE_BLEUE,imageR_VERTE,X,Y,FVARIABLE);
               store_point(point_courant_ROUGE_VERTE_BLEUE,imageR_BLEUE,X,Y,FVARIABLE);
                                        /* Cas ou les trois niveaux {ROUGE,VERTE,BLEUE} sont proches : ils ne font alors plus qu'un. */
               Eblock
          ATes
               Bblock
               store_point(point_courant_ROUGE,imageR_ROUGE,X,Y,FVARIABLE);
               store_point(point_courant_VERTE,imageR_VERTE,X,Y,FVARIABLE);
               store_point(point_courant_BLEUE,imageR_BLEUE,X,Y,FVARIABLE);
                                        /* Cas ou les trois niveaux {ROUGE,VERTE,BLEUE} sont eloignes : ils sont conserves...        */
               Eblock
          ETes
          Eblock
     end_image

     RETU_ERROR;
     Eblock

EFonctionI

_______________________________________________________________________________________________________________________________________
_______________________________________________________________________________________________________________________________________
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        T R A N S F O R M A T I O N   1   D E S   C O U L E U R S   E N   F O N C T I O N   D E S   C O O R D O N N E E S          */
/*        P O U R   D E U X   T R I P L E T S   D ' I M A G E S   S T A N D A R D  :                                                 */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionI

#define   TRANSFORMATION_DE_TROIS_NIVEAUX_RVB_EN_UNE_COORDONNEE(NomCoordonnee)                                                          \
                    Bblock                                                                                                              \
                    EGAL(coordonnee_ ## NomCoordonnee ## _normalisee                                                                    \
                        ,LRZ3(Itransformation_1_des_niveaux_RVB_en_fonction_des_coordonnees_XY_____ponderation_ROUGE_ ## NomCoordonnee  \
                             ,niveau_courant_normalise_ROUGE                                                                            \
                             ,Itransformation_1_des_niveaux_RVB_en_fonction_des_coordonnees_XY_____ponderation_VERTE_ ## NomCoordonnee  \
                             ,niveau_courant_normalise_VERTE                                                                            \
                             ,Itransformation_1_des_niveaux_RVB_en_fonction_des_coordonnees_XY_____ponderation_BLEUE_ ## NomCoordonnee  \
                             ,niveau_courant_normalise_BLEUE                                                                            \
                              )                                                                                                         \
                         );                                                                                                             \
                                        /* Utilisation simple d'une combinaison lineaire et donc d'une methode plus simple que celle */ \
                                        /* de 'IFtransformation_1_des_niveaux_RVB_en_fonction_des_coordonnees_XY(...)'.              */ \
                    EGAL(coordonnee_ ## NomCoordonnee ## _denormalisee                                                                  \
                        ,_cDENORMALISE_O ## NomCoordonnee(coordonnee_ ## NomCoordonnee ## _normalisee)                                  \
                         );                                                                                                             \
                    Eblock                                                                                                              \
                                        /* Introduit le 20190725094932 sous cette forme...                                           */ \
                                        /*                                                                                           */ \
                                        /* Cette version a demande les modifications 'v $xiiD/definit.1$DEF 20190726101713'...       */

DEFV(Common,DEFV(Float,SINT(Itransformation_1_des_niveaux_RVB_en_fonction_des_coordonnees_XY_____ponderation_ROUGE_X,FZERO)));
DEFV(Common,DEFV(Float,SINT(Itransformation_1_des_niveaux_RVB_en_fonction_des_coordonnees_XY_____ponderation_VERTE_X,FQU)));
DEFV(Common,DEFV(Float,SINT(Itransformation_1_des_niveaux_RVB_en_fonction_des_coordonnees_XY_____ponderation_BLEUE_X,FDU)));

DEFV(Common,DEFV(Float,SINT(Itransformation_1_des_niveaux_RVB_en_fonction_des_coordonnees_XY_____ponderation_ROUGE_Y,FDU)));
DEFV(Common,DEFV(Float,SINT(Itransformation_1_des_niveaux_RVB_en_fonction_des_coordonnees_XY_____ponderation_VERTE_Y,FQU)));
DEFV(Common,DEFV(Float,SINT(Itransformation_1_des_niveaux_RVB_en_fonction_des_coordonnees_XY_____ponderation_BLEUE_Y,FZERO)));
                                        /* Ponderations utiles pour definir les coordonnees {X,Y} de transformation et definies      */
                                        /* de facon tout a fait arbitraire...                                                        */
                                        /*                                                                                           */
                                        /* On notera le 20190730183556 que les valeurs par defaut des ponderations, a savoir         */
                                        /* {FZERO,FQU,FDU}, sont choisies de facon que leur somme soit inferieure a 1. En fait,      */
                                        /* je note le 20190731092325 que cela ne sert a rien puisque le 'LRZ3(...)' renormalise      */
                                        /* via la somme des trois ponderations (et du 'FZERO'...).                                   */

DEFV(Common,DEFV(FonctionI,Itransformation_1_des_niveaux_RVB_en_fonction_des_coordonnees_XY(imageR_ROUGE,imageR_VERTE,imageR_BLEUE
                                                                                           ,imageA_ROUGE,imageA_VERTE,imageA_BLEUE
                                                                                           ,imageN_ROUGE,imageN_VERTE,imageN_BLEUE
                                                                                            )
                 )
     )
                                        /* Cette fonction a ete introduite le 20190724091957...                                      */
DEFV(Argument,DEFV(image,imageR_ROUGE));
DEFV(Argument,DEFV(image,imageR_VERTE));
DEFV(Argument,DEFV(image,imageR_BLEUE));
                                        /* Images Resultat {ROUGE,VERTE,BLEUE}.                                                      */
DEFV(Argument,DEFV(image,imageA_ROUGE));
DEFV(Argument,DEFV(image,imageA_VERTE));
DEFV(Argument,DEFV(image,imageA_BLEUE));
                                        /* Images Argument {ROUGE,VERTE,BLEUE} a transformer (RVB --0--> XY).                        */
DEFV(Argument,DEFV(image,imageN_ROUGE));
DEFV(Argument,DEFV(image,imageN_VERTE));
DEFV(Argument,DEFV(image,imageN_BLEUE));
                                        /* Images Argument {ROUGE,VERTE,BLEUE} definissant les Niveaux des images 'imageR'.          */

/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     INIT_ERROR;
     /*..............................................................................................................................*/
     BSaveModifyVariable(Logical,AXES_COORDONNEES_FERMES_OUVERTS_____compatibilite_20090929,FAUX);
     BSaveModifyVariable(Logical,AXE_NIVEAUX_OUVERT_FERME_____compatibilite_19951221,VRAI);
                                        /* Introduit le 20190724133544 afin que les axes de niveaux et les axes de coordonnees       */
                                        /* soient compatibles (c'est-a-dire utilisant [0,1[), puisqu'ils vont etre "melanges"        */
                                        /* ci-apres. Fut ajoute 'AXES_COORDONNEES_FERMES_OUVERTS_____compatibilite_20090929'         */
                                        /* le 20190724150704 pour etre certain du bon fonctionnement...                              */
                                        /*                                                                                           */
                                        /* En format 'Pal' avec '$xcp/Loperators_I$K' utilisant les arguments :                      */
                                        /*                                                                                           */
                                        /*                  AXES_COORDONNEES_FERMES_OUVERTS_____compatibilite_20090929=FAUX          */
                                        /*                  AXE_NIVEAUX_OUVERT_FERME_____compatibilite_19951221=VRAI                 */
                                        /*                                                                                           */
                                        /* cela donne les quelques valeurs interessantes suivantes :                                 */
                                        /*                                                                                           */
                                        /*                  _cDENORMALISE_OX(+0)=+0                                                  */
                                        /*                  _cDENORMALISE_OX(+1)=+780                                                */
                                        /*                  _cDENORMALISE_OY(+0)=+0                                                  */
                                        /*                  _cDENORMALISE_OY(+1)=+575                                                */
                                        /*                                                                                           */
                                        /*                  ______NORMALISE_NIVEAU(+0)=+0                                            */
                                        /*                  ______NORMALISE_NIVEAU(+255)=+0.99609375                                 */
                                        /*                                                                                           */

     begin_image
          Bblock
          DEFV(Float,INIT(niveau_courant_normalise_ROUGE,______NORMALISE_NIVEAU(load_point(imageA_ROUGE,X,Y))));
          DEFV(Float,INIT(niveau_courant_normalise_VERTE,______NORMALISE_NIVEAU(load_point(imageA_VERTE,X,Y))));
          DEFV(Float,INIT(niveau_courant_normalise_BLEUE,______NORMALISE_NIVEAU(load_point(imageA_BLEUE,X,Y))));

          DEFV(Float,INIT(coordonnee_X_normalisee,FLOT__UNDEF));
          DEFV(Float,INIT(coordonnee_Y_normalisee,FLOT__UNDEF));

          DEFV(Int,INIT(coordonnee_X_denormalisee,UNDEF));
          DEFV(Int,INIT(coordonnee_Y_denormalisee,UNDEF));

          TRANSFORMATION_DE_TROIS_NIVEAUX_RVB_EN_UNE_COORDONNEE(X);
          TRANSFORMATION_DE_TROIS_NIVEAUX_RVB_EN_UNE_COORDONNEE(Y);
                                        /* Les triplets de niveaux {R,V,B} des trois images 'imageA' sont transformes en couple      */
                                        /* de coordonnees {X,Y} d'acces aux trois images 'imageN'...                                 */

          store_point(load_point_valide(imageN_ROUGE,coordonnee_X_denormalisee,coordonnee_Y_denormalisee),imageR_ROUGE,X,Y,FVARIABLE);
          store_point(load_point_valide(imageN_VERTE,coordonnee_X_denormalisee,coordonnee_Y_denormalisee),imageR_VERTE,X,Y,FVARIABLE);
          store_point(load_point_valide(imageN_BLEUE,coordonnee_X_denormalisee,coordonnee_Y_denormalisee),imageR_BLEUE,X,Y,FVARIABLE);
                                        /* Et generation des nouveaux niveaux...                                                     */
          Eblock
     end_image

     ESaveModifyVariable(Logical,AXE_NIVEAUX_OUVERT_FERME_____compatibilite_19951221);
     ESaveModifyVariable(Logical,AXES_COORDONNEES_FERMES_OUVERTS_____compatibilite_20090929);

     RETU_ERROR;
     Eblock

#undef    TRANSFORMATION_DE_TROIS_NIVEAUX_RVB_EN_UNE_COORDONNEE

EFonctionI

_______________________________________________________________________________________________________________________________________
_______________________________________________________________________________________________________________________________________
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        T R A N S F O R M A T I O N   1   D E S   C O U L E U R S   E N   F O N C T I O N   D E S   C O O R D O N N E E S          */
/*        P O U R   D E U X   T R I P L E T S   D ' I M A G E S   N O N   S T A N D A R D  :                                         */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionI

#define   TRANSFORMATION_DE_TROIS_NIVEAUX_RVB_EN_UNE_COORDONNEE(NomCoo)                                                                 \
                    Bblock                                                                                                              \
                    EGAL(coordonnee_ ## NomCoo ## _flottante                                                                            \
                        ,HORNER_3_02(niveau_courant_ROUGE                                                                               \
                                    ,niveau_courant_VERTE                                                                               \
                                    ,niveau_courant_BLEUE                                                                               \
                                    ,IFtransformation_1_des_niveaux_RVB_en_fonction_des_coordonnees_XY_____ponderation_a222_ ## NomCoo  \
                                    ,IFtransformation_1_des_niveaux_RVB_en_fonction_des_coordonnees_XY_____ponderation_a221_ ## NomCoo  \
                                    ,IFtransformation_1_des_niveaux_RVB_en_fonction_des_coordonnees_XY_____ponderation_a220_ ## NomCoo  \
                                    ,IFtransformation_1_des_niveaux_RVB_en_fonction_des_coordonnees_XY_____ponderation_a212_ ## NomCoo  \
                                    ,IFtransformation_1_des_niveaux_RVB_en_fonction_des_coordonnees_XY_____ponderation_a211_ ## NomCoo  \
                                    ,IFtransformation_1_des_niveaux_RVB_en_fonction_des_coordonnees_XY_____ponderation_a210_ ## NomCoo  \
                                    ,IFtransformation_1_des_niveaux_RVB_en_fonction_des_coordonnees_XY_____ponderation_a202_ ## NomCoo  \
                                    ,IFtransformation_1_des_niveaux_RVB_en_fonction_des_coordonnees_XY_____ponderation_a201_ ## NomCoo  \
                                    ,IFtransformation_1_des_niveaux_RVB_en_fonction_des_coordonnees_XY_____ponderation_a200_ ## NomCoo  \
                                    ,IFtransformation_1_des_niveaux_RVB_en_fonction_des_coordonnees_XY_____ponderation_a122_ ## NomCoo  \
                                    ,IFtransformation_1_des_niveaux_RVB_en_fonction_des_coordonnees_XY_____ponderation_a121_ ## NomCoo  \
                                    ,IFtransformation_1_des_niveaux_RVB_en_fonction_des_coordonnees_XY_____ponderation_a120_ ## NomCoo  \
                                    ,IFtransformation_1_des_niveaux_RVB_en_fonction_des_coordonnees_XY_____ponderation_a112_ ## NomCoo  \
                                    ,IFtransformation_1_des_niveaux_RVB_en_fonction_des_coordonnees_XY_____ponderation_a111_ ## NomCoo  \
                                    ,IFtransformation_1_des_niveaux_RVB_en_fonction_des_coordonnees_XY_____ponderation_a110_ ## NomCoo  \
                                    ,IFtransformation_1_des_niveaux_RVB_en_fonction_des_coordonnees_XY_____ponderation_a102_ ## NomCoo  \
                                    ,IFtransformation_1_des_niveaux_RVB_en_fonction_des_coordonnees_XY_____ponderation_a101_ ## NomCoo  \
                                    ,IFtransformation_1_des_niveaux_RVB_en_fonction_des_coordonnees_XY_____ponderation_a100_ ## NomCoo  \
                                    ,IFtransformation_1_des_niveaux_RVB_en_fonction_des_coordonnees_XY_____ponderation_a022_ ## NomCoo  \
                                    ,IFtransformation_1_des_niveaux_RVB_en_fonction_des_coordonnees_XY_____ponderation_a021_ ## NomCoo  \
                                    ,IFtransformation_1_des_niveaux_RVB_en_fonction_des_coordonnees_XY_____ponderation_a020_ ## NomCoo  \
                                    ,IFtransformation_1_des_niveaux_RVB_en_fonction_des_coordonnees_XY_____ponderation_a012_ ## NomCoo  \
                                    ,IFtransformation_1_des_niveaux_RVB_en_fonction_des_coordonnees_XY_____ponderation_a011_ ## NomCoo  \
                                    ,IFtransformation_1_des_niveaux_RVB_en_fonction_des_coordonnees_XY_____ponderation_a010_ ## NomCoo  \
                                    ,IFtransformation_1_des_niveaux_RVB_en_fonction_des_coordonnees_XY_____ponderation_a002_ ## NomCoo  \
                                    ,IFtransformation_1_des_niveaux_RVB_en_fonction_des_coordonnees_XY_____ponderation_a001_ ## NomCoo  \
                                    ,IFtransformation_1_des_niveaux_RVB_en_fonction_des_coordonnees_XY_____ponderation_a000_ ## NomCoo  \
                                     )                                                                                                  \
                         );                                                                                                             \
                                        /* Utilisation d'un polynome du second degre et donc d'une methode plus generale que celle   */ \
                                        /* de 'Itransformation_1_des_niveaux_RVB_en_fonction_des_coordonnees_XY(...)'.               */ \
                    Eblock

DEFV(Common,DEFV(Float,SINT(IFtransformation_1_des_niveaux_RVB_en_fonction_des_coordonnees_XY_____ponderation_a222_X,FZERO)));
DEFV(Common,DEFV(Float,SINT(IFtransformation_1_des_niveaux_RVB_en_fonction_des_coordonnees_XY_____ponderation_a221_X,FZERO)));
DEFV(Common,DEFV(Float,SINT(IFtransformation_1_des_niveaux_RVB_en_fonction_des_coordonnees_XY_____ponderation_a220_X,FZERO)));
DEFV(Common,DEFV(Float,SINT(IFtransformation_1_des_niveaux_RVB_en_fonction_des_coordonnees_XY_____ponderation_a212_X,FZERO)));
DEFV(Common,DEFV(Float,SINT(IFtransformation_1_des_niveaux_RVB_en_fonction_des_coordonnees_XY_____ponderation_a211_X,FZERO)));
DEFV(Common,DEFV(Float,SINT(IFtransformation_1_des_niveaux_RVB_en_fonction_des_coordonnees_XY_____ponderation_a210_X,FZERO)));
DEFV(Common,DEFV(Float,SINT(IFtransformation_1_des_niveaux_RVB_en_fonction_des_coordonnees_XY_____ponderation_a202_X,FZERO)));
DEFV(Common,DEFV(Float,SINT(IFtransformation_1_des_niveaux_RVB_en_fonction_des_coordonnees_XY_____ponderation_a201_X,FZERO)));
DEFV(Common,DEFV(Float,SINT(IFtransformation_1_des_niveaux_RVB_en_fonction_des_coordonnees_XY_____ponderation_a200_X,FZERO)));
DEFV(Common,DEFV(Float,SINT(IFtransformation_1_des_niveaux_RVB_en_fonction_des_coordonnees_XY_____ponderation_a122_X,FZERO)));
DEFV(Common,DEFV(Float,SINT(IFtransformation_1_des_niveaux_RVB_en_fonction_des_coordonnees_XY_____ponderation_a121_X,FZERO)));
DEFV(Common,DEFV(Float,SINT(IFtransformation_1_des_niveaux_RVB_en_fonction_des_coordonnees_XY_____ponderation_a120_X,FZERO)));
DEFV(Common,DEFV(Float,SINT(IFtransformation_1_des_niveaux_RVB_en_fonction_des_coordonnees_XY_____ponderation_a112_X,FZERO)));
DEFV(Common,DEFV(Float,SINT(IFtransformation_1_des_niveaux_RVB_en_fonction_des_coordonnees_XY_____ponderation_a111_X,FZERO)));
DEFV(Common,DEFV(Float,SINT(IFtransformation_1_des_niveaux_RVB_en_fonction_des_coordonnees_XY_____ponderation_a110_X,FZERO)));
DEFV(Common,DEFV(Float,SINT(IFtransformation_1_des_niveaux_RVB_en_fonction_des_coordonnees_XY_____ponderation_a102_X,FZERO)));
DEFV(Common,DEFV(Float,SINT(IFtransformation_1_des_niveaux_RVB_en_fonction_des_coordonnees_XY_____ponderation_a101_X,FQU)));
DEFV(Common,DEFV(Float,SINT(IFtransformation_1_des_niveaux_RVB_en_fonction_des_coordonnees_XY_____ponderation_a100_X,FZERO)));
DEFV(Common,DEFV(Float,SINT(IFtransformation_1_des_niveaux_RVB_en_fonction_des_coordonnees_XY_____ponderation_a022_X,FZERO)));
DEFV(Common,DEFV(Float,SINT(IFtransformation_1_des_niveaux_RVB_en_fonction_des_coordonnees_XY_____ponderation_a021_X,FZERO)));
DEFV(Common,DEFV(Float,SINT(IFtransformation_1_des_niveaux_RVB_en_fonction_des_coordonnees_XY_____ponderation_a020_X,FZERO)));
DEFV(Common,DEFV(Float,SINT(IFtransformation_1_des_niveaux_RVB_en_fonction_des_coordonnees_XY_____ponderation_a012_X,FZERO)));
DEFV(Common,DEFV(Float,SINT(IFtransformation_1_des_niveaux_RVB_en_fonction_des_coordonnees_XY_____ponderation_a011_X,FZERO)));
DEFV(Common,DEFV(Float,SINT(IFtransformation_1_des_niveaux_RVB_en_fonction_des_coordonnees_XY_____ponderation_a010_X,FZERO)));
DEFV(Common,DEFV(Float,SINT(IFtransformation_1_des_niveaux_RVB_en_fonction_des_coordonnees_XY_____ponderation_a002_X,FZERO)));
DEFV(Common,DEFV(Float,SINT(IFtransformation_1_des_niveaux_RVB_en_fonction_des_coordonnees_XY_____ponderation_a001_X,FDU)));
DEFV(Common,DEFV(Float,SINT(IFtransformation_1_des_niveaux_RVB_en_fonction_des_coordonnees_XY_____ponderation_a000_X,FZERO)));

DEFV(Common,DEFV(Float,SINT(IFtransformation_1_des_niveaux_RVB_en_fonction_des_coordonnees_XY_____ponderation_a222_Y,FZERO)));
DEFV(Common,DEFV(Float,SINT(IFtransformation_1_des_niveaux_RVB_en_fonction_des_coordonnees_XY_____ponderation_a221_Y,FZERO)));
DEFV(Common,DEFV(Float,SINT(IFtransformation_1_des_niveaux_RVB_en_fonction_des_coordonnees_XY_____ponderation_a220_Y,FZERO)));
DEFV(Common,DEFV(Float,SINT(IFtransformation_1_des_niveaux_RVB_en_fonction_des_coordonnees_XY_____ponderation_a212_Y,FZERO)));
DEFV(Common,DEFV(Float,SINT(IFtransformation_1_des_niveaux_RVB_en_fonction_des_coordonnees_XY_____ponderation_a211_Y,FZERO)));
DEFV(Common,DEFV(Float,SINT(IFtransformation_1_des_niveaux_RVB_en_fonction_des_coordonnees_XY_____ponderation_a210_Y,FZERO)));
DEFV(Common,DEFV(Float,SINT(IFtransformation_1_des_niveaux_RVB_en_fonction_des_coordonnees_XY_____ponderation_a202_Y,FZERO)));
DEFV(Common,DEFV(Float,SINT(IFtransformation_1_des_niveaux_RVB_en_fonction_des_coordonnees_XY_____ponderation_a201_Y,FDU)));
DEFV(Common,DEFV(Float,SINT(IFtransformation_1_des_niveaux_RVB_en_fonction_des_coordonnees_XY_____ponderation_a200_Y,FZERO)));
DEFV(Common,DEFV(Float,SINT(IFtransformation_1_des_niveaux_RVB_en_fonction_des_coordonnees_XY_____ponderation_a122_Y,FZERO)));
DEFV(Common,DEFV(Float,SINT(IFtransformation_1_des_niveaux_RVB_en_fonction_des_coordonnees_XY_____ponderation_a121_Y,FZERO)));
DEFV(Common,DEFV(Float,SINT(IFtransformation_1_des_niveaux_RVB_en_fonction_des_coordonnees_XY_____ponderation_a120_Y,FZERO)));
DEFV(Common,DEFV(Float,SINT(IFtransformation_1_des_niveaux_RVB_en_fonction_des_coordonnees_XY_____ponderation_a112_Y,FZERO)));
DEFV(Common,DEFV(Float,SINT(IFtransformation_1_des_niveaux_RVB_en_fonction_des_coordonnees_XY_____ponderation_a111_Y,FZERO)));
DEFV(Common,DEFV(Float,SINT(IFtransformation_1_des_niveaux_RVB_en_fonction_des_coordonnees_XY_____ponderation_a110_Y,FZERO)));
DEFV(Common,DEFV(Float,SINT(IFtransformation_1_des_niveaux_RVB_en_fonction_des_coordonnees_XY_____ponderation_a102_Y,FZERO)));
DEFV(Common,DEFV(Float,SINT(IFtransformation_1_des_niveaux_RVB_en_fonction_des_coordonnees_XY_____ponderation_a101_Y,FQU)));
DEFV(Common,DEFV(Float,SINT(IFtransformation_1_des_niveaux_RVB_en_fonction_des_coordonnees_XY_____ponderation_a100_Y,FZERO)));
DEFV(Common,DEFV(Float,SINT(IFtransformation_1_des_niveaux_RVB_en_fonction_des_coordonnees_XY_____ponderation_a022_Y,FZERO)));
DEFV(Common,DEFV(Float,SINT(IFtransformation_1_des_niveaux_RVB_en_fonction_des_coordonnees_XY_____ponderation_a021_Y,FZERO)));
DEFV(Common,DEFV(Float,SINT(IFtransformation_1_des_niveaux_RVB_en_fonction_des_coordonnees_XY_____ponderation_a020_Y,FZERO)));
DEFV(Common,DEFV(Float,SINT(IFtransformation_1_des_niveaux_RVB_en_fonction_des_coordonnees_XY_____ponderation_a012_Y,FZERO)));
DEFV(Common,DEFV(Float,SINT(IFtransformation_1_des_niveaux_RVB_en_fonction_des_coordonnees_XY_____ponderation_a011_Y,FZERO)));
DEFV(Common,DEFV(Float,SINT(IFtransformation_1_des_niveaux_RVB_en_fonction_des_coordonnees_XY_____ponderation_a010_Y,FZERO)));
DEFV(Common,DEFV(Float,SINT(IFtransformation_1_des_niveaux_RVB_en_fonction_des_coordonnees_XY_____ponderation_a002_Y,FZERO)));
DEFV(Common,DEFV(Float,SINT(IFtransformation_1_des_niveaux_RVB_en_fonction_des_coordonnees_XY_____ponderation_a001_Y,FZERO)));
DEFV(Common,DEFV(Float,SINT(IFtransformation_1_des_niveaux_RVB_en_fonction_des_coordonnees_XY_____ponderation_a000_Y,FZERO)));
                                        /* Ponderations utiles pour definir les coordonnees {X,Y} de transformation et definies      */
                                        /* de facon tout a fait arbitraire...                                                        */
                                        /*                                                                                           */
                                        /* On notera que la somme des ponderations {FZERO,FQU,FDU} est inferieure a 1. En fait, je   */
                                        /* note le 20190731092325 que cela ne sert a rien, le 'IFnormalisation_automatique(...)'     */
                                        /* renormalisant les valeurs calculees...                                                    */

DEFV(Common,DEFV(FonctionI,IFtransformation_1_des_niveaux_RVB_en_fonction_des_coordonnees_XY(imageR_ROUGE,imageR_VERTE,imageR_BLEUE
                                                                                            ,imageA_ROUGE,imageA_VERTE,imageA_BLEUE
                                                                                            ,imageN_ROUGE,imageN_VERTE,imageN_BLEUE
                                                                                             )
                 )
     )
                                        /* Cette fonction a ete introduite le 20190730105122...                                      */
DEFV(Argument,DEFV(imageF,imageR_ROUGE));
DEFV(Argument,DEFV(imageF,imageR_VERTE));
DEFV(Argument,DEFV(imageF,imageR_BLEUE));
                                        /* Images Resultat {ROUGE,VERTE,BLEUE}.                                                      */
DEFV(Argument,DEFV(imageF,imageA_ROUGE));
DEFV(Argument,DEFV(imageF,imageA_VERTE));
DEFV(Argument,DEFV(imageF,imageA_BLEUE));
                                        /* Images Argument {ROUGE,VERTE,BLEUE} a transformer (RVB --0--> XY).                        */
DEFV(Argument,DEFV(imageF,imageN_ROUGE));
DEFV(Argument,DEFV(imageF,imageN_VERTE));
DEFV(Argument,DEFV(imageF,imageN_BLEUE));
                                        /* Images Argument {ROUGE,VERTE,BLEUE} definissant les Niveaux des images 'imageR'.          */

/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     INIT_ERROR;
     /*..............................................................................................................................*/
     BDEFV(imageF,imageT1_X);
     BDEFV(imageF,imageT1_Y);

     BDEFV(imageF,imageT2_X);
     BDEFV(imageF,imageT2_Y);
                                        /* Images de manoeuvre.                                                                      */

     BSaveModifyVariable(Logical,AXES_COORDONNEES_FERMES_OUVERTS_____compatibilite_20090929,FAUX);
                                        /* Par "symetrie" avec 'Itransformation_1_des_niveaux_RVB_en_fonction_des_coordonnees_XY'... */

     begin_image
          Bblock
          DEFV(genere_Float,INIT(niveau_courant_ROUGE,loadF_point(imageA_ROUGE,X,Y)));
          DEFV(genere_Float,INIT(niveau_courant_VERTE,loadF_point(imageA_VERTE,X,Y)));
          DEFV(genere_Float,INIT(niveau_courant_BLEUE,loadF_point(imageA_BLEUE,X,Y)));

          DEFV(Float,INIT(coordonnee_X_flottante,FLOT__UNDEF));
          DEFV(Float,INIT(coordonnee_Y_flottante,FLOT__UNDEF));

          TRANSFORMATION_DE_TROIS_NIVEAUX_RVB_EN_UNE_COORDONNEE(X);
          TRANSFORMATION_DE_TROIS_NIVEAUX_RVB_EN_UNE_COORDONNEE(Y);
                                        /* Les triplets de niveaux {R,V,B} des trois images 'imageA' sont transformes en couple      */
                                        /* de coordonnees {X,Y} d'acces aux trois images 'imageN'...                                 */

          storeF_point(coordonnee_X_flottante,imageT1_X,X,Y);
          storeF_point(coordonnee_Y_flottante,imageT1_Y,X,Y);
          Eblock
     end_image

     BSaveModifyVariable(Logical,IFnormalisation_____compatibilite_20120705,VRAI);
                                        /* Afin de gerer correctement le cas ou les extrema sont egaux...                            */
     BSaveModifyVariable(Logical,IFnormalisation_____conserver_le_zero,FAUX);
                                        /* On ne sait jamais...                                                                      */

     CALS(IFnormalisation_automatique(imageT2_X,imageT1_X));
     CALS(IFnormalisation_automatique(imageT2_Y,imageT1_Y));
                                        /* Normalisation des futures coordonnees 'X' et 'Y'...                                       */

     ESaveModifyVariable(Logical,IFnormalisation_____conserver_le_zero);
     ESaveModifyVariable(Logical,IFnormalisation_____compatibilite_20120705);

     begin_image
          Bblock
          DEFV(Float,INIT(coordonnee_X_normalisee,loadF_point(imageT2_X,X,Y)));
          DEFV(Float,INIT(coordonnee_Y_normalisee,loadF_point(imageT2_Y,X,Y)));

          DEFV(Int,INIT(coordonnee_X_denormalisee,UNDEF));
          DEFV(Int,INIT(coordonnee_Y_denormalisee,UNDEF));

          EGAL(coordonnee_X_denormalisee,_cDENORMALISE_OX(coordonnee_X_normalisee));
          EGAL(coordonnee_Y_denormalisee,_cDENORMALISE_OY(coordonnee_Y_normalisee));

          storeF_point(loadF_point_valide(imageN_ROUGE,coordonnee_X_denormalisee,coordonnee_Y_denormalisee),imageR_ROUGE,X,Y);
          storeF_point(loadF_point_valide(imageN_VERTE,coordonnee_X_denormalisee,coordonnee_Y_denormalisee),imageR_VERTE,X,Y);
          storeF_point(loadF_point_valide(imageN_BLEUE,coordonnee_X_denormalisee,coordonnee_Y_denormalisee),imageR_BLEUE,X,Y);
                                        /* Et generation des nouveaux niveaux...                                                     */
          Eblock
     end_image

     ESaveModifyVariable(Logical,AXES_COORDONNEES_FERMES_OUVERTS_____compatibilite_20090929);

     EDEFV(imageF,imageT2_Y);
     EDEFV(imageF,imageT2_X);

     EDEFV(imageF,imageT1_Y);
     EDEFV(imageF,imageT1_X);

     RETU_ERROR;
     Eblock

#undef    TRANSFORMATION_DE_TROIS_NIVEAUX_RVB_EN_UNE_COORDONNEE

EFonctionI

_______________________________________________________________________________________________________________________________________



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.