#######################################################################################################################################
# #
# 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