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



Copyright © Jean-François COLONNA, 2019-2024.
Copyright © CMAP (Centre de Mathématiques APpliquées) UMR CNRS 7641 / École polytechnique, Institut Polytechnique de Paris, 2019-2024.