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