/*************************************************************************************************************************************/ /* */ /* " T R I C R O I S S A N T H O R I Z O N T A L " D ' U N E I M A G E : */ /* */ /* */ /* Nota : */ /* */ /* L'image etant supposee carree ( a cause */ /* du '$xci/transpose$X'), pour realiser un */ /* tri du type : */ /* */ /* */ /* | | | * || */ /* | | | *|* || */ /* | | | * | * || */ /* | | |* | *|| */ /* * | * | *| */ /* |* | *| | || */ /* | * | * | | || */ /* | *|* | | || */ /* | * | | || */ /* ------------------ */ /* */ /* N */ /* <----------------> */ /* */ /* */ /* et ce dans les deux directions ('X' et 'Y'), on */ /* procedera ainsi ('N' designant la taille du noyau */ /* carre sur laquelle se fait le "filtrage", 'N' etant */ /* exprime dans [0,1]) : */ /* */ /* $xci/acces$X A=... $formatI | */ /* $xci/tri_hor.01$X pas=N monotone=VRAI $formatI | */ /* $xci/transpose$X $formatI | */ /* $xci/tri_hor.01$X pas=N monotone=VRAI $formatI | */ /* $xci/tri_hor.01$X pas=N monotone=FAUX $formatI | */ /* $xci/transpose$X $formatI | */ /* $xci/tri_hor.01$X pas=N monotone=FAUX R=... $formatI */ /* */ /* les deux premiers '$xci/tri_hor.01$X' ('VRAI') */ /* faisant un tri monotone des valeurs des points, */ /* alors que les deux derniers '$xci/tri_hor.01$X' */ /* ('FAUX') font le reordonnancement necessaire... */ /* */ /* Enfin, la valeur de 'N' peut etre obtenue a partir */ /* d'un nombre de pixels (en general une puissance */ /* de 2) a l'aide de '$xci/coordonnees$X' suivant : */ /* */ /* set N=`$xci/coordonnees$X x=P $formatI` */ /* */ /* ou 'P' designe un nombre (entier) de points... */ /* */ /* */ /* Author of '$xci/tri_hor.01$K' : */ /* */ /* Jean-Francois COLONNA (LACTAMME, 1994??????????). */ /* */ /*************************************************************************************************************************************/ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* I N T E R F A C E ' listG ' : */ /* */ /* */ /* Definition : */ /* */ /* :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 : */ /* */ /*************************************************************************************************************************************/ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* 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 /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* P A R A M E T R E S : */ /* */ /*************************************************************************************************************************************/ #define UN_TRI_MONOTONE \ VRAI \ /* Indique si le tri doit etre "monotone" ('VRAI') ce qui est un tri "standard", ou non */ \ /* ('FAUX') auquel cas le tri est fait de facon "originale" c'est-a-dire de la facon */ \ /* suivante : */ \ /* */ \ /* */ \ /* | *| | | | * || */ \ /* | * || | | | *|* || */ \ /* | * || | | | * | * || */ \ /* | * || | | |* | *|| */ \ /* | * || * | * | *| */ \ /* | * || |* | *| | || */ \ /* | * || | * | * | | || */ \ /* | * || | *|* | | || */ \ /* * || | * | | || */ \ /* ------------------ ------------------ */ \ /* X X */ \ /* */ \ /* en supposant qu'un tri "monotone" a ete fait au prealable sur 'imageA'... */ #define PAS_HORIZONTAL_RELATIF \ _____lNORMALISE_OX(I_lHOMOTHETIE_Std_OX(PasX)) \ /* Pas de parcours de l'image qui definit la longueur des segments sur lesquels ont lieu */ \ /* le tri ; ce pas est exprime dans [0,1]. */ \ /* */ \ /* Le 20120212093535, le 'I_lHOMOTHETIE_Std_OX(...)' fut introduit... */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* M A C R O S U T I L E S : */ /* */ /*************************************************************************************************************************************/ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* " T R I C R O I S S A N T H O R I Z O N T A L " D ' U N E I M A G E : */ /* */ /*************************************************************************************************************************************/ BCommande(nombre_d_arguments,arguments) /*-----------------------------------------------------------------------------------------------------------------------------------*/ Bblock DEFV(CHAR,INIC(POINTERc(nom_imageR),NOM_PIPE)); DEFV(CHAR,INIC(POINTERc(nom_imageA),NOM_PIPE)); DEFV(Logical,INIT(un_tri_monotone,UN_TRI_MONOTONE)); /* Indique si le tri doit etre "monotone" ('VRAI') ce qui est un tri "standard", ou non */ /* ('FAUX') auquel cas le tri est fait de facon "originale" c'est-a-dire de la facon */ /* suivante : */ /* */ /* */ /* | *| | | | * || */ /* | * || | | | *|* || */ /* | * || | | | * | * || */ /* | * || | | |* | *|| */ /* | * || * | * | *| */ /* | * || |* | *| | || */ /* | * || | * | * | | || */ /* | * || | *|* | | || */ /* * || | * | | || */ /* ------------------ ------------------ */ /* X X */ /* */ /* en supposant qu'un tri "monotone" a ete fait au prealable sur 'imageA'... */ DEFV(Float,INIT(pas_horizontal_relatif,FLOT__UNDEF)); /* Pas de parcours de l'image qui definit la longueur des segments sur lesquels ont lieu */ /* le tri ; ce pas est exprime dans [0,1]. */ /*..............................................................................................................................*/ GET_ARGUMENTSi(nombre_d_arguments ,BLOC(GET_ARGUMENT_C("imageA=""A=",nom_imageA); GET_ARGUMENT_C("imageR=""R=",nom_imageR); GET_ARGUMENT_L("monotone=",un_tri_monotone); GIT_ARGUMENT_F("pas=""h=",pas_horizontal_relatif,PAS_HORIZONTAL_RELATIF); ) ); CALi(Inoir(ImageR)); /* Initialisation de l'image Resultat. */ Test(PAS_D_ERREUR(CODE_ERROR(Iload_image(ImageA,nom_imageA)))) Bblock CALS(Itri_croissant_horizontal(ImageR,ImageA,pas_horizontal_relatif,un_tri_monotone)); /* Tri horizontal de l'image Argument... */ CALi(Iupdate_image(nom_imageR,ImageR)); Eblock ATes Bblock Test__CODE_ERREUR__ERREUR07; Eblock ETes RETU_Commande; Eblock ECommande