/*************************************************************************************************************************************/
/* */
/* G E N E R A T I O N D ' U N C H A M P F A I T D E T R O I S G A U S S I E N N E S : */
/* */
/* */
/* Author of '$xrq/triplet.30$K' : */
/* */
/* Jean-Francois COLONNA (LACTAMME, 1989??????????). */
/* */
/*************************************************************************************************************************************/
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* I N T E R F A C E ' listG ' : */
/* */
/* */
/* :Debut_listG: */
/* :Fin_listG: */
/* */
/*************************************************************************************************************************************/
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* D I R E C T I V E S S P E C I F I Q U E S D E C O M P I L A T I O N : */
/* */
/*************************************************************************************************************************************/
@define PRAGMA_CPP_____MODULE_NON_DERIVABLE
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* F I C H I E R S D ' I N C L U D E S : */
/* */
/*************************************************************************************************************************************/
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* F I C H I E R S D ' I N C L U D E S : */
/* */
/*************************************************************************************************************************************/
#include INCLUDES_BASE
#include image_image_QUAD_IMAGE_EXT
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* P A R A M E T R E S : */
/* */
/*************************************************************************************************************************************/
#define GAUSS_Z \
FZERO \
/* Coordonnee 'Z'. On notera que l'on ne definit rien d'autre en ce qui concerne 'Z' ; ce */ \
/* sont les valeurs implicites de 'Fgaussien(...)' ('v $xiii/mono_image$FON Fgaussien') qui */ \
/* vont etre utilisees ci-apres... */
#define ECHELLE_DE_TRANSLATION \
MOIT(0.72) \
/* Facteur general de'echelle... */
#define AMPLIFICATEUR_DE_LA_FONCTION_R \
GRO3(FRA3(FU)) \
/* Amplificateur de la fonction pour le champ 'ROUGE', */
#define TRANSLATEUR_DE_LA_FONCTION_R \
FZERO \
/* Translateur de la fonction pour le champ 'ROUGE'. */
#define X_TRANSLATION_R \
ADD2(FDU,MUL2(ECHELLE_DE_TRANSLATION,COSX(GRO1(FRA3(PI))))) \
/* Translation horizontale du champ 'ROUGE', */
#define Y_TRANSLATION_R \
ADD2(FDU,MUL2(ECHELLE_DE_TRANSLATION,SINX(GRO1(FRA3(PI))))) \
/* Translation verticale du champ 'ROUGE', */
#define GAUSS_R \
PARE(32.0) \
/* Efficacite du gaussien du champ 'ROUGE', */
#define GAUSS_X2_R \
FU \
/* Ponderation de XxX du champ 'ROUGE', */
#define GAUSS_Y2_R \
FU \
/* Ponderation de YxY du champ 'ROUGE', */
#define GAUSS_XY_R \
FZERO \
/* Ponderation de XxY du champ 'ROUGE'. */
#define AMPLIFICATEUR_DE_LA_FONCTION_V \
GRO2(FRA3(FU)) \
/* Amplificateur de la fonction pour le champ 'VERTE', */
#define TRANSLATEUR_DE_LA_FONCTION_V \
FZERO \
/* Translateur de la fonction pour le champ 'VERTE'. */
#define X_TRANSLATION_V \
ADD2(FDU,MUL2(ECHELLE_DE_TRANSLATION,COSX(GRO3(FRA3(PI))))) \
/* Translation horizontale du champ 'VERTE', */
#define Y_TRANSLATION_V \
ADD2(FDU,MUL2(ECHELLE_DE_TRANSLATION,SINX(GRO3(FRA3(PI))))) \
/* Translation verticale du champ 'VERTE', */
#define GAUSS_V \
PARE(32.0) \
/* Efficacite du gaussien du champ 'VERTE', */
#define GAUSS_X2_V \
FU \
/* Ponderation de XxX du champ 'VERTE', */
#define GAUSS_Y2_V \
FU \
/* Ponderation de YxY du champ 'VERTE', */
#define GAUSS_XY_V \
FZERO \
/* Ponderation de XxY du champ 'VERTE'. */
#define AMPLIFICATEUR_DE_LA_FONCTION_B \
GRO1(FRA3(FU)) \
/* Amplificateur de la fonction pour le champ 'BLEUE', */
#define TRANSLATEUR_DE_LA_FONCTION_B \
FZERO \
/* Translateur de la fonction pour le champ 'BLEUE'. */
#define X_TRANSLATION_B \
ADD2(FDU,MUL2(ECHELLE_DE_TRANSLATION,COSX(GRO5(FRA3(PI))))) \
/* Translation horizontale du champ 'BLEUE', */
#define Y_TRANSLATION_B \
ADD2(FDU,MUL2(ECHELLE_DE_TRANSLATION,SINX(GRO5(FRA3(PI))))) \
/* Translation verticale du champ 'BLEUE', */
#define GAUSS_B \
PARE(32.0) \
/* Efficacite du gaussien du champ 'BLEUE', */
#define GAUSS_X2_B \
FU \
/* Ponderation de XxX du champ 'BLEUE', */
#define GAUSS_Y2_B \
FU \
/* Ponderation de YxY du champ 'BLEUE', */
#define GAUSS_XY_B \
FZERO \
/* Ponderation de XxY du champ 'BLEUE'. */
#define X_ECHELLE \
FU \
/* Echelle horizontale du champ, */
#define Y_ECHELLE \
FU \
/* Echelle verticale du champ. */
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* M A C R O S U T I L E S : */
/* */
/*************************************************************************************************************************************/
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* G E N E R A T I O N D ' U N C H A M P F A I T D E T R O I S G A U S S I E N N E S : */
/* */
/*************************************************************************************************************************************/
BCommande(nombre_d_arguments,arguments)
/*-----------------------------------------------------------------------------------------------------------------------------------*/
Bblock
DEFV(CHAR,INIC(POINTERc(nom_imageR),NOM_PIPE));
DEFV(Float,INIT(amplificateur_de_la_fonction_R,AMPLIFICATEUR_DE_LA_FONCTION_R));
DEFV(Float,INIT(translateur_de_la_fonction_R,TRANSLATEUR_DE_LA_FONCTION_R));
DEFV(Float,INIT(Fgaussien_____coefficient_R,GAUSS_R));
DEFV(Float,INIT(Fgaussien_____coefficient_X2_R,GAUSS_X2_R));
DEFV(Float,INIT(Fgaussien_____coefficient_Y2_R,GAUSS_Y2_R));
DEFV(Float,INIT(Fgaussien_____coefficient_XY_R,GAUSS_XY_R));
DEFV(deltaF_2D,translation_R);
/* Definition du champ 'ROUGE'. */
DEFV(Float,INIT(amplificateur_de_la_fonction_V,AMPLIFICATEUR_DE_LA_FONCTION_V));
DEFV(Float,INIT(translateur_de_la_fonction_V,TRANSLATEUR_DE_LA_FONCTION_V));
DEFV(Float,INIT(Fgaussien_____coefficient_V,GAUSS_V));
DEFV(Float,INIT(Fgaussien_____coefficient_X2_V,GAUSS_X2_V));
DEFV(Float,INIT(Fgaussien_____coefficient_Y2_V,GAUSS_Y2_V));
DEFV(Float,INIT(Fgaussien_____coefficient_XY_V,GAUSS_XY_V));
DEFV(deltaF_2D,translation_V);
/* Definition du champ 'VERTE'. */
DEFV(Float,INIT(amplificateur_de_la_fonction_B,AMPLIFICATEUR_DE_LA_FONCTION_B));
DEFV(Float,INIT(translateur_de_la_fonction_B,TRANSLATEUR_DE_LA_FONCTION_B));
DEFV(Float,INIT(Fgaussien_____coefficient_B,GAUSS_B));
DEFV(Float,INIT(Fgaussien_____coefficient_X2_B,GAUSS_X2_B));
DEFV(Float,INIT(Fgaussien_____coefficient_Y2_B,GAUSS_Y2_B));
DEFV(Float,INIT(Fgaussien_____coefficient_XY_B,GAUSS_XY_B));
DEFV(deltaF_2D,translation_B);
/* Definition du champ 'BLEUE'. */
DEFV(coeffF_2D,echelle);
/* Echelle du champ a generer. */
/*..............................................................................................................................*/
INITIALISATION_ACCROISSEMENT_2D(translation_R,X_TRANSLATION_R,Y_TRANSLATION_R);
/* Initialisation de la translation du champ 'ROUGE'. */
INITIALISATION_ACCROISSEMENT_2D(translation_V,X_TRANSLATION_V,Y_TRANSLATION_V);
/* Initialisation de la translation du champ 'VERTE'. */
INITIALISATION_ACCROISSEMENT_2D(translation_B,X_TRANSLATION_B,Y_TRANSLATION_B);
/* Initialisation de la translation du champ 'BLEUE'. */
INITIALISATION_COEFFICIENT_2D(echelle,X_ECHELLE,Y_ECHELLE);
/* Initialisation de l'echelle du champ a generer. */
GET_ARGUMENTSi(nombre_d_arguments
,BLOC(GET_ARGUMENT_C("imageR=""R=",nom_imageR);
GET_ARGUMENT_F("amplificateurR=""aR=",amplificateur_de_la_fonction_R);
GET_ARGUMENT_F("translateurR=""tR=""TR=",translateur_de_la_fonction_R);
GET_ARGUMENT_F("amplificateurV=""aV=",amplificateur_de_la_fonction_V);
GET_ARGUMENT_F("translateurV=""tV=""TV=",translateur_de_la_fonction_V);
GET_ARGUMENT_F("amplificateurB=""aB=",amplificateur_de_la_fonction_B);
GET_ARGUMENT_F("translateurB=""tB=""TB=",translateur_de_la_fonction_B);
GET_ARGUMENT_F("TxR=",ASD1(translation_R,dx));
GET_ARGUMENT_F("TyR=",ASD1(translation_R,dy));
GET_ARGUMENT_F("cR=",Fgaussien_____coefficient_R);
GET_ARGUMENT_F("cx2R=",Fgaussien_____coefficient_X2_R);
GET_ARGUMENT_F("cy2R=",Fgaussien_____coefficient_Y2_R);
GET_ARGUMENT_F("cxyR=",Fgaussien_____coefficient_XY_R);
GET_ARGUMENT_F("TxV=",ASD1(translation_V,dx));
GET_ARGUMENT_F("TyV=",ASD1(translation_V,dy));
GET_ARGUMENT_F("cV=",Fgaussien_____coefficient_V);
GET_ARGUMENT_F("cx2V=",Fgaussien_____coefficient_X2_V);
GET_ARGUMENT_F("cy2V=",Fgaussien_____coefficient_Y2_V);
GET_ARGUMENT_F("cxyV=",Fgaussien_____coefficient_XY_V);
GET_ARGUMENT_F("TxB=",ASD1(translation_B,dx));
GET_ARGUMENT_F("TyB=",ASD1(translation_B,dy));
GET_ARGUMENT_F("cB=",Fgaussien_____coefficient_B);
GET_ARGUMENT_F("cx2B=",Fgaussien_____coefficient_X2_B);
GET_ARGUMENT_F("cy2B=",Fgaussien_____coefficient_Y2_B);
GET_ARGUMENT_F("cxyB=",Fgaussien_____coefficient_XY_B);
GET_ARGUMENT_F("Ex=",ASD1(echelle,cx));
GET_ARGUMENT_F("Ey=",ASD1(echelle,cy));
)
);
CALi(Inoir(ImageA1));
CALi(Inoir(ImageA2));
CALi(Inoir(ImageA3));
CALi(Inoir(ImageR));
/* Initialisation des images Resultat avant le changement eventuel de (pasX,pasY). */
EGAL(Fgaussien_____coefficient,Fgaussien_____coefficient_R);
EGAL(Fgaussien_____coefficient_X2,Fgaussien_____coefficient_X2_R);
EGAL(Fgaussien_____coefficient_Y2,Fgaussien_____coefficient_Y2_R);
EGAL(Fgaussien_____coefficient_XY,Fgaussien_____coefficient_XY_R);
/* Definition du champ gaussien 'ROUGE'. */
CALS(Igenere_champ(ImageA1
,amplificateur_de_la_fonction_R,aFONCTION(Fgaussien),translateur_de_la_fonction_R
,ADRESSE(translation_R)
,ADRESSE(echelle)
,GAUSS_Z
,Tf_ARGUMENT_INUTILE
)
);
/* Et generation du champ gaussien 'ROUGE'. */
EGAL(Fgaussien_____coefficient,Fgaussien_____coefficient_V);
EGAL(Fgaussien_____coefficient_X2,Fgaussien_____coefficient_X2_V);
EGAL(Fgaussien_____coefficient_Y2,Fgaussien_____coefficient_Y2_V);
EGAL(Fgaussien_____coefficient_XY,Fgaussien_____coefficient_XY_V);
/* Definition du champ gaussien 'VERTE'. */
CALS(Igenere_champ(ImageA2
,amplificateur_de_la_fonction_V,aFONCTION(Fgaussien),translateur_de_la_fonction_V
,ADRESSE(translation_V)
,ADRESSE(echelle)
,GAUSS_Z
,Tf_ARGUMENT_INUTILE
)
);
/* Et generation du champ gaussien 'VERTE'. */
EGAL(Fgaussien_____coefficient,Fgaussien_____coefficient_B);
EGAL(Fgaussien_____coefficient_X2,Fgaussien_____coefficient_X2_B);
EGAL(Fgaussien_____coefficient_Y2,Fgaussien_____coefficient_Y2_B);
EGAL(Fgaussien_____coefficient_XY,Fgaussien_____coefficient_XY_B);
/* Definition du champ gaussien 'BLEUE'. */
CALS(Igenere_champ(ImageA3
,amplificateur_de_la_fonction_B,aFONCTION(Fgaussien),translateur_de_la_fonction_B
,ADRESSE(translation_B)
,ADRESSE(echelle)
,GAUSS_Z
,Tf_ARGUMENT_INUTILE
)
);
/* Et generation du champ gaussien 'BLEUE'. */
CALS(Iaddition3_avec_renormalisation(ImageR,ImageA1,ImageA2,ImageA3));
/* Et enfin, generation du champ fait de trois gaussiennes... */
CALi(Iupdate_image(nom_imageR,ImageR));
RETU_Commande;
Eblock
ECommande