#!/bin/csh ####################################################################################################################################### # # # T R A N S F O R M E E E N O N D E L E T T E S D ' U N E I M A G E " C H A M P " # # D A N S S O N D I R E C T O R Y : # # # # # # Utilisation : # # # # $xci/ondes.03$Z <sous_nom_de_l_ondelette> <palette> [Ty=<Ty_montagnes.Mp>] [Ty=<Ty_montagnes.Mn>] # # # # ou la syntaxe de 'sous_nom_de_l_ondelette' est donne dans le nota de $xiio, # # et 'palette' est du type "$xiP/nom", et en general : Ty(Mn) = Ty(Mp) + 0.5, # # le '0.5' correspondant a 'COULEURS/dimY' qui est une translation permettant de # # mettre les montagnes negatives au meme niveau que les montagnes positives # # (par exemple, pour '$xiio/FRAC2.090.N', on prendra : 'Ty=0.5 Ty=1.0'). # # # # # # Principe : # # # # La transformee en ondelettes de la # # fonction 'f' s'obtient en fait en faisant # # le produit de convolution '*' de 'f' par # # l'ondelette 'M', soit : # # # # f*M # # # # or, 'TF' designant la transformee de # # Fourier, on sait que : # # # # TF(f1*f2) = TF(f1).TF(f2) # # # # ou '.' designe le produit terme a terme # # de deux matrices complexes. # # # # En prenant la transformee de Fourier # # inverse de l'identite precedente, on a : # # # # -1 -1 # # TF (TF(f1*f2)) = TF (TF(f1).TF(f2)) # # # # soit : # # # # -1 # # f1*f2 = TF (TF(f1).TF(f2)) # # # # Appliquee a la transformee en ondelettes, # # on a donc : # # # # -1 # # f*M = TF (TF(f).TF(M)) # # # # Pour calculer la transformee en ondelettes # # de 'f' par 'M', on calcule donc la transformee # # de Fourier de la fonction 'f', soit TF(f), # # on precalcule (c'est-a-dire qu'en general elle # # est calculee une fois pour toute) la transformee # # de Fourier TF(M) de l'ondelette 'M' (notons # # qu'au passage, c'est en fait 'M(a,b)', puisque # # l'ondelette depend de deux parametres) ; on # # fait ensuite leur produit terme a terme, # # soit 'TF(f).TF(M)', puis enfin, on calcule # # la transformee de Fourier inverse de ce # # produit, ce qui donne la transformee cherchee... # # # # # # Note sur la periodicite : # # # # La transformee de Fourier demande a ce # # que le champ soit periodique dans les deux # # directions ; si ce n'est pas le cas, une # # solution simple consiste a le symetriser # # doublement par '$xci/kaleidoscope$X', et # # a faire, sur la mosaique doublement symetrique # # obtenue, la transformee en ondelettes, mais avec # # une resolution deux fois moindre suivant chaque # # direction. Alors on n'oubliera pas que l'echelle # # de l'ondelette doit changer elle aussi (reduction # # de moitie : passage de '120615' a '060615' par # # exemple). # # # # # # Author of '$xci/ondes.03$Z' : # # # # Jean-Francois Colonna (LACTAMME, AAAAMMJJhhmmss). # # # ####################################################################################################################################### set ondelette=$1 set palette=$2 set Atranslation_Mp=$3 # Translation verticale des montagnes positives '$Mp'. # set Atranslation_Mn=$4 # Translation verticale des montagnes negatives '$Mn'. # set CHAMPa=$CWD/$CHAMP # Nom de l'image dont on veut la transformee en ondelettes dans le directory courant. # set MORLr=$MORLET$K_sepP # Racine relative du nom des images contenant un champ de Morlet. # set MORLa=$xiio/$MORLr # Racine absolue du nom des images contenant un champ de Morlet. # set BINARISATION=224 # Seuil de binarisation (en general 32 pour avoir la phase suivant des lignes # # NOIR ou 224 pour l'avoir en BLANC). # set Tdirec=$CWD/$MORLr$ondelette$D # Nom du directory ou mettre la transformee. # $MKDIR $Tdirec >& $nul # Creation du directory ou mettre la transformee. # set Pdirec=$Tdirec/$PRODUIT$Mo$Ph$D # Nom du directory ou construire les representations de la transformee en ondelettes. # if (-e $Pdirec/$CHAMP) then else ####################################################################################################################################### # # # D E B U T D U " C O E U R " D U P R O C E S S U S : # # # ####################################################################################################################################### if (-e $CHAMPa$TF) then else $xci/fftds$Z $CHAMPa $NOIR $CHAMPa FAUX $NEXIST # Lorsque le champ n'a pas encore de Transformee de Fourier, on lui calcule. # endif if (-e $MORLa$ondelette$TF) then $xci/fftp$Z $CHAMPa $MORLa$ondelette $Tdirec/ # Calcul du produit de la transformee de Fourier du champ et de celle de l'ondelette. # else FileTmpB nomTF $xci/fftds$Z $MORLa$ondelette$PR $MORLa$ondelette$PI $nomTF FAUX $NEXIST # Calcul de la transformee de Fourier de l'ondelette qui ne pre-existait pas... # $xci/fftp$Z $CHAMPa $nomTF $Tdirec/ # Calcul du produit de la transformee de Fourier du champ et de celle de l'ondelette. # FileTmpE nomTF endif $xci/ffti$Z $Tdirec/ >& $nul # Calcul de la transformee de Fourier inverse, ce qui donne la transformee en ondelettes. # ####################################################################################################################################### # # # F I N D U " C O E U R " D U P R O C E S S U S : # # # ####################################################################################################################################### $DELETE_VALIDE $Tdirec/$TF # Destruction de la transformee de Fourier. # $DELETE_VALIDE $Tdirec/$J # Destruction de la transformee en ondelettes complexe (on ne garde que les images # # standards correspondant a la partie Reelle, a la partie Imaginaire, au Module et # # a la Phase). # $MKDIR $Pdirec >& $nul # Creation du directory ou construire les representations de la transformee en ondelettes. # $xci/passe_bande$X A=$Tdirec/$Mo R=$Pdirec/$Mo $formatI # Suppression du NOIR dans le Module, puis du BLANC afin que la Phase apparaisse clairement. # $xci/seuil$X A=$Tdirec/$Ph R=$Pdirec/$Ph seuil=$BINARISATION $formatI # Binarisation de la Phase [NOIR,seuil-1],[seuil,BLANC]. # if ($BINARISATION <= $GRIS) then $xci/minimum$X A1=$Pdirec/$Mo A2=$Pdirec/$Ph R=$Pdirec/$CHAMP $formatI # "Produit" entre le Module et la Phase qui va apparaitre en lignes NOIR. # else $xci/maximum$X A1=$Pdirec/$Mo A2=$Pdirec/$Ph R=$Pdirec/$CHAMP $formatI # "Produit" entre le Module et la Phase qui va apparaitre en lignes BLANC. # endif $xci/passe_bande$X A=$Pdirec/$CHAMP R=$Pdirec/$CHAMP sup=$BLANC $formatI # On elimine le NOIR afin de faciliter les mappings 3D. # $DELETE_VALIDE $Pdirec/$Mo # Nettoyage. # $DELETE_VALIDE $Pdirec/$Ph # Nettoyage. # endif $xci/vraies_C$X A=$Pdirec/$CHAMP p=$palette RR=$Pdirec/$CHAMP$ROUGE RV=$Pdirec/$CHAMP$VERTE RB=$Pdirec/$CHAMP$BLEUE $formatI # Recuperation des trois composantes 'RVB' de la texture. # set NP=$K_VIDE # Pour caracteriser la palette avec laquelle vont etre faits les mappings. # set depth='depth=FAUX' # Pour ne pas avoir de depth-cueing. # set depth='depth=VRAI min=0.50' # Pour avoir du depth-cueing. # set avion='avion=FAUX alias=VRAI' # Pour faire une vue de cote. # set translation="Ty=0.60 $Atranslation_Mp" # Pour translater verticalement l'image. # set echelle='echelle=1.0' # Pour construire les montagnes "positives". # $xci/stereo_pair$Z $CHAMPa $CHAMPa # Generation de la paire stereoscopique du champ. # $xci/repeat.02$Z "$ROUGE $VERTE $BLEUE" \ "$xci/stereo_pair$Z $Pdirec/$CHAMP"'$n'" $Pdirec/$CHAMP"'$n'"" # Generation des paires stereoscopiques du couple (module,phase). # set arguments="$echelle $depth $avion $translation" # Afin de raccourcir les qautre lignes "$xci/montagne.01$X ..." qui suivent... # $xci/repeat.02$Z "$ROUGE $VERTE $BLEUE" \ "$xci/montagne.01$X A=$CHAMPa$DROITE $arguments T=$Pdirec/$CHAMP"'$n'"$DROITE R=$Pdirec/$Mp$NP$DROITE"'$n'" $formatI" # Mise en montagne "positive" vue 'DROITE' ($Pdirec/$CHAMP$Mp$NP$DROITE$RVB) # # du champ argument avec une translation eventuellement imposee. # # ATTENTION : on ne peut mettre le deuxieme argument de '$xci/repeat.02$Z' sur deux lignes # # car en effet, alors sa valeur en serait affectee... # $xci/repeat.02$Z "$ROUGE $VERTE $BLEUE" \ "$xci/montagne.01$X A=$CHAMPa$GAUCHE $arguments T=$Pdirec/$CHAMP"'$n'"$GAUCHE R=$Pdirec/$Mp$NP$GAUCHE"'$n'" $formatI" # Mise en montagne "positive" vue 'GAUCHE' ($Pdirec/$CHAMP$Mp$NP$DROITE$RVB) # # du champ argument avec une translation eventuellement imposee. # # ATTENTION : on ne peut mettre le deuxieme argument de '$xci/repeat.02$Z' sur deux lignes # # car en effet, alors sa valeur en serait affectee... # $xci/repeat.02$Z "$ROUGE $VERTE $BLEUE" \ "$DELETE_VALIDE $Pdirec/$CHAMP"'$n'"$DROITE" $xci/repeat.02$Z "$ROUGE $VERTE $BLEUE" \ "$DELETE_VALIDE $Pdirec/$CHAMP"'$n'"$GAUCHE" # Nettoyage. # $xci/repeat.02$Z "$DROITE $GAUCHE" \ "$DELETE_VALIDE $CHAMPa"'$n'"" # Nettoyage. # $xci/repeat.02$Z "$ROUGE $VERTE $BLEUE" \ "$xci/montagne.01$X A=$CHAMPa $arguments T=$Pdirec/$CHAMP"'$n'" R=$Pdirec/$Mp$NP"'$n'" $formatI" # Mise en montagne "positive" ($Pdirec/$CHAMP$Mp$NP$RVB) du champ argument # # avec une translation eventuellement imposee. # set translation="Ty=1.10 $Atranslation_Mn" # Pour translater verticalement l'image. # set echelle='echelle=-1.0' # Pour construire les montagnes "negatives". # $xci/repeat.02$Z "$ROUGE $VERTE $BLEUE" \ "$xci/montagne.01$X A=$CHAMPa $arguments T=$Pdirec/$CHAMP"'$n'" R=$Pdirec/$Mn$NP"'$n'" $formatI" # Mise en montagne "negative" ($Pdirec/$CHAMP$Mn$NP$RVB) du champ argument # # avec une translation eventuellement imposee. # set avion='avion=VRAI alias=FAUX depth=FAUX' # Pour faire une vue d'avion. # set echelle='echelle=1.0' # Pour construire les montagnes "positives". # $xci/repeat.02$Z "$ROUGE $VERTE $BLEUE" \ "$xci/montagne.01$X A=$CHAMPa $echelle T=$Pdirec/$CHAMP"'$n'" R=$Pdirec/$mp$NP"'$n'" $avion $formatI" # Mise en montagne "positive" ($Pdirec/$CHAMP$mp$NP$RVB) du champ argument. # set echelle='echelle=-1.0' # Pour construire les montagnes "negatives". # $xci/repeat.02$Z "$ROUGE $VERTE $BLEUE" \ "$xci/montagne.01$X A=$CHAMPa $echelle T=$Pdirec/$CHAMP"'$n'" R=$Pdirec/$mn$NP"'$n'" $avion $formatI" # Mise en montagne "negative" ($Pdirec/$CHAMP$mn$NP$RVB) du champ argument. # $xci/repeat.02$Z "$ROUGE $VERTE $BLEUE" \ "$DELETE_VALIDE $Pdirec/$CHAMP"'$n'"" # Nettoyage. #