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