#!/bin/csh

#######################################################################################################################################
#                                                                                                                                     #
#         V I S U A L I S A T I O N   D ' U N   N O Y A U   D E   C O N V O L U T I O N  :                                            #
#                                                                                                                                     #
#                                                                                                                                     #
#         Utilisation :                                                                                                               #
#                                                                                                                                     #
#                   $xrv/VisualisationNoyauConvolution.11$Z      <Programme> [<Arguments> [<Palette> [<FacteurXY> [<FacteurN>]]]]     #
#                                                                                                                                     #
#                                                                                                                                     #
#         Author of '$xrv/VisualisationNoyauConvolution.11$Z' :                                                                       #
#                                                                                                                                     #
#                     Jean-Francois Colonna (LACTAMME, 20210310163125).                                                               #
#                                                                                                                                     #
#######################################################################################################################################

set                 Programme=$1
set                 Arguments="$2"
set                 Palette=$3
set                 FacteurXY=$4
set                 FacteurN=$5

if                  (-e $Programme) then
                    if                  ("$Palette" == "$K_VIDE") then
                                        set                 Palette=$xiP/cercle.35
                                        # Parametre introduit le 20210314105216...                                                    #
                    else
                    endif

                    if                  ("$FacteurXY" == "$K_VIDE") then
                                        set                 FacteurXY=0.70
                    else
                    endif

                    if                  ("$FacteurN" == "$K_VIDE") then
#20210314104512____:                                        set                 FacteurN=0.9                                          #
                                        set                 FacteurN=1.0
                    else
                    endif

                    Std

                    FilSTmpB            ImAgE_R
                    FilSTmpB            FCoOrDoNnEeS

                    $Programme          A=$BLANC                                                                                        \
                                        $Arguments                                                                                      \
                                        R=$ImAgE_R.inutile                                                                              \
                                        editer_noyau_convolution=VRAI                                                                   \
                                                                                                                        $formatI  |&    \
                    $GRE                "^NoyauDeConvolution"                                                                     |     \
                    $AW                 ' { print $1 } '                                                                          |     \
                    $SE                 -e "s/^.*(//"                                                                                   \
                                        -e "s/,/ /"                                                                                     \
                                        -e "s/)\[.*\]=/ /"                                                                              \
                                                                      >> $FCoOrDoNnEeS
                                        # Generation du fichier contenant d'une certaine facon {X,Y,niveau}...                        #

                    SIZE                $FCoOrDoNnEeS
                    if                  ($Fsize > 0) then
                                        # Test introduit le 20210312112807...                                                         #
                                        $CA                 $FCoOrDoNnEeS                                                         |     \
                                        $AW                 ' { print $1 } '                                                            \
                                                                                          >  $FCoOrDoNnEeS$COORD_X

                                        $CA                 $FCoOrDoNnEeS                                                         |     \
                                        $AW                 ' { print $2 } '                                                            \
                                                                                          >  $FCoOrDoNnEeS$COORD_Y

                                        $CA                 $FCoOrDoNnEeS                                                         |     \
                                        $AW                 ' { print $3 } '                                                            \
                                                                                          >  $FCoOrDoNnEeS$NIVEAU


                                        $CA                 $FCoOrDoNnEeS$COORD_X $FCoOrDoNnEeS$COORD_Y                           |     \
                                        $xrv/ABSO.01$X      ne=0 fichier==                                                        |     \
                                        $xrv/extrema.01$X   ne=0 fichier==                                                              \
                                                            maximum_seul=VRAI                                                           \
                                                            formater=VRAI signe="$K_VIDE"                                               \
                                                                                          >  $FCoOrDoNnEeS.maximum

                                        set                 FaCtEuR_XY=`$CA $FCoOrDoNnEeS.maximum`

                                        if                  ($FaCtEuR_XY == 0) then
                                                            set                 FaCtEuR_XY=1
                                        else
                                        endif

                                        set                 FaCtEuR_XY=`calculINS $FacteurXY*($mdimXY/(2*$FaCtEuR_XY))`
                                        # Il est imperatif que ce nombre soit entier si l'on veut que les espacements horizontaux     #
                                        # et verticaux des paves soient egaux...                                                      #

                                        set                 NpointX=`$CA $FCoOrDoNnEeS$COORD_X | $WCl`
                                        set                 NpointY=`$CA $FCoOrDoNnEeS$COORD_Y | $WCl`
                                        set                 NpointN=`$CA $FCoOrDoNnEeS$NIVEAU  | $WCl`
                                        set                 Npoint_=`$xcg/MAX3.01$X x=$NpointX y=$NpointY z=$NpointN signe="$K_VIDE"`
                                        set                 RNpoint=`calculINS sqrt($Npoint_)+0.9999`
                                        # Le "+0.9999" est destine a faire un arrondi par exces (via "INS")...                        #

                                        set                 ArGs="formater=VRAI signe=$K_VIDE"

                                        set                 MiN_N=`$xrv/extrema.01$X ne=0 fichier=$FCoOrDoNnEeS$NIVEAU  ms=VRAI $ArGs`
                                        set                 MaX_N=`$xrv/extrema.01$X ne=0 fichier=$FCoOrDoNnEeS$NIVEAU  Ms=VRAI $ArGs`

                                        if                  ("$MiN_N" != "$MaX_N") then
                                                            set                 FaCtEuR_N=`calcul (1/($MaX_N-$MiN_N))*$FacteurN`
                                        # La multiplication par 0.5 est destinee a "eloigner" le niveau maximal du '$BLANC' du fond.  #
                                        else
                                                            set                 FaCtEuR_N=$FacteurN
                                        endif

                                        set       FDemiTailleBord=0.8
                                        # Ce parametre permet d'eviter que les paves se touchent (ils le font pour 1.0)...            #
                                        set       MDemiTailleBord=20
                                        # Ce parametre permet de limiter la taille des paves...                                       #

                                        set       DemiTailleBord=`calculINS ($FDemiTailleBord*((($FacteurXY*$mdimXY)/$RNpoint)-1)/2)`
                                        # Definition des differents elements :                                                        #
                                        #                                                                                             #
                                        #         $FacteurXY*$mdimXY                      Taille du carre dans lequel s'inscrira      #
                                        #                                                 le noyau.                                   #
                                        #                                                                                             #
                                        #         ($FacteurXY*$mdimXY)/$RNpoint           Taille maximale d'un pave etant donne       #
                                        #                                                 qu'il va y avoir au plus '$RNpoint' paves   #
                                        #                                                 par ligne et par colonne.                   #
                                        #                                                                                             #
                                        #         ...-1)/2                                Prend en compte le fait que la taille d'un  #
                                        #                                                 pave est egale au double de la taille du    #
                                        #                                                 demi-pave plus un                           #
                                        #                                                 ('v $xrv/store_image$K 20120429165655').    #
                                        #                                                                                             #
                                        set       DemiTailleBord=`$xcg/MIN2.01$X a=$DemiTailleBord b=$MDemiTailleBord signe="$K_VIDE"`

                                        @         DemiTaillePaves = $DemiTailleBord - 2

                                        set                 TranslationX=`calculINS $Xmin+($dimX/2)`
                                        set                 TranslationY=`calculINS $Ymin+($dimY/2)`
                                        set                 TranslationN=0
                                        set                 Fbord=0.3
                                        set                 Fliens=0.5
#20210314105216____:                                        set                 Palettes=$xiP/cercle.35                               #

                                        set       ArGuMeNtS="$K_VIDE"
                                        set       ArGuMeNtS="$ArGuMeNtS"" ne=$Npoint_"
                                        set       ArGuMeNtS="$ArGuMeNtS"" fond=$NOIR"
                                        set       ArGuMeNtS="$ArGuMeNtS"" Xnormalisees=FAUX"
                                        set       ArGuMeNtS="$ArGuMeNtS"" facteur_X=$FaCtEuR_XY"
                                        set       ArGuMeNtS="$ArGuMeNtS"" translation_X=$TranslationX"
                                        set       ArGuMeNtS="$ArGuMeNtS"" LISTE_X=$FCoOrDoNnEeS$COORD_X"
                                        set       ArGuMeNtS="$ArGuMeNtS"" Ynormalisees=FAUX"
                                        set       ArGuMeNtS="$ArGuMeNtS"" facteur_Y=$FaCtEuR_XY"
                                        set       ArGuMeNtS="$ArGuMeNtS"" translation_Y=$TranslationY"
                                        set       ArGuMeNtS="$ArGuMeNtS"" LISTE_Y=$FCoOrDoNnEeS$COORD_Y"
                                        set       ArGuMeNtS="$ArGuMeNtS"" translation_niveaux=$TranslationN"
                                        # On notera qu'a compter du 20210313074945 les coordonnees {X,Y} sont denormalisees (et       #
                                        # donc entieres...) et ce afin d'eliminer un probleme d'arrondi qui faisait qu'avant cette    #
                                        # solution, l'espacement des paves pouvait etre irregulier (cela se voyait, par exemple, avec #
                                        # Npoints=300 pour lequel l'espacement pouvait varier d'un point aussi bien horizontalement   #
                                        # que verticalement)...                                                                       #

                                        $xrv/store_image$X  $ArGuMeNtS                                                                  \
                                                            chainer_points=VRAI                                                         \
                                                            Nnormalises=FAUX                                                            \
                                                            LISTE_NIVEAU=$BLANC                                                         \
                                                                                                                        $formatI  |     \
                                        $xci/dilate.01$X    dilater=VRAI                                                                \
                                                            R=$ImAgE_R.liens                                                            \
                                                                                                                        $formatI
                                        # Le trace des liens entre les points du noyau a ete introduit le 20210312093336...           #

                                        $xrv/store_image$X  $ArGuMeNtS                                                                  \
                                                            chainer_points=FAUX                                                         \
                                                            Nnormalises=FAUX                                                            \
                                                            LISTE_NIVEAU=$BLANC                                                         \
                                                            dpXG=$DemiTaillePaves dpYG=$DemiTaillePaves                                 \
                                                            dpXD=$DemiTaillePaves dpYD=$DemiTaillePaves                                 \
                                                            R=$ImAgE_R.bordures.1                                                       \
                                                                                                                        $formatI

                                        $xrv/store_image$X  $ArGuMeNtS                                                                  \
                                                            chainer_points=FAUX                                                         \
                                                            Nnormalises=FAUX                                                            \
                                                            LISTE_NIVEAU=$BLANC                                                         \
                                                            dpXG=$DemiTailleBord dpYG=$DemiTailleBord                                   \
                                                            dpXD=$DemiTailleBord dpYD=$DemiTailleBord                                   \
                                                            R=$ImAgE_R.bordures.2                                                       \
                                                                                                                        $formatI

                                        $xci/eor$X          A1=$ImAgE_R.bordures.1                                                      \
                                                            A2=$ImAgE_R.bordures.2                                                      \
                                                                                                                        $formatI  |     \
                                        $xci/scale$X        a=$Fbord                                                                    \
                                                            R=$ImAgE_R.bordures                                                         \
                                                                                                                        $formatI

                                        $xci/complement$X   A=$ImAgE_R.bordures.2                                                       \
                                                                                                                        $formatI  |     \
                                        $xci/and$X          A1=$ImAgE_R.liens                                                           \
                                                                                                                        $formatI  |     \
                                        $xci/scale$X        a=$Fliens                                                                   \
                                                            R=$ImAgE_R.liens                                                            \
                                                                                                                        $formatI

                                        $xrv/store_image$X  $ArGuMeNtS                                                                  \
                                                            Nnormalises=VRAI                                                            \
                                                            LISTE_NIVEAU=$FCoOrDoNnEeS$NIVEAU                                           \
                                                            facteur_niveaux=$FaCtEuR_N                                                  \
                                                            translation_niveaux=$TranslationN                                           \
                                                            dpXG=$DemiTaillePaves dpYG=$DemiTaillePaves                                 \
                                                            dpXD=$DemiTaillePaves dpYD=$DemiTaillePaves                                 \
                                                                                                                        $formatI  |     \
                                        $xci/vraies_C$X     p=$Palette                                                                  \
                                                            R=$ImAgE_R                                                                  \
                                                                                                                        $formatI

                                        $CA                 $FCoOrDoNnEeS$COORD_Y                                                 |     \
                                        $xrv/AXPB.11$X      ne=0 fichier==                                                              \
                                                            fichierA=$FaCtEuR_XY fichierB=$TranslationY                           |     \
                                        $xrv/extrema.01$X   ne=0 fichier==                                                              \
                                                            minimum_seul=VRAI                                                           \
                                                                                          >  $FCoOrDoNnEeS.minimum

                                        set                 Hmax=`calculINS $dimY/10`
                                        set                 Hmin=`calculINS $Hmax/2`

                                        set                 HaUtEuR_MiRe=`$CA $FCoOrDoNnEeS.minimum`
                                        set                 HaUtEuR_MiRe=`calculINS ($HaUtEuR_MiRe-$DemiTailleBord)/2`
#20210315101141____:                                        set                 HaUtEuR_MiRe=`$xcg/MAX2.01$X a=$HaUtEuR_MiRe b=10`    #
                                        set                 HaUtEuR_MiRe=`$xcg/TROQ.01$X x=$HaUtEuR_MiRe origine=$Hmin extremite=$Hmax`

                                        $xci/mire$X         A=$NOIR                                                                     \
                                                            absolue=VRAI generale=VRAI                                                  \
                                                            h=$HaUtEuR_MiRe                                                             \
                                                                                                                        $formatI  |     \
                                        $xci/vraies_C$X     p=$Palette                                                                  \
                                                            R=$ImAgE_R.mire                                                             \
                                                                                                                        $formatI
                                        # L'insertion de la mire dans l'image du noyau a ete introduite le 20210314110207...          #

                                        execRVB             $xci/cache$X        A=$ImAgE_R%s                                            \
                                                                                M=$ImAgE_R.bordures                                     \
                                                                                R=$ImAgE_R.noyau%s                                      \
                                                                                                                        $formatI
                                        execRVB             $xci/cache$X        A=$ImAgE_R.liens                                        \
                                                                                M=$ImAgE_R.noyau%s                                      \
                                                                                R=$ImAgE_R.noyau%s                                      \
                                                                                                                        $formatI
                                        execRVB             $xci/cache$X        A=$ImAgE_R.mire%s                                       \
                                                                                M=$ImAgE_R.noyau%s                                      \
                                                                                R=$ImAgE_R.noyau%s                                      \
                                                                                                                        $formatI

                                        v                   $ImAgE_R.noyau
#20210314110207____:                                        v                   $xiio/MIRE p=$Palette                                 #
                                        # Et enfin, visualisation du noyau de convolution joliment presente, la visualisation de      #
                                        # la palette de coloriage des niveaux du noyau a ete introduite le 20210314104512...          #

                    else
#20210315131121____:                         EROR      "Le programme '$Programme' semble ne pas utiliser de noyau de convolution."    #
                                        EROR      "Le programme '$Programme' semble ne pas utiliser de noyau de convolution \c"
                                        echo      "ou bien il en utilise en, mais il est vide."
                    endif

                    unset               Fsize

                    FilSTmpE            ImAgE_R
                    FilSTmpE            FCoOrDoNnEeS
else
                    EROR      "Le programme '$Programme' n'existe pas."
endif



Copyright © Jean-François Colonna, 2021-2021.
Copyright © CMAP (Centre de Mathématiques APpliquées) UMR CNRS 7641 / Ecole Polytechnique, 2021-2021.