####################################################################################################################################### # # # 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 : # # # # # # * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * # # * * * ** * * * * * ** * # # * * * * * * * * * * * * * * * # # * * * * * * * * * * * * * # # * * * * * * * * * * * * * * * # # * * * * * * * * * * * * * * * # # * * * * * * * * * * * * * * * * * # # * * * * * * * * * * * * * # # * * * * * * * * * * * * * * * # # * * * * ** * * * * * ** # # * * * * * * * * * * * * * * * * * * * * * * # # # # # # ATTENTION : # # # # L'echantillonnage de l'axe des # # dilatations 'S' est fait lineairement, # # alors que c'est celui des '1/S' qui # # devrait l'etre. Ce module a donc ete # # reecrit selon 'v $xivP_d06_f2/.MORL.2.22.$U' # # en consequences... # # # # # # Author of '$xivP/disk.000000006/face.2/.MORL.2.21.$U' : # # # # Jean-Francois Colonna (LACTAMME, 20030430210551). # # # ####################################################################################################################################### $Z SETParam Premiere 1 $Z SETParam Derniere 128 $Z SETParam _____Dilat0 0.01 $Z SETParam _____DilatN 1.00 $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 _____Postfixe $PR $Z # Postfixe de la composante a conserver (introduit le 20030505122704)... # $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 for (n=N0 ; n<=N ; n++) $c { $c double Dilat=((DilatN*(n-N0))+(Dilat0*(N-n)))/(N-N0); $c $c printf("$xci/morlet.12$Z $c $xTV/CHAMP $c $xTV/MORLET $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 $xTV/MORLET $c $xTV/MORLET.%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 /* / */ $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/extrema$X $c A=$xTV/MORLET.%04d$_____Postfixe $c standard=FAUX $c minimum=VRAI $c maximum=FAUX $c $formatI $c >>&! $xTV/MINIMUM\n" $c ,n $c ); #20150224100648____:$c printf("saut # #20150224100648____:$c >>&! $xTV/MINIMUM\n" # #20150224100648____:$c ); # $c printf("$xci/extrema$X $c A=$xTV/MORLET.%04d$_____Postfixe $c standard=FAUX $c minimum=FAUX $c maximum=VRAI $c $formatI $c >>&! $xTV/MAXIMUM\n" $c ,n $c ); #20150224100648____:$c printf("saut # #20150224100648____:$c >>&! $xTV/MAXIMUM\n" # #20150224100648____:$c ); # $c /* Extraction des extrema de chacune des transformees. */ $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=$xTV/MORLET.%04d$_____Postfixe $c standard=FAUX $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