#!/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... #