#!/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