/*************************************************************************************************************************************/ /* */ /* 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