#!/bin/csh ####################################################################################################################################### # # # R E D U C T I O N D ' U N E N S E M B L E D ' I M A G E S D E F O R M A T S Q U E L C O N Q U E S : # # # # # # Utilisation : # # # # $xci/reduction$Z <imageR> {<imageA> <palette>} # # # # (en fausses couleurs, chaque image de la liste doit etre suivie de sa palette) # # # # $xci/reduction$Z <imageR> {<imageA>} # # # # (cas des vraies couleurs) # # # # # # Nota : # # # # Il est rendu possible le 20180212154819 # # de pouvoir redimensionner les images de la # # facon suivante : # # # # setenv METHODE_reduction ... # # $xci/reduction$Z <imageR> [<imageA> [<palette>]] # # unsetenv METHODE_reduction # # # # qui permet donc de definir '$Fmethode' par # # la suite. # # # # Ce passage "exotique" d'argument a cette # # commande '$xci/reduction$Z' est lie au # # fait qu'elle recoit un nombre variable # # d'arguments... # # # # # # Nota : # # # # L'option "moyenne=VRAI" est positionnee # # par defaut, mais (malheureusement) des qu'une # # image en fausses couleurs est detectee, elle # # passe a "moyenne=FAUX". Il est donc suggere # # de ne traiter que des images en vraies couleurs # # ('v $xiav/$Fnota .xiav.INFINI.12.R16') afin de # # beneficier de la meilleure qualite... # # # # # # Nota : # # # # Il est possible de demander a ce qu'une # # interpolation rajoutant 3 ($Pas-1) images # # intermediaires soit faite a condition de # # faire la sequence suivante : # # # # setenv INTER_reduction $EXIST # # $xci/reduction$Z <imageR> [<imageA> [<palette>]] # # unsetenv INTER_reduction # # # # ce passage "exotique" d'argument a cette # # commande '$xci/reduction$Z' est lie au # # fait qu'elle recoit un nombre variable # # d'arguments... # # # # Ceci est utilisable pour generer des sequences # # d'images "continues" exploitables ensuite pour # # faire, par exemple, des boucles a l'aide de '$MPEG' # # ('v $xiirv/DEMO.31$R64'). # # # # # # Author of '$xci/reduction$Z' : # # # # Jean-Francois COLONNA (LACTAMME, AAAAMMJJhhmmss). # # # ####################################################################################################################################### set liste="$*" set formatR=`echo $formatI | $SE -e "s/=/R=/g"` # Definition du format de l'image Resultat. # if ($?METHODE_reduction == $NEXIST) then set Fmethode=7 # Choix de la methode de '$xci/format.01$X'. # else set Fmethode=$METHODE_reduction # Possibilite introduite le 20180212154819... # endif set nomDT=`GetXTmp $D` $MKDIR $nomDT # Creation d'un directory temporaire. ATTENTION, il est impossible d'utiliser le nom 'nomD' # # car en effet l'alias 'EROR' ci-dessous l'utilise via les alias 'path_f' et 'direct'... # set nomI=$nomDT$K_sepS`Genom5`$K_sepP # Creation du nom des images intermediaires. Avant le 19970319161312, c'etait "images" # # qui etait utilise, mais cela avait le dramatique inconvenient de la non "reentrance"... # set premier=$EXIST # Indicateur precisant si l'on recherche le premier element de la liste ou les suivants... # set numero0=0 set numero=$numero0 # Numero de l'element courant dans la liste... # if ($?INTER_reduction == $NEXIST) then set Pas=1 # Lorsqu'il n'y a pas d'interpolation, le pas est egal a 1. # else set Pas=4 # Sinon, il est strictement superieur... # saut echo "ATTENTION, c'est le processus avec interpolation qui est actif." saut endif set Ipalette=$NEXIST # Indicateur precisant si l'on recherche actuellement un palette... # set moyenne=VRAI set maximum=FAUX # A priori, la reduction se fera avec un moyennage, mais des qu'une image fausses couleurs # # est trouvee, ce moyennage est inhibe (voir les commentaires de 'v $xci/$reduction$K'). # foreach element ($liste) if ($premier == $EXIST) then set imageR=$element # Le premier element de la liste est le nom de l'image Resultat. # set premier=$NEXIST # Indicateur precisant si l'on recherche le premier element de la liste ou les suivants... # else # Les elements suivants donnent les images Argument a reduire... # set GenImage=$NEXIST # A priori, on ne genere pas d'image... # if ($Ipalette == $NEXIST) then # Cas ou l'on recherche une image : # set imageA=$element # Recuperation du nom d'une image Argument... # set Numero=`$xci/nombres$X premiere=$numero derniere=$numero` # Generation du numero de l'image... # if ( ( (-e $imageA$ROUGE) && (-e $imageA$VERTE) && (-e $imageA$BLEUE) \ ) \ && (! -e $imageA) \ ) then # Cas ou l'image courante est en vraies couleurs sans ambiguite : # set Ipalette=$NEXIST # Indicateur precisant que l'element suivant ne doit pas etre une palette (on notera qu'il # # a deja cette valeur...). # else if ( ( (! -e $imageA$ROUGE) || (! -e $imageA$VERTE) || (! -e $imageA$BLEUE) \ ) \ && (-e $imageA) \ ) then # Cas ou l'image courante est en fausses couleurs sans ambiguite : # set Ipalette=$EXIST # Indicateur precisant que l'element suivant doit etre une palette... # else if ( ( (! -e $imageA$ROUGE) || (! -e $imageA$VERTE) || (! -e $imageA$BLEUE) \ ) \ || (! -e $imageA) \ ) then EROR "L'image '$imageA' n'existe pas." else # Cas ou il y a ambiguite : # EROR "L'image '$imageA' existe en fausses et en vraies couleurs." answero "Doit-on alors choisir la version vraies couleurs ?" #20030418104108____: if ( ("$answer" == "oui") \ # #20030418104108____: || ("$answer" == "yes") \ # #20030418104108____: || ("$answer" == "$K_VIDE") \ # #20030418104108____: ) then # if ("$answer" == "$Reponse_OUI") then echo "Version vraies couleurs de l'image '$imageA'." set Ipalette=$NEXIST else echo "Version fausses couleurs de l'image '$imageA'." echo "ATTENTION, il faut donc qu'un nom de palette suive." set Ipalette=$EXIST endif endif endif endif if ($Ipalette == $NEXIST) then # Cas ou l'image courante est en vraies couleurs sans ambiguite : # Format $imageA$ROUGE set FormatR="$Format" Format $imageA$VERTE set FormatV="$Format" Format $imageA$BLEUE set FormatB="$Format" set ImAgER=`echo $FormatR | $GRE "EROR"` set ImAgEV=`echo $FormatV | $GRE "EROR"` set ImAgEB=`echo $FormatB | $GRE "EROR"` if ( ("$ImAgER" == "$K_VIDE") \ && ("$ImAgEV" == "$K_VIDE") \ && ("$ImAgEB" == "$K_VIDE") \ ) then if ( ("$FormatR" == "$FormatV") \ && ("$FormatR" == "$FormatB") \ && ("$FormatV" == "$FormatB") \ ) then SformatI eval "$Format" $xci/format.01$X A=$imageA$ROUGE \ methode=$Fmethode \ $formatI \ R=$nomI$Numero$ROUGE \ $formatR $xci/format.01$X A=$imageA$VERTE \ methode=$Fmethode \ $formatI \ R=$nomI$Numero$VERTE \ $formatR $xci/format.01$X A=$imageA$BLEUE \ methode=$Fmethode \ $formatI \ R=$nomI$Numero$BLEUE \ $formatR # Recuperation de l'image vraies couleurs. # set GenImage=$EXIST # On vient de generer une image... # RformatI else endif else endif else # Cas ou l'on l'image courante est en fausses couleurs : il faut attendre la palette... # endif @ numero = $numero + $Pas # Numero de l'image courante dans la liste qui n'est incremente bien entendu que lorsque # # l'on ne recherche pas une palette... # else set paletteA=$element # Recuperation du nom d'une palette Argument... # set VaLiDeP=`GetPath $paletteA` if ("$VaLiDeP" != "$xiP") then # Validation introduite le 20120202153546 lors du calcul de 'v $xiav/INFINI.13$R16'... # EROR "La palette '$paletteA' n'est pas dans '"'$xiP'"' parce qu'elle est peut-etre \c" ECHO "en realite une image et que celle qui la precede est en fausses couleurs \c" ECHO "alors que sa palette a ete omise." else endif unset VaLiDeP Format $imageA set ImAgE=`echo $Format | $GRE "EROR"` if ("$ImAgE" == "$K_VIDE") then SformatI eval "$Format" $xci/format.01$X A=$imageA \ methode=$Fmethode \ $formatI \ R=$nomI$Numero \ $formatR RformatI $xci/vraies_C$X A=$nomI$Numero p=$paletteA \ RR=$nomI$Numero$ROUGE RV=$nomI$Numero$VERTE RB=$nomI$Numero$BLEUE \ $formatI # Recuperation de l'image fausses couleurs... # set GenImage=$EXIST # On vient de generer une image... # else endif set Ipalette=$NEXIST # Indicateur precisant que l'element suivant doit etre une image... # set moyenne=FAUX set maximum=FAUX # Des qu'une image fausses couleurs est trouvee, le moyennage est inhibe (voir les # # commentaires de '$xci/$reduction$X'), et de plus on demande a prendre alors le point # # courant (et non point le maximum) ce qui garantit que l'on selectionne le meme point sur # # trois composantes... # endif if ($?INTER_reduction == $EXIST) then # Cas ou l'interpolation est demandee : # if ($GenImage == $EXIST) then # Cas ou une image vient effectivement d'etre generee : # if ($?numeroPr == $EXIST) then # Cas ou il y a bien une image precedente : # @ numeroPr1 = $numeroPr + 1 @ numero1 = $numero - $Pas @ numero1 = $numero1 - 1 set ListeInter=`$xci/nombres$X premiere=$numeroPr1 derniere=$numero1` # Generation des numeros d'images interpolees... # set NumeroPr=`$xci/nombres$X premiere=$numeroPr derniere=$numeroPr` # Generation des numeros d'images interpolees... # set Divis=$Pas set Multi=1 # Initialisation du processus de generation de {alpha,beta}. # foreach NumeroI ($ListeInter) @ Compl = $Divis - $Multi set Alpha=`$xcg/scale$X nombre=1.0 diviseur=$Divis multiplicateur=$Compl` set Beta=`$xcg/scale$X nombre=1.0 diviseur=$Divis multiplicateur=$Multi` @ Multi = $Multi + 1 # Generation de {alpha,beta}. # $xci/interpole.01$X alpha=$Alpha \ A1=$nomI$NumeroPr$ROUGE \ beta=$Beta \ A2=$nomI$Numero$ROUGE \ R=$nomI$NumeroI$ROUGE \ $formatI \ $formatI $xci/interpole.01$X alpha=$Alpha \ A1=$nomI$NumeroPr$VERTE \ beta=$Beta \ A2=$nomI$Numero$VERTE \ R=$nomI$NumeroI$VERTE \ $formatI \ $formatI $xci/interpole.01$X alpha=$Alpha \ A1=$nomI$NumeroPr$BLEUE \ beta=$Beta \ A2=$nomI$Numero$BLEUE \ R=$nomI$NumeroI$BLEUE \ $formatI \ $formatI # Interpolation entre l'image precedente '$numeroPr' et l'image courante '$numero'... # end else endif @ numeroPr = $numero - $Pas # Pour l'interpolation suivante... # else endif else endif endif end if ($numero <= 4) then #AAAAMMJJhhmmss____: set reduction="reduction_04" # set reduction="reduction_16" # Choix du programme de reduction. On notera l'usage de 'reduction_16' et non pas de # # 'reduction_04' afin de rendre compatible la taille physique des images obtenues et # # permettre ainsi des decoupages et des collages compatibles... # else if ($numero <= 16) then set reduction="reduction_16" # Choix du programme de reduction. # else if ($numero <= 64) then set reduction="reduction_64" # Choix du programme de reduction. # else EROR "Il y a plus de 64 images," if ($?INTER_reduction == $EXIST) then EROR "Ce qui peut etre normal, l'option '$K_DOLLAR""INTER_reduction' etant active." else endif set reduction="reduction_64" # Choix du programme de reduction (sachant que l'on va perdre les images de numero superieur # # a 64...). # endif endif endif #20030912____:$xci/$reduction$X A=$nomI premiere=$numero0 pas=1 erreur=FAUX postfixe=$ROUGE moyenne=$moyenne maximum=$maximum \ # #20030912____: R=$imageR$ROUGE $formatI # #20030912____:$xci/$reduction$X A=$nomI premiere=$numero0 pas=1 erreur=FAUX postfixe=$VERTE moyenne=$moyenne maximum=$maximum \ # #20030912____: R=$imageR$VERTE $formatI # #20030912____:$xci/$reduction$X A=$nomI premiere=$numero0 pas=1 erreur=FAUX postfixe=$BLEUE moyenne=$moyenne maximum=$maximum \ # #20030912____: R=$imageR$BLEUE $formatI # $xci/$reduction$X A=$nomI premiere=$numero0 pas=1 ErreurLecture=FAUX postfixe=$ROUGE moyenne=$moyenne maximum=$maximum \ R=$imageR$ROUGE $formatI $xci/$reduction$X A=$nomI premiere=$numero0 pas=1 ErreurLecture=FAUX postfixe=$VERTE moyenne=$moyenne maximum=$maximum \ R=$imageR$VERTE $formatI $xci/$reduction$X A=$nomI premiere=$numero0 pas=1 ErreurLecture=FAUX postfixe=$BLEUE moyenne=$moyenne maximum=$maximum \ R=$imageR$BLEUE $formatI # Et reduction finale. ATTENTION, l'option : # # # # moyenne=VRAI # # # # provoquera en general sur les images en fausses couleurs des artefacts ; prenons par # # exemple le cas de deux zones contigues, l'une de couleur verte et l'autre de couleur # # magenta lorsqu'elle est visualisee avec '$xiP/cercle.32'. Une fois separees en vraies # # couleur, la composante $VERTE contiendra la zone verte anterieure, mais la zone qui lui # # etait contigue (et magenta) deviendra noire (dans la composante $VERTE) ; la procedure # # de moyennage va donc introduire un lisere fonce autour de la zone verte... Alors quelle # # est la solution ? Faire : # # # # moyenne=FAUX # # # # resoudrait le probleme, mais crerait un probleme de qualite pour les images en vraies # # couleurs. La solution (provisoire ?) est d'introduire la variable '$moyenne' qui inhibe # # le moyennage des qu'une image en fausse couleur est rencontree... # $DELETE $nomI* $RMDIR $nomDT unset nomDT # Nettoyage final... #