/*************************************************************************************************************************************/
/* */
/* D E F O R M A T I O N " I N V E R S E " D ' U N E I M A G E " F L O T T A N T E " : */
/* */
/* */
/* Note : */
/* */
/* Le 20180617104116, je note qu'une */
/* utilisation "neutre" possible est la */
/* suivante en partant de 'IMAGE1' : */
/* */
/* */
/* :Debut_listG_deformi_01: */
/* */
/* $Z $xci/acces$X \ */
/* $Z A=IMAGE1 \ */
/* $Z convertir=VRAI \ */
/* $Z R=$xTV/CHAMP \ */
/* $Z $formatI */
/* */
/* $Z $xci/valeurs_imag$X \ */
/* $Z normalisees=VRAI \ */
/* $Z premiere=1 \ */
/* $Z derniere=$tailleI \ */
/* $Z PX=1 \ */
/* $Z PY=0 \ */
/* $Z >& $xTV/COORDONNEES$COORD_X */
/* */
/* $Z $xci/valeurs_imag$X \ */
/* $Z normalisees=VRAI \ */
/* $Z premiere=1 \ */
/* $Z derniere=$tailleI \ */
/* $Z PX=0 \ */
/* $Z PY=1 \ */
/* $Z >& $xTV/COORDONNEES$COORD_Y */
/* */
/* $Z $xrv/store_image$X \ */
/* $Z ne=0 \ */
/* $Z LISTE_X=$xTV/COORDONNEES$COORD_X \ */
/* $Z LISTE_Y=$xTV/COORDONNEES$COORD_Y \ */
/* $Z LISTE_NIVEAU=$xTV/COORDONNEES$COORD_X \ */
/* $Z standard=FAUX \ */
/* $Z R=$xTV/DEFORMATION$COORD_X \ */
/* $Z $formatI */
/* */
/* $Z $xrv/store_image$X \ */
/* $Z ne=0 \ */
/* $Z LISTE_X=$xTV/COORDONNEES$COORD_X \ */
/* $Z LISTE_Y=$xTV/COORDONNEES$COORD_Y \ */
/* $Z LISTE_NIVEAU=$xTV/COORDONNEES$COORD_Y \ */
/* $Z standard=FAUX \ */
/* $Z R=$xTV/DEFORMATION$COORD_Y \ */
/* $Z $formatI */
/* */
/* $Z $xci/deformi.01$X \ */
/* $Z A=$xTV/CHAMP \ */
/* $Z DX=$xTV/DEFORMATION$COORD_X \ */
/* $Z DY=$xTV/DEFORMATION$COORD_Y \ */
/* $Z tridimensionnelle=FAUX \ */
/* $Z ne_pas_interpoler=VRAI \ */
/* $Z $formatI | \ */
/* $Z $xci/acces$X \ */
/* $Z standard=FAUX brutal=VRAI \ */
/* $Z R=IMAGE2 \ */
/* $Z $formatI */
/* */
/* :Fin_listG_deformi_01: */
/* */
/* */
/* A la fin de ce processus, les deux images */
/* 'IMAGE1' et 'IMAGE2'doivent evidemment */
/* etre identiques... */
/* */
/* */
/* Author of '$xci/deformi.01$K' : */
/* */
/* Jean-Francois COLONNA (LACTAMME, 20080525102125). */
/* */
/*************************************************************************************************************************************/
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* 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 GENERER_LES_GET_ARGUMENTS_DE_CONTROLE_DE_L_ARITHMETIQUE_ETENDUE_DES_NOMBRES_FLOTTANTS
/* Introduit le 20081231084743... */
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* F I C H I E R S D ' I N C L U D E S : */
/* */
/*************************************************************************************************************************************/
#include INCLUDES_BASE
#include image_image_IMAGESF_EXT
#include image_image_QUAD_IMAGE_EXT
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* P A R A M E T R E S : */
/* */
/*************************************************************************************************************************************/
#define LA_DEFORMATION_INVERSE_EST_BIDIMENSIONNELLE \
VRAI \
/* La deformation est definie bidimensionnellement ('VRAI') ou bien tridimensionnellement */ \
/* ('FAUX'). Ce parametre fut introduit le 20080901150308... */
#define LA_DEFORMATION_INVERSE_EST_DEFINIE_EN_COORDONNEES_CARTESIENNES \
VRAI \
/* La deformation est definie en coordonnees cartesiennes ('VRAI') ou bien en coordonnees */ \
/* polaires ('FAUX'). Ce parametre fut introduit le 20080821102016... */
#define NOMBRE_D_ITERATIONS_DE_LA_DEFORMATION_INVERSE \
UN \
/* A compter du 20081231084743 la deformation peut etre iteree. La valeur par defaut */ \
/* assure la compatibilite anterieure. */
#define ALPHA \
FU
#define BETA_ \
FZERO
/* Parametres d'interpolation (en general : alpha+beta=1) introduits le 20081231084743. */
/* Les valeurs par defaut {1,0} assurent la compatibilite anterieure. */
/* */
/* On notera qu'en general, la logique demande : */
/* */
/* alpha >= beta (soit ponderationA >= ponderationR) */
/* */
/* pour simuler un effet Larsen... */
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* M A C R O S U T I L E S : */
/* */
/*************************************************************************************************************************************/
#define imageR \
IFmageR
#define imageA \
IFmageA
#define imageT \
IFmageA4
#define imageX_RHO_ \
IFmageA1
#define imageY_THETA \
IFmageA2
#define imageZ_PHI_ \
IFmageA3
/* On notera les associations : */
/* */
/* X --> RHO */
/* Y --> THETA */
/* Z --> PHI */
/* */
/* et non pas (comme les noms 'IFconversion_RPT_...' le laissent supposer) : */
/* */
/* X --> RHO */
/* Y --> PHI */
/* Z --> THETA */
/* */
/* afin de permettre un "recouvrement" des methodes bidimensionnelles (polaire avec Y=THETA) */
/* et tridimensionnelles (spherique avec Y=THETA et Z=PHI)... */
#define ITERATION_DE_LA_DEFORMATION_INVERSE(fonction_de_deformation) \
Bblock \
Repe(nombre_d_iterations_de_la_deformation_inverse) \
Bblock \
BLOC(fonction_de_deformation); \
\
Test(IFET(IFEQ(alpha,FU),IFEQ(beta_,FZERO))) \
Bblock \
CALS(IFmove(imageA,imageR)); \
Eblock \
ATes \
Bblock \
CALS(IFinterpolation(imageT,alpha,imageA,beta_,imageR)); \
CALS(IFmove(imageA,imageT)); \
Eblock \
ETes \
Eblock \
ERep \
\
CALS(IFmove(imageR,imageA)); \
Eblock \
/* Iteration de la deformation inverse destinee, par exemple, a simuler des effets Larsen... */
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* D E F O R M A T I O N " I N V E R S E " D ' U N E I M A G E " F L O T T A N T E " : */
/* */
/*************************************************************************************************************************************/
BCommande(nombre_d_arguments,arguments)
/*-----------------------------------------------------------------------------------------------------------------------------------*/
Bblock
DEFV(CHAR,INIC(POINTERc(nom_imageR),NOM_PIPE));
DEFV(CHAR,INIC(POINTERc(nom_imageA),NOM_PIPE));
DEFV(CHAR,INIC(POINTERc(nom_imageDIX_RHO_),NOM_PIPE));
DEFV(CHAR,INIC(POINTERc(nom_imageDIY_THETA),NOM_PIPE));
DEFV(CHAR,INIC(POINTERc(nom_imageDIZ_PHI_),NOM_PIPE));
/* L'image 'Z' fut introduite le 20080901135332... */
DEFV(Logical,INIT(la_deformation_inverse_est_bidimensionnelle,LA_DEFORMATION_INVERSE_EST_BIDIMENSIONNELLE));
/* La deformation est definie bidimensionnellement ('VRAI') ou bien tridimensionnellement */
/* ('FAUX'). Ce parametre fut introduit le 20080901150308... */
DEFV(Logical,INIT(la_deformation_inverse_est_definie_en_coordonnees_cartesiennes
,LA_DEFORMATION_INVERSE_EST_DEFINIE_EN_COORDONNEES_CARTESIENNES
)
);
/* La deformation est definie en coordonnees cartesiennes ('VRAI') ou bien en coordonnees */
/* polaires ('FAUX'). Ce parametre fut introduit le 20080821102016... */
DEFV(Positive,INIT(nombre_d_iterations_de_la_deformation_inverse,NOMBRE_D_ITERATIONS_DE_LA_DEFORMATION_INVERSE));
/* A compter du 20081231084743 la deformation peut etre iteree. La valeur par defaut */
/* assure la compatibilite anterieure. */
DEFV(Float,INIT(alpha,ALPHA));
DEFV(Float,INIT(beta_,BETA_));
/* Parametres d'interpolation (en general : alpha+beta=1) introduits le 20081231084743. */
/* On notera les associtions suivantes : */
/* */
/* alpha : ponderation de 'imageA' */
/* beta : ponderation de 'imageR' */
/* */
/* Les valeurs par defaut {1,0} assurent la compatibilite anterieure. */
/* */
/* On notera qu'en general, la logique demande : */
/* */
/* alpha >= beta (soit ponderationA >= ponderationR) */
/* */
/* pour simuler un effet Larsen... */
/*..............................................................................................................................*/
BSaveModifyVariable(Logical,S_ACCELERATEUR__ILOAD_POINT_COORDONNEES_01_____utiliser_l_accelerateur,VRAI);
/* Introduit le 20120620092855... */
/* */
/* Le 20120930091237, je me demande pourquoi l'accelerateur est ici active, puisque cela */
/* provoque un ralentissement ('v $xiipf/fonction.2$FON 20120619134249'). Malgre tout je */
/* maintient cela car, en effet, cela permet de tester l'accelerateur qui est un processus */
/* complexe pris en defaut le 'v $xiipf/fonction.2$FON 20120929165544'... */
GET_ARGUMENTSi(nombre_d_arguments
,BLOC(GET_ARGUMENT_C("imageA=""A=",nom_imageA);
/* On rappelera le 20081028180433 qu'il est souhaitable que 'imageA' soit un champ */
/* periodique en 'X' et en 'Y' pour generer des entrelacs 'imageR'... */
GET_ARGUMENT_C("imageDIX=""DIX=""imageDX=""DX=""imageDIR=""DIR=""imageDR=""DR=",nom_imageDIX_RHO_);
GET_ARGUMENT_C("imageDIY=""DIY=""imageDY=""DY=""imageDIT=""DIT=""imageDT=""DT=",nom_imageDIY_THETA);
GET_ARGUMENT_C("imageDIZ=""DIZ=""imageDZ=""DZ=""imageDIP=""DIP=""imageDP=""DP=",nom_imageDIZ_PHI_);
/* On notera le 20081028180433 qu'il est souhaitable que {imageDIX,imageDIY[,imageDIZ]} */
/* soient des champs periodiques en 'X' et en 'Y' lorsque l'option "matrice=VRAI" est */
/* demandee et que la matrice {{mxx,mxy,mxz},{myx,myy,myz},{mzx,mzy,mzz}} n'est pas unite... */
GET_ARGUMENT_C("imageR=""R=",nom_imageR);
GET_ARGUMENT_L("bidimensionnelle=""bidim=""2D=",la_deformation_inverse_est_bidimensionnelle);
GET_ARGUMENT_N("tridimensionnelle=""tridim=""3D=",la_deformation_inverse_est_bidimensionnelle);
/* Parametres introduits le 20080901150308... */
GET_ARGUMENT_L("cartesiennes=""cartesienne=""cartesien="
,la_deformation_inverse_est_definie_en_coordonnees_cartesiennes
);
GET_ARGUMENT_N("polaires=""polaire=""spheriques=""spherique="
,la_deformation_inverse_est_definie_en_coordonnees_cartesiennes
);
GET_ARGUMENT_F("trx2D=",IFconversion_RT_X_____Post___Translation);
GET_ARGUMENT_F("try2D=",IFconversion_RT_Y_____Post___Translation);
/* Le 20080918142801 les parametres {"trx=","try="} ont ete rebaptises {"trx2D=","try2D="} */
/* pour permettre l'intruduction des parametres {"trx3D=","try3D=","trz3D="}... */
GET_ARGUMENT_F("trx3D=",IFconversion_RPT_X_____Post___Translation);
GET_ARGUMENT_F("try3D=",IFconversion_RPT_Y_____Post___Translation);
GET_ARGUMENT_F("trz3D=",IFconversion_RPT_Z_____Post___Translation);
/* Parametres introduits le 20080918142801... */
GET_ARGUMENT_L("ignorer_diX_diY=""idiXdiY="
,IFdeformation_inverse_bidimensionnelle_____ignorer_un_couple_diX_diY
);
GET_ARGUMENT_F("ignorer_diX=""idiX="
,IFdeformation_inverse_bidimensionnelle_____ignorer_cette_valeur_de_diX
);
GET_ARGUMENT_F("ignorer_diY=""idiY="
,IFdeformation_inverse_bidimensionnelle_____ignorer_cette_valeur_de_diY
);
/* Parametres introduits le 20120620120601... */
GET_ARGUMENT_I("Xpave2D=""Xp2D=",IFdeformation_inverse_bidimensionnelle_____demi_taille_X_du_pave);
GET_ARGUMENT_I("Ypave2D=""Yp2D=",IFdeformation_inverse_bidimensionnelle_____demi_taille_Y_du_pave);
GET_ARGUMENT_I("Xpave3D=""Xp3D=",IFdeformation_inverse_tridimensionnelle_____demi_taille_X_du_pave);
GET_ARGUMENT_I("Ypave3D=""Yp3D=",IFdeformation_inverse_tridimensionnelle_____demi_taille_Y_du_pave);
/* Parametres introduits le 20090106122536... */
GET_ARGUMENT_L("X_normalisees2D=""X_n2D="
,IFdeformation_inverse_bidimensionnelle_____les_coordonnees_X_sont_normalisees
);
GET_ARGUMENT_N("X_denormalisees2D=""X_dn2D="
,IFdeformation_inverse_bidimensionnelle_____les_coordonnees_X_sont_normalisees
);
GET_ARGUMENT_L("Y_normalisees2D=""Y_n2D="
,IFdeformation_inverse_bidimensionnelle_____les_coordonnees_Y_sont_normalisees
);
GET_ARGUMENT_N("Y_denormalisees2D=""Y_dn2D="
,IFdeformation_inverse_bidimensionnelle_____les_coordonnees_Y_sont_normalisees
);
GET_ARGUMENT_L("Z_normalisees2D=""Z_n2D="
,IFdeformation_inverse_bidimensionnelle_____les_coordonnees_Z_sont_normalisees
);
GET_ARGUMENT_N("Z_denormalisees2D=""Z_dn2D="
,IFdeformation_inverse_bidimensionnelle_____les_coordonnees_Z_sont_normalisees
);
GET_ARGUMENT_L("X_normalisees3D=""X_n3D="
,IFdeformation_inverse_tridimensionnelle_____les_coordonnees_X_sont_normalisees
);
GET_ARGUMENT_N("X_denormalisees3D=""X_dn3D="
,IFdeformation_inverse_tridimensionnelle_____les_coordonnees_X_sont_normalisees
);
GET_ARGUMENT_L("Y_normalisees3D=""Y_n3D="
,IFdeformation_inverse_tridimensionnelle_____les_coordonnees_Y_sont_normalisees
);
GET_ARGUMENT_N("Y_denormalisees3D=""Y_dn3D="
,IFdeformation_inverse_tridimensionnelle_____les_coordonnees_Y_sont_normalisees
);
GET_ARGUMENT_L("Z_normalisees3D=""Z_n3D="
,IFdeformation_inverse_tridimensionnelle_____les_coordonnees_Z_sont_normalisees
);
GET_ARGUMENT_N("Z_denormalisees3D=""Z_dn3D="
,IFdeformation_inverse_tridimensionnelle_____les_coordonnees_Z_sont_normalisees
);
/* Parametres introduits le 20080901155123... */
GET_ARGUMENT_L("iterer2D=""i2D="
,IFdeformation_inverse_bidimensionnelle_____iterer_le_calcul_des_coordonnees
);
GET_ARGUMENT_I("nombre_iterations2D=""n2D="
,IFdeformation_inverse_bidimensionnelle_____nombre_d_iterations_du_calcul_des_coordonnees
);
/* Parametres introduits le 20081024095549... */
GET_ARGUMENT_L("iterer3D=""i3D="
,IFdeformation_inverse_tridimensionnelle_____iterer_le_calcul_des_coordonnees
);
GET_ARGUMENT_I("nombre_iterations3D=""n3D="
,IFdeformation_inverse_tridimensionnelle_____nombre_d_iterations_du_calcul_des_coordonnees
);
/* Parametres introduits le 20081024095549... */
GET_ARGUMENT_L("appliquer_une_matrice_de_transformation2D=""matrice2D=""transformation2D="
,IFdeformation_inverse_bidimensionnelle_____appliquer_une_matrice_de_transformation_2D
);
/* On notera le 20081028180433 que pour cette option, contrairement a "matrice=VRAI", il */
/* n'est pas necessaire que les champs {imageDIX,imageDIY} soient periodiques */
/* en 'X' et en 'Y', et ce meme si la matrice {{mxx2D,mxy2D},{myx2D,myy2D}} n'est pas */
/* unite... */
GET_ARGUMENT_F("mxx2D=""mtxx2D="
,ASD2(IFdeformation_inverse_bidimensionnelle_____matrice_de_transformation_2D,cx,cx)
);
GET_ARGUMENT_F("mxy2D=""mtxy2D="
,ASD2(IFdeformation_inverse_bidimensionnelle_____matrice_de_transformation_2D,cx,cy)
);
GET_ARGUMENT_F("myx2D=""mtyx2D="
,ASD2(IFdeformation_inverse_bidimensionnelle_____matrice_de_transformation_2D,cy,cx)
);
GET_ARGUMENT_F("myy2D=""mtyy2D="
,ASD2(IFdeformation_inverse_bidimensionnelle_____matrice_de_transformation_2D,cy,cy)
);
/* Les parametres de transformation matricielle furent introduits le 20081028160338... */
GET_ARGUMENT_F("pre_atrx2D=",IFdeformation_inverse_bidimensionnelle_____PreAntiTranslation_Xf);
GET_ARGUMENT_F("post_trx2D=",IFdeformation_inverse_bidimensionnelle_____Post___Translation_Xf);
GET_ARGUMENT_F("pre_atry2D=",IFdeformation_inverse_bidimensionnelle_____PreAntiTranslation_Yf);
GET_ARGUMENT_F("post_try2D=",IFdeformation_inverse_bidimensionnelle_____Post___Translation_Yf);
/* Les parametres de "pre" et "post" translations furent introduits le 20081028160338... */
GET_ARGUMENT_L("appliquer_une_matrice_de_transformation3D=""matrice3D=""transformation3D="
,IFdeformation_inverse_tridimensionnelle_____appliquer_une_matrice_de_transformation_2D
);
/* On notera le 20081028180433 que pour cette option, contrairement a "matrice=VRAI", il */
/* n'est pas necessaire que les champs {imageDIX,imageDIY,imageDIZ} soient periodiques */
/* en 'X' et en 'Y', et ce meme si la matrice {{mxx3D,mxy3D},{myx3D,myy3D}} n'est pas */
/* unite... */
GET_ARGUMENT_F("mxx3D=""mtxx3D="
,ASD2(IFdeformation_inverse_tridimensionnelle_____matrice_de_transformation_2D,cx,cx)
);
GET_ARGUMENT_F("mxy3D=""mtxy3D="
,ASD2(IFdeformation_inverse_tridimensionnelle_____matrice_de_transformation_2D,cx,cy)
);
GET_ARGUMENT_F("myx3D=""mtyx3D="
,ASD2(IFdeformation_inverse_tridimensionnelle_____matrice_de_transformation_2D,cy,cx)
);
GET_ARGUMENT_F("myy3D=""mtyy3D="
,ASD2(IFdeformation_inverse_tridimensionnelle_____matrice_de_transformation_2D,cy,cy)
);
/* Les parametres de transformation matricielle furent introduits le 20081028160338... */
GET_ARGUMENT_F("pre_atrx3D=",IFdeformation_inverse_tridimensionnelle_____PreAntiTranslation_Xf);
GET_ARGUMENT_F("post_trx3D=",IFdeformation_inverse_tridimensionnelle_____Post___Translation_Xf);
GET_ARGUMENT_F("pre_atry3D=",IFdeformation_inverse_tridimensionnelle_____PreAntiTranslation_Yf);
GET_ARGUMENT_F("post_try3D=",IFdeformation_inverse_tridimensionnelle_____Post___Translation_Yf);
/* Les parametres de "pre" et "post" translations furent introduits le 20081028160338... */
GET_ARGUMENT_L("AccelerateurILoadPoint=""AccILP="
,S_ACCELERATEUR__ILOAD_POINT_COORDONNEES_01_____utiliser_l_accelerateur
);
/* Arguments introduits le 20120620092855... */
GET_ARGUMENT_L("interpoler=""inter="
,FFload_point_coordonnees_01_____interpoler_bilineairement_ou_bicubiquement
);
GET_ARGUMENT_N("ne_pas_interpoler=""ninter="
,FFload_point_coordonnees_01_____interpoler_bilineairement_ou_bicubiquement
);
/* Parametres introduits le 20080926133545 et completes le 20090603182930 par la negation... */
GET_ARGUMENT_F("interpolerX=""interX="
,FFload_point_coordonnees_01_____ponderation_du_barycentre_d_interpolation_X
);
GET_ARGUMENT_F("interpolerY=""interY="
,FFload_point_coordonnees_01_____ponderation_du_barycentre_d_interpolation_Y
);
/* Parametres introduits le 20080930165101... */
GET_ARGUMENT_L("lineaire=""bilineaire="
,FFload_point_coordonnees_01_____utiliser_l_interpolation_bilineaire
);
GET_ARGUMENT_N("cubique=""bicubique="
,FFload_point_coordonnees_01_____utiliser_l_interpolation_bilineaire
);
/* Parametres introduits le 20080903115717... */
GET_ARGUMENT_L("appliquer_une_matrice_de_transformation=""matrice=""transformation="
,FFload_point_coordonnees_01_____appliquer_une_matrice_de_transformation
);
/* On notera le 20081028180433 que pour utiliser cette option, il est preferable d'utiliser */
/* des champs {imageDIX,imageDIY[,imageDIZ]} periodiques en 'X' et en 'Y' en particulier */
/* quand la matrice {{mxx,mxy,mxz},{myx,myy,myz},{mzx,mzy,mzz}} n'est pas unite... */
GET_ARGUMENT_F("mxx=""mtxx=",ASD2(FFload_point_coordonnees_01_____matrice_de_transformation,cx,cx));
GET_ARGUMENT_F("mxy=""mtxy=",ASD2(FFload_point_coordonnees_01_____matrice_de_transformation,cx,cy));
GET_ARGUMENT_F("mxz=""mtxz=",ASD2(FFload_point_coordonnees_01_____matrice_de_transformation,cx,cz));
GET_ARGUMENT_F("myx=""mtyx=",ASD2(FFload_point_coordonnees_01_____matrice_de_transformation,cy,cx));
GET_ARGUMENT_F("myy=""mtyy=",ASD2(FFload_point_coordonnees_01_____matrice_de_transformation,cy,cy));
GET_ARGUMENT_F("myz=""mtyz=",ASD2(FFload_point_coordonnees_01_____matrice_de_transformation,cy,cz));
GET_ARGUMENT_F("mzx=""mtzx=",ASD2(FFload_point_coordonnees_01_____matrice_de_transformation,cz,cx));
GET_ARGUMENT_F("mzy=""mtzy=",ASD2(FFload_point_coordonnees_01_____matrice_de_transformation,cz,cy));
GET_ARGUMENT_F("mzz=""mtzz=",ASD2(FFload_point_coordonnees_01_____matrice_de_transformation,cz,cz));
GET_ARGUMENT_F("z=""Z=""Zf=",FFload_point_coordonnees_01_____Zf);
/* Les parametres de transformation matricielle furent introduits le 20080802123140... */
/* */
/* Les parametres correspondant a la coordonnee 'Z' furent introduits le 20080901133918... */
GET_ARGUMENT_F("pre_atrx=",FFload_point_coordonnees_01_____PreAntiTranslation_Xf);
GET_ARGUMENT_F("post_trx=",FFload_point_coordonnees_01_____Post___Translation_Xf);
GET_ARGUMENT_F("pre_atry=",FFload_point_coordonnees_01_____PreAntiTranslation_Yf);
GET_ARGUMENT_F("post_try=",FFload_point_coordonnees_01_____Post___Translation_Yf);
/* Les parametres de "pre" et "post" translations furent introduits le 20080803094606... */
GET_ARGUMENT_L("periodiser_X2D=""per_X2D=",IFdeformation_inverse_bidimensionnelle_____periodiser_X);
GET_ARGUMENT_L("symetriser_X2D=""sym_X2D=",IFdeformation_inverse_bidimensionnelle_____symetriser_X);
GET_ARGUMENT_L("prolonger_X2D=""pro_X2D=",IFdeformation_inverse_bidimensionnelle_____prolonger_X);
GET_ARGUMENT_L("periodiser_Y2D=""per_Y2D=",IFdeformation_inverse_bidimensionnelle_____periodiser_Y);
GET_ARGUMENT_L("symetriser_Y2D=""sym_Y2D=",IFdeformation_inverse_bidimensionnelle_____symetriser_Y);
GET_ARGUMENT_L("prolonger_Y2D=""pro_Y2D=",IFdeformation_inverse_bidimensionnelle_____prolonger_Y);
GET_ARGUMENT_F("niveau_hors_image2D=""nhi2D="
,IFdeformation_inverse_bidimensionnelle_____niveau_flottant_hors_image
);
/* Parametres introduits le 20080525110142... */
GET_ARGUMENT_L("periodiser_X3D=""per_X3D=",IFdeformation_inverse_tridimensionnelle_____periodiser_X);
GET_ARGUMENT_L("symetriser_X3D=""sym_X3D=",IFdeformation_inverse_tridimensionnelle_____symetriser_X);
GET_ARGUMENT_L("prolonger_X3D=""pro_X3D=",IFdeformation_inverse_tridimensionnelle_____prolonger_X);
GET_ARGUMENT_L("periodiser_Y3D=""per_Y3D=",IFdeformation_inverse_tridimensionnelle_____periodiser_Y);
GET_ARGUMENT_L("symetriser_Y3D=""sym_Y3D=",IFdeformation_inverse_tridimensionnelle_____symetriser_Y);
GET_ARGUMENT_L("prolonger_Y3D=""pro_Y3D=",IFdeformation_inverse_tridimensionnelle_____prolonger_Y);
GET_ARGUMENT_F("niveau_hors_image3D=""nhi3D="
,IFdeformation_inverse_tridimensionnelle_____niveau_flottant_hors_image
);
/* Parametres introduits le 20080901155123... */
GET_ARGUMENT_I("nombre_iterations=""iterations=",nombre_d_iterations_de_la_deformation_inverse);
/* Parametres introduits le 20081231084743... */
PROCESS_ARGUMENT_L("arithmetique_etendue_interpolation=""ariei="
,IFinterpolation____`use_arithmetique_etendue_et_non_basique
,BLOC(VIDE;)
,BLOC(Bblock
EGAL(si_le_GooF_est_activable`use_arithmetique_etendue_et_non_basique
,IFinterpolation____`use_arithmetique_etendue_et_non_basique
);
Eblock
)
);
PROCESS_ARGUMENT_N("arithmetique_de_base_interpolation=""aribi="
,IFinterpolation____`use_arithmetique_etendue_et_non_basique
,BLOC(VIDE;)
,BLOC(Bblock
EGAL(si_le_GooF_est_activable`use_arithmetique_etendue_et_non_basique
,NOTL(IFinterpolation____`use_arithmetique_etendue_et_non_basique)
);
/* Le 'NOTL(...)' est absolument necessaire a cause de 'PROCESS_ARGUMENT_N(...)' car, */
/* en effet, lorsque le 'EGAL(...)' est execute, le parametre logique en cours de traitement */
/* est alors inverse ('v $xig/fonct$vv$DEF NOTL.valeur_L_par_defaut'). */
Eblock
)
);
/* Parametres d'arithmetique etendue introduits le 20081231084743... */
GET_ARGUMENT_F("alpha=""a=""ponderationA=""pA=",alpha);
GET_ARGUMENT_F("beta=""b=""ponderationR=""pR=",beta_);
/* Parametres introduits le 20081231084743... */
/* */
/* On notera qu'en general, la logique demande : */
/* */
/* alpha >= beta (soit ponderationA >= ponderationR) */
/* */
/* pour simuler un effet Larsen... */
)
);
CALi(IFinitialisation(imageR,FZERO));
/* Initialisation de l'image Resultat (introduit le 20080821110529 car manquait...). */
Test(PAS_D_ERREUR(CODE_ERROR(IloadF_image(imageA,nom_imageA))))
Bblock
Test(PAS_D_ERREUR(CODE_ERROR(IloadF_image(imageX_RHO_,nom_imageDIX_RHO_))))
/* Chargement de l'image des deformations "inverses" en 'X' (ou bien en 'RHO')... */
Bblock
Test(PAS_D_ERREUR(CODE_ERROR(IloadF_image(imageY_THETA,nom_imageDIY_THETA))))
/* Chargement de l'image des deformations "inverses" en 'Y' (ou bien en 'PHI')... */
Bblock
Test(EST_FAUX(la_deformation_inverse_est_bidimensionnelle))
/* Possibilite introduite le 20080901151312... */
Bblock
CALi(IFinitialisation(imageZ_PHI_,FZcentre_____));
/* A priori, la coordonnee 'Z' est nulle (introduit le 20080901135332). */
Test(IFNE_chaine(nom_imageDIZ_PHI_,NOM_PIPE))
Bblock
Test(PAS_D_ERREUR(CODE_ERROR(IloadF_image(imageZ_PHI_,nom_imageDIZ_PHI_))))
/* Chargement de l'image des deformations "inverses" en 'Z' (introduit le 20080901135332). */
Bblock
Eblock
ATes
Bblock
Test__CODE_ERREUR__ERREUR07;
PRINT_ATTENTION("la deformation ne peut donc etre que bidimensionnelle");
EGAL(la_deformation_inverse_est_bidimensionnelle,VRAI);
/* Introduit le 20080916131129... */
Eblock
ETes
Eblock
ATes
Bblock
Eblock
ETes
Eblock
ATes
Bblock
Eblock
ETes
Test(EST_VRAI(la_deformation_inverse_est_bidimensionnelle))
/* Possibilite introduite le 20080901151312... */
Bblock
BDEFV(imageF,imageX);
BDEFV(imageF,imageY);
Test(EST_VRAI(la_deformation_inverse_est_definie_en_coordonnees_cartesiennes))
Bblock
CALS(IFmove(imageX,imageX_RHO_));
CALS(IFmove(imageY,imageY_THETA));
Eblock
ATes
Bblock
CALS(IFconversion_RT_X(imageX,imageX_RHO_,imageY_THETA));
CALS(IFconversion_RT_Y(imageY,imageX_RHO_,imageY_THETA));
/* Possibilite introduite le 20080821102016... */
Eblock
ETes
ITERATION_DE_LA_DEFORMATION_INVERSE(BLOC(
Bblock
CALS(IFdeformation_inverse_bidimensionnelle(imageR
,imageA
,imageX
,imageY
)
);
Eblock
)
);
EDEFV(imageF,imageY);
EDEFV(imageF,imageX);
Eblock
ATes
Bblock
BDEFV(imageF,imageX);
BDEFV(imageF,imageY);
BDEFV(imageF,imageZ);
Test(EST_VRAI(la_deformation_inverse_est_definie_en_coordonnees_cartesiennes))
Bblock
CALS(IFmove(imageX,imageX_RHO_));
CALS(IFmove(imageY,imageY_THETA));
CALS(IFmove(imageZ,imageZ_PHI_));
Eblock
ATes
Bblock
CALS(IFconversion_RPT_X(imageX,imageX_RHO_,imageY_THETA,imageZ_PHI_));
CALS(IFconversion_RPT_Y(imageY,imageX_RHO_,imageY_THETA,imageZ_PHI_));
CALS(IFconversion_RPT_Z(imageZ,imageX_RHO_,imageY_THETA,imageZ_PHI_));
/* Possibilite introduite le 20080918142801... */
Eblock
ETes
ITERATION_DE_LA_DEFORMATION_INVERSE(BLOC(
Bblock
CALS(IFdeformation_inverse_tridimensionnelle(imageR
,imageA
,imageX
,imageY
,imageZ
)
);
Eblock
)
);
EDEFV(imageF,imageZ);
EDEFV(imageF,imageY);
EDEFV(imageF,imageX);
Eblock
ETes
CALi(IupdateF_image(nom_imageR,imageR));
Eblock
ATes
Bblock
Test__CODE_ERREUR__ERREUR07;
Eblock
ETes
Eblock
ATes
Bblock
Test__CODE_ERREUR__ERREUR07;
Eblock
ETes
Eblock
ATes
Bblock
Test__CODE_ERREUR__ERREUR07;
Eblock
ETes
ESaveModifyVariable(Logical,S_ACCELERATEUR__ILOAD_POINT_COORDONNEES_01_____utiliser_l_accelerateur);
RETU_Commande;
Eblock
ECommande