#!/bin/csh

#######################################################################################################################################
#                                                                                                                                     #
#         T R A N S F O R M E E   E N   O N D E L E T T E   D E   M O R L E T                                                         #
#         D ' U N E   I M A G E   F L O T T A N T E  :                                                                                #
#                                                                                                                                     #
#                                                                                                                                     #
#         Utilisation :                                                                                                               #
#                                                                                                                                     #
#                   $xci/morlet.12$Z    <nomA> <nomR> [<Directe> [<Dilatation> [<Anisotrope> [<Rotation> [<Isotrope> [<Centrer>]]]]]] #
#                                                                                                                                     #
#                                                                                                                                     #
#         Nota sur '$nomA' :                                                                                                          #
#                                                                                                                                     #
#                     Suivant le sens de la transformee, la                                                                           #
#                   signification de '$nomA' change :                                                                                 #
#                                                                                                                                     #
#                                       $Directe=VRAI     : l'image flottante Argument a pour nom '$nomA',                            #
#                                       $Directe=FAUX     : l'image complexe Argument est donnee sous forme de deux images            #
#                                                           flottantes de noms {$nomA$PR,$nomA$PI}.                                   #
#                                                                                                                                     #
#                                                                                                                                     #
#         Nota sur '$nomR' :                                                                                                          #
#                                                                                                                                     #
#                     Suivant le sens de la transformee, la                                                                           #
#                   signification de '$nomR' change :                                                                                 #
#                                                                                                                                     #
#                                       $Directe=VRAI     : l'image complexe Resultat est donnee sous forme de deux images            #
#                                                           flottantes de noms {$nomR$PR,$nomR$PI}.                                   #
#                                       $Directe=FAUX     : l'image flottante Resultat a pour nom '$nomR$Mo'.                         #
#                                                                                                                                     #
#                   en notant qu'en fait les quatre composantes {$PR,$PI,$Mo,$Ph}                                                     #
#                   existent systematiquement...                                                                                      #
#                                                                                                                                     #
#                                                                                                                                     #
#         Author of '$xci/morlet.12$Z' :                                                                                              #
#                                                                                                                                     #
#                     Jean-Francois Colonna (LACTAMME, 20030430160357).                                                               #
#                                                                                                                                     #
#######################################################################################################################################

set       nomA=$1
set       nomR=$2
set       Directe=$3
set       Dilatation=$4
set       Anisotrope=$5
set       Rotation=$6
set       Isotrope=$7
set       Centrer_DeCentrer=$8

setArgum  Directe                       VRAI

setArgum  Dilatation                    0.1

setArgum  Rotation                      $pis2

setArgum  Anisotrope                    1

setArgum  Isotrope                      0

setArgum  Centrer_DeCentrer             FAUX
                                        # On ne centre pas a priori (pour des raisons de compatibilite anterieure)...                 #

if        ($NEXIST) then
                                        # La 'Trace' a ete inhibe le 20030509211531...                                                #
          if        ("$Directe" == "VRAI") then
                    set       MessageDirect="D:"
          else
                    set       MessageDirect="I:"
          endif

          alias     Trace     'set      MeSsAgE=\!:1 ; set N_ImAgE=\!:2 ; set ImAgE=`eval echo "$N_ImAgE"`                        ;    \\
                               FileTmpB TmP ; set MeSsAgE="$MessageDirect$MeSsAgE"                                                ;    \\
                               $xci/J_RIMP$X      A=$ImAgE standard=FAUX RR=$TmP$PR RI=$TmP$PI module_phase=FAUX $formatI         ;    \\
                     set      ExT_R=`$xci/extrema$X format=f decimales=2 standard=FAUX A=$TmP$PR Prme=VRAI | $SE -e "s/ /,/"`     ;    \\
                     set      ExT_I=`$xci/extrema$X format=f decimales=2 standard=FAUX A=$TmP$PI Prme=VRAI | $SE -e "s/ /,/"`     ;    \\
echo "$MeSsAgE : $N_ImAgE         R=($ExT_R) I=($ExT_I)" | $SE -e "s/^\(.......................................\) *\( R=\)/\1\2/" ;    \\
                               FileTmpE TmP                                                                                       ;    \\
                               unset    MeSsAgE N_ImAgE ImAgE ExT_R ExT_I'
                                        # Introduit le 20030507155801 pour essayer de comprendre le probleme de la forte valeur       #
                                        # absolue des '$PR' obtenues lors de la transformee inverse...                                #
else
          alias     Trace     'set      MeSsAgE=\!:1 ; set ImAgE=\!:2                                                             ;    \\
                               unset    MeSsAgE ImAgE'
endif

if                  ("$Directe" == "VRAI") then
                    $xci/neutre$X                                                                                                       \
                                        A=$nomA                                                                                         \
                                        standard=FAUX                                                                                   \
                                        R=$xT/ARGUMENT$PR                                                                               \
                                                                                                                        $formatI
                    $xci/init$X                                                                                                         \
                                        standard=FAUX                                                                                   \
                                        v=0                                                                                             \
                                        R=$xT/ARGUMENT$PI                                                                               \
                                                                                                                        $formatI
                    $xci/RI_J$X         AR=$xT/ARGUMENT$PR AI=$xT/ARGUMENT$PI                                                           \
                                        standard=FAUX                                                                                   \
                                        R=$xT/ARGUMENT$J                                                                                \
                                                                                                                        $formatI
else
                    $xci/RI_J$X         AR=$nomA$PR AI=$nomA$PI                                                                         \
                                        standard=FAUX                                                                                   \
                                        R=$xT/ARGUMENT$J                                                                                \
                                                                                                                        $formatI
endif

Trace               '$xci/RI_J$X.....' '$xT/ARGUMENT$J'
                                        # Conversion images flottantes {$PR,$PI} --> image complexe ($J).                             #
$xci/fft.01$X       A=$xT/ARGUMENT$J                                                                                                    \
                    centrer=$Centrer_DeCentrer                                                                                          \
                    TF=$xT/ARGUMENT$TF                                                                                                  \
                                                                                                    $formatI
Trace               '$xci/fft.01$X...' '$xT/ARGUMENT$TF'
                                        # Calcul de la transformee de Fourier ($TF) de l'image complexe ($J).                         #

$xci/morlet.12$X                                                                                                                        \
                    dilatation=$Dilatation                                                                                              \
                    lineaire=$Anisotrope rotation=$Rotation                                                                             \
                    radiale=$Isotrope                                                                                                   \
                    directe=$Directe                                                                                                    \
                    R=$xT/ONDELETTE$J                                                                                                   \
                                                                                                                        $formatI
Trace               '$xci/morlet.12$X' '$xT/ONDELETTE$J'
                                        # Generation de l'ondelette de Morlet demandee. Jusqu'au 20030514091143, il y avait comme     #
                                        # arguments de '$xci/morlet.12$X' :                                                           #
                                        #                                                                                             #
                                        #                   seuil_inferieur=0.010 seuil_superieur=1.000                               #
                                        #                                                                                             #
                                        # pour des raisons de test...                                                                 #
$xci/fftd$Z                                                                                                                             \
                    $xT/ONDELETTE                                                                                                       \
                    $Centrer_DeCentrer                                                                                                  \
                    $NEXIST
Trace               '$xci/fftd$Z.....' '$xT/ONDELETTE$TF'
                                        # Calcul de la transformee de Fourier directe de l'ondelette de Morlet.                       #
                                        #                                                                                             #
                                        # On notera que de remplacer l'operation precedente par :                                     #
                                        #                                                                                             #
                                        #                   $xci/init$X         standard=FAUX complexe=VRAI                        \  #
                                        #                                       PR=1 PI=0                                          \  #
                                        #                                       R=$xT/ONDELETTE$TF                                 \  #
                                        #                                                                               $formatI      #
                                        #                                                                                             #
                                        # transforme l'ensemble en une operation neutre au facteur multiplicatif '$FaCtEuR' pres...   #

$xci/fftp$Z                                                                                                                             \
                    $xT/ARGUMENT                                                                                                        \
                    $xT/ONDELETTE                                                                                                       \
                    $xT/PRODUIT
Trace               '$xci/fftp$Z.....' '$xT/PRODUIT$TF'
                                        # Produit de convolution des deux transformees de Fourier directes precedentes.               #
                                        #                                                                                             #
                                        # ATTENTION, on notera l'ordre des deux '$TF' arguments car, en effet, en general le produit  #
                                        # '$xci/fftp$Z' ne commute pas a cause de 'v $xiii/tri_image$FON IJproduit_complexe' et de    #
                                        # son argument 'translation_de_l_imageA2'...                                                  #

if                  ("$Directe" == "VRAI") then
                    set                 FaCtEuR=`calcul 1/sqrt($Dilatation)`
else
                    set                 FaCtEuR=`calcul 1/($Dilatation*$Dilatation)`
endif

$xci/ffti$Z                                                                                                                             \
                    $xT/PRODUIT                                                                                                         \
                    $Centrer_DeCentrer                                                                                                  \
                    $NEXIST                                                                                                             \
                    $FaCtEuR
Trace               '$xci/ffti$Z.....' '$xT/PRODUIT$J'
                                        # Calcul de la transformee de Fourier inverse du produit precedent. On notera le facteur      #
                                        # '$FaCtEuR' introduit le 20030506135745.                                                     #

$xci/J_RIMP$X                                                                                                                           \
                    A=$xT/PRODUIT$J                                                                                                     \
                    standard=FAUX                                                                                                       \
                    RR=$nomR$PR                                                                                                         \
                    RI=$nomR$PI                                                                                                         \
                    module_phase=VRAI                                                                                                   \
                    RM=$nomR$Mo                                                                                                         \
                    RP=$nomR$Ph                                                                                                         \
                                                                                                                        $formatI
                                        # Extraction des parties Reelle et Imaginaire de la transformee en ondelettes.                #

$DELETE   $xT/ONDELETTE*
$DELETE   $xT/ARGUMENT*
$DELETE   $xT/PRODUIT*
                                        # Nettoyage...                                                                                #



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