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