#######################################################################################################################################
#                                                                                                                                     #
#         Z O O M   S U R   L E S   E C H E L L E S   D ' U N E   T R A N S F O R M E E   E N   O N D E L E T T E S  :                #
#                                                                                                                                     #
#                                                                                                                                     #
#         Author of '$xivP/disk.000000006/face.2/.MORL.2.22.$U' :                                                                                    #
#                                                                                                                                     #
#                     Jean-Francois Colonna (LACTAMME, 20030509105819).                                                               #
#                                                                                                                                     #
#######################################################################################################################################

$Z        SETParam            Premiere                      1

$Z        SETParam            Derniere                      128

$Z        SETParam            _____Dilat0                   0.01

$Z        SETParam            _____DilatN                   0.40

$Z        unsetenv  Dilat0
$Z        SETENV    Dilat0    $_____Dilat0
$Z        unsetenv  DilatN
$Z        SETENV    DilatN    $_____DilatN

$X        echo                "neutre"
$X                                      # commande destinee uniquement a mettre a jour l'environnement 'env'...                       #

$Z        setParam            _____Anisotrope               1

$Z        setParam            _____Angle                    0

$Z        setParam            _____Isotrope                 0

$Z        setParam            _____imageT                   $xTV/MORLET
$Z                                      # Racine du nom des images Temporaires (introduit le 20030510135158)...                       #

$Z        setParam            _____Postfixe                 $PR
$Z                                      # Postfixe de la composante a conserver (introduit le 20030505122704)...                      #

$Z        setParam            _____Fermat                   0.2
$Z                                      # Definition de la modification de la dynamique (introduit le 20030510192318)...              #

$Z        Std

$Z        SET                 Fsize=$UNDEF
$Z                                      # Afin d'eviter un :                                                                          #
$Z                                      #                                                                                             #
$Z                                      #                   Fsize: Undefined variable.                                                #
$Z                                      #                                                                                             #
$Z                                      # lors du 'listN' dans le traitement du 'if(...)' qui suit...                                 #
$Z        SIZE                $_____imageA
$Z
$Z        if                  ($Fsize == $taille_Std) then
$Z                                      # Ce test a ete introduit le 20030502140754 en vue de traiter des images "standard=FAUX"...   #
$Z                            $xci/acces$X                                                                                              \
$Z                                                A=$_____imageA                                                                        \
$Z                                                standard=VRAI convertir_standard=VRAI                                                 \
$Z                                                                                                                      $formatI  |     \
$Z                            $xci/normalise.01$X                                                                                       \
$Z                                                origine=-1                                                                            \
$Z                                                extremite=+1                                                                          \
$Z                                                R=$xTV/CHAMP                                                                          \
$Z                                                                                                                      $formatI
$Z        else
$Z                                      # Ce test a ete introduit le 20030508100437 afin de conserver en l'etat les images de type    #
$Z                                      # "standard=FAUX"...                                                                          #
$Z                            $xci/acces$X                                                                                              \
$Z                                                A=$_____imageA                                                                        \
$Z                                                standard=FAUX convertir_non_standard=FAUX                                             \
$Z                                                R=$xTV/CHAMP                                                                          \
$Z                                                                                                                      $formatI
$Z                                      # La normalisation du champ a ete introduite le 20030506144818 dans [0,1] et le               #
$Z                                      # 20030508192413 dans [-1,+1]...                                                              #
$Z        endif
$Z
$Z        unset               Fsize

$Z        $DELETE   $xTV/MINIMUM
$Z        $DELETE   $xTV/MAXIMUM

$c                  #include  <stdio.h>
$c
$c                  extern    double    atof();
$c                  extern    char      *getenv();
$c
$c                  #define   Dilat0    (atof(getenv("Dilat0")))
$c                                      /* Cette valeur doit etre superieure a N/512 ou '512' est sensee etre la dimension de        */
$c                                      /* l'image '$xTV/CHAMP' et 'N' un nombre entier plus grand que 1 ; ainsi, l'ondelette        */
$c                                      /* couvre plus d'un point...                                                                 */
$c                  #define   DilatN    (atof(getenv("DilatN")))
$c
$c                  #define   N0        Premiere
$c                  #define   N         Derniere
$c
$c                  int       main()
$c                            {
$c                            int       n;
$c
$c                            double    a=(Dilat0-DilatN)/((N-N0)*(Dilat0*DilatN));
$c                            double    b=((N*DilatN)-(N0*Dilat0))/((N-N0)*(Dilat0*DilatN));
$c                                      /* Definition de la fonction :                                                               */
$c                                      /*                                                                                           */
$c                                      /*                             1                                                             */
$c                                      /*                  f(x) = ---------                                                         */
$c                                      /*                          a.x + b                                                          */
$c                                      /*                                                                                           */
$c                                      /* telle que :                                                                               */
$c                                      /*                                                                                           */
$c                                      /*                  f(N0) = Dilat0                                                           */
$c                                      /*                  f(N)  = DilatN                                                           */
$c                                      /*                                                                                           */
$c
$c                            for       (n=N0 ; n<=N ; n++)
$c                                      {
$c                                      double    Dilat=1/((a*((double)n))+b);
$c
$c                                      printf("$xci/morlet.12$Z
$c                                                          $xTV/CHAMP
$c                                                          $_____imageT
$c                                                          VRAI
$c                                                          %f
$c                                                          $_____Anisotrope
$c                                                          $_____Angle
$c                                                          $_____Isotrope\n"
$c                                            ,Dilat
$c                                             );
$c                                      /* Transformation directe de la fonction F par l'ondelette W :                               */
$c                                      /*                                                                                           */
$c                                      /*                                                                                           */
$c                                      /*                                      /                                                    */
$c                                      /*                                     |      ----------                                     */
$c                                      /*                               1     |          t-T                                        */
$c                                      /*                  TD(T,S) = -------  | F(t). W(-----) .dt                                  */
$c                                      /*                               ---   |           S                                         */
$c                                      /*                             \/ S    |                                                     */
$c                                      /*                                    /                                                      */
$c                                      /*                                                                                           */
$c                                      /*                                                                                           */
$c                                      /*                            \___________________________/                                  */
$c                                      /*                                                                                           */
$c                                      /*                      calcul de '$xci/morlet.12$Z' directe=VRAI                            */
$c                                      /*                                                                                           */
$c                                      /*                                                                                           */
$c                                      /* illustre dans un cas mono-dimensionnel ; 'S' represente la dilatation (ou "Scaling") et   */
$c                                      /* et 'T' la Translation.                                                                    */
$c
$c                                      printf("$xci/morlet.12$Z
$c                                                          $_____imageT
$c                                                          $_____imageT.%04d
$c                                                          FAUX
$c                                                          %f
$c                                                          $_____Anisotrope
$c                                                          $_____Angle
$c                                                          $_____Isotrope\n"
$c                                            ,n
$c                                            ,Dilat
$c                                             );
$c                                      /* Transformation inverse de la fonction F par l'ondelette W :                               */
$c                                      /*                                                                                           */
$c                                      /*                                                                                           */
$c                                      /*                                /      /                                                   */
$c                                      /*                               |      |                                                    */
$c                                      /*                          1    | 1    |            t-T                                     */
$c                                      /*                  F(t) = ----  |----  | TD(T,S).W(-----).dt.dS                             */
$c                                      /*                           2   |  2   |             S                                      */
$c                                      /*                          C    | S    |                                                    */
$c                                      /*                           W  /      /                                                     */
$c                                      /*                                                                                           */
$c                                      /*                                                                                           */
$c                                      /*                                \_________________________/                                */
$c                                      /*                                                                                           */
$c                                      /*                         calcul de '$xci/morlet.12$Z' directe=FAUX                         */
$c                                      /*                                                                                           */
$c                                      /*                                                                                           */
$c                                      /* illustre dans un cas mono-dimensionnel. Dans l'operation realisee ci-dessus par           */
$c                                      /* '$xci/morlet.12$Z', on ne calcule que la partie situee a l'interieur de la premiere       */
$c                                      /* integrale (en 'dS').                                                                      */
$c                                      /*                                                                                           */
$c                                      /* On notera la constante 'CW' figurant en  denominateur devant les deux integrales ;        */
$c                                      /* celle-ci depend de l'ondelette utilisee (ici l'ondelette de Morlet) et sa valeur est      */
$c                                      /* calculee a l'aide de la transformee de Fourier 'TF(...)' de cette meme ondelette          */
$c                                      /* ('W(...)') :                                                                              */
$c                                      /*                                                                                           */
$c                                      /*                                                                                           */
$c                                      /*                               / +infini                                                   */
$c                                      /*                              |                   1                                        */
$c                                      /*                              |            2     ---                                       */
$c                                      /*                              |  |TF(W(x))|       2                                        */
$c                                      /*                  C  = [2.pi  | -------------.dx]                                          */
$c                                      /*                   W          |      |x|                                                   */
$c                                      /*                              |                                                            */
$c                                      /*                              |                                                            */
$c                                      /*                             /   -infini                                                   */
$c                                      /*                                                                                           */
$c                                      /*                                                                                           */
$c                                      /* et j'ignore combien elle vaut...                                                          */
$c
$c                                      }
$c
$c                            for       (n=N0 ; n<=N ; n++)
$c                                      {
$c                                      printf("$xci/Fermat$X
$c                                                          A=$_____imageT.%04d$_____Postfixe
$c                                                          standard=FAUX
$c                                                          sPUIX=VRAI
$c                                                          cx=0
$c                                                          cy=0
$c                                                          cn=1 en=$_____Fermat
$c                                                          R=$_____imageT.%04d
$c                                                          $formatI\n"
$c                                            ,n
$c                                            ,n
$c                                             );
$c                                      /* Modification de la dynamique de chacune des transformees.                                 */
$c                                      }
$c
$c                            for       (n=N0 ; n<=N ; n++)
$c                                      {
$c                                      printf("$xci/extrema$X
$c                                                          A=$_____imageT.%04d
$c                                                          standard=FAUX
$c                                                          minimum=VRAI
$c                                                          maximum=FAUX
$c                                                          $formatI
$c                                                          >>&! $xTV/MINIMUM\n"
$c                                            ,n
$c                                             );
#20150224100848____:$c                                      printf("saut                                                              #
#20150224100848____:$c                                                          >>&! $xTV/MINIMUM\n"                                  #
#20150224100848____:$c                                             );                                                                 #
$c                                      printf("$xci/extrema$X
$c                                                          A=$_____imageT.%04d
$c                                                          standard=FAUX
$c                                                          minimum=FAUX
$c                                                          maximum=VRAI
$c                                                          $formatI
$c                                                          >>&! $xTV/MAXIMUM\n"
$c                                            ,n
$c                                             );
#20150224100848____:$c                                      printf("saut                                                              #
#20150224100848____:$c                                                          >>&! $xTV/MAXIMUM\n"                                  #
#20150224100848____:$c                                             );                                                                 #
$c                                      /* Extraction des extrema de chacune des transformees "modifiees"...                         */
$c                                      }
$c
$c             printf("set         MinC=`$xrv/extrema.01$X ne=0 fichier=$xTV/MINIMUM | $GRE '^minimum=' | $SE -e 's/^.*=//'`\n");
$c             printf("set         MaxC=`$xrv/extrema.01$X ne=0 fichier=$xTV/MAXIMUM | $GRE '^maximum=' | $SE -e 's/^.*=//'`\n");
$c                                      /* Extraction des extrema de l'ensemble des transformees.                                    */
$c
$c                            for       (n=N0 ; n<=N ; n++)
$c                                      {
$c                                      printf("$xci/acces$X
$c                                                          A=$_____imageT.%04d
$c                                                          standard=FAUX
$c                                                          zero=VRAI
$c                                                          extrema=FAUX
$c                                                          minimum=$MinC
$c                                                          maximum=$MaxC
$c                                                          tronquer=FAUX
$c                                                          R=$_____imagesR.%04d
$c                                                          $formatI\n"
$c                                            ,n
$c                                            ,n
$c                                             );
$c                                      /* Et enfin conversion "standard" avec renormalisation globale...                            */
$c                                      }
$c                            }

$Z        $DELETE   $xTV/MINIMUM
$Z        $DELETE   $xTV/MAXIMUM



Copyright © Jean-François Colonna, 2019-2021.
Copyright © CMAP (Centre de Mathématiques APpliquées) UMR CNRS 7641 / Ecole Polytechnique, 2019-2021.