/*************************************************************************************************************************************/
/* */
/* F I L T R A G E D ' U N E I M A G E P A R T R A N S F O R M E E D E F O U R I E R C O M P L E X E : */
/* */
/* */
/* Author of '$xci/filtre.05$I' : */
/* */
/* Jean-Francois Colonna (LACTAMME, 1994??????????). */
/* */
/*************************************************************************************************************************************/
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* C O N V E R S I O N D U R E S U L T A T E N I M A G E " S T A N D A R D " S I N E C E S S A I R E : */
/* */
/*************************************************************************************************************************************/
Bblock
CALS(Icomplexe_reelle(IFmage_PR,IJmageR));
CALS(IFnivo_extrema(IFmage_PR
,ADRESSE(minimum_reel_de_la_transformee)
,ADRESSE(maximum_reel_de_la_transformee)
)
);
/* Recherche du minimum et du maximum de la partie reelle de la */
/* transformee de Fourier inverse. */
CALS(Icomplexe_imaginaire(IFmage_PI,IJmageR));
CALS(IFnivo_extrema(IFmage_PI
,ADRESSE(minimum_imaginaire_de_la_transformee)
,ADRESSE(maximum_imaginaire_de_la_transformee)
)
);
/* Recherche du minimum et du maximum de la partie imaginaire de la */
/* transformee de Fourier inverse. */
Test(IFGE(SOUS(maximum_imaginaire_de_la_transformee,minimum_imaginaire_de_la_transformee)
,SOUS(maximum_reel_de_la_transformee,minimum_reel_de_la_transformee)
)
)
Bblock
PRINT_ERREUR("la partie imaginaire est trop importante");
CAL1(Prer1("amplitude reelle = %.^^^\n"
,SOUS(maximum_reel_de_la_transformee,minimum_reel_de_la_transformee)
)
);
/* Le 20060105155016, le format "16g" est passe a "^^g" pour plus de souplesse... */
/* */
/* Le 20091123123234, le format "^^g" est passe a "^^^" pour plus de souplesse... */
CAL1(Prer1("amplitude imaginaire = %.^^^\n"
,SOUS(maximum_imaginaire_de_la_transformee,minimum_imaginaire_de_la_transformee)
)
);
/* Le 20060105155016, le format "16g" est passe a "^^g" pour plus de souplesse... */
/* */
/* Le 20091123123234, le format "^^g" est passe a "^^^" pour plus de souplesse... */
Eblock
ATes
Bblock
Eblock
ETes
Test(EST_VRAI(les_imagesR_sont_standards))
/* 'les_images_sont_standards' fut remplace par 'les_imagesR_sont_standards' le */
/* 20060307135956 a cause de 'v $xci/filtre.01$K les_images._sont_standards'... */
Bblock
/* Cas ou la conversion en une image "standard" est demandee... */
Test(IFET(IL_NE_FAUT_PAS(renormaliser_l_image)
,IL_FAUT(tronquer_les_niveaux)
)
)
Bblock
CALS(Ifloat_std_avec_troncation(ImageR
,IFmage_PR
,FLOT__NOIR
,FLOT__BLANC
)
);
/* Les niveaux minimal et maximal sont eventuellement tronques dans [NOIR,BLANC]. */
Eblock
ATes
Bblock
Test(IFOU(IL_FAUT(renormaliser_l_image)
,IFOU(IFLT(minimum_reel_de_la_transformee,FLOT__NOIR)
,IFGT(maximum_reel_de_la_transformee,FLOT__BLANC)
)
)
)
/* Nota : on n'oubliera pas que par definition 'minimum <= maximum'... */
Bblock
CALS(Ifloat_std(ImageR
,IFmage_PR
,minimum_reel_de_la_transformee
,maximum_reel_de_la_transformee
)
);
/* Lorsque les niveaux minimal et maximal sont hors de [NOIR,BLANC], */
/* ou bien si la renormalisation explicite est demandee, on renormalise... */
Eblock
ATes
Bblock
CALS(Ifloat_std(ImageR
,IFmage_PR
,FLOT__NOIR
,FLOT__BLANC
)
);
/* Les niveaux minimal et maximal sont dans [NOIR,BLANC] et on */
/* ne renormalise pas... */
Eblock
ETes
Eblock
ETes
Eblock
ATes
Bblock
/* Cas ou l'on doit rester sous la forme flottante... */
Eblock
ETes
Eblock