#!/bin/csh
#######################################################################################################################################
# #
# E X T R A C T I O N D E T O U S L E S C O N T O U R S D ' U N E I M A G E : #
# #
# #
# Utilisation : #
# #
# $xci/contours.11$Z <image> <contours> [<seuil> [<liste_les_contours> [<G> [<pas> [<Ex> [<Tx> [<Ey> [<Ty>]]]]]]]] #
# #
# #
# Author of '$xci/contours.11$Z' : #
# #
# Jean-Francois Colonna (LACTAMME, AAAAMMJJhhmmss). #
# #
#######################################################################################################################################
set imageA=$1
set imageR=$2
set SeuilContours=$3
set ListerContours=$4
set CentreGravite=$5
set PasContours=$6
set EchelleX=$7
set TranslationX=$8
set EchelleY=$9
set TranslationY=$10
setArgum SeuilContours $GRIS_4
# Seuil d'extraction des contours... #
setArgum ListerContours "VRAI"
# Afin de lister les contours sous la forme {x,y}. #
setArgum CentreGravite "FAUX"
# Pour editer les coordonnees du centre de gravite de chaque contour (cette possibilite fut #
# introduite le 20051207161319)... #
if ("$PasContours" == "$K_VIDE") then
#20051207161319____: set PasContours=4 #
set PasContours=1
# Pas de parcours des contours. #
else
endif
setArgum EchelleX 1.0
# Echelle des coordonnees 'X'.. #
setArgum TranslationX 0.0
# Translation des coordonnees 'X'.. #
setArgum EchelleY 1.0
# Echelle des coordonnees 'Y'.. #
setArgum TranslationY 0.0
# Translation des coordonnees 'Y'.. #
#20051207165125____:set NiveauContours=$GRIS_4 #
@ NiveauContours = $SeuilContours + 1
set NiveauRempli=$GRIS_8
FileTmpB imageAT
$xci/cadre$X \
A=$imageA \
niveau=$NOIR \
epaisseur=1 \
R=$imageAT \
$formatI
# Definition de l'image courante dans laquelle on va progressivement supprimer des #
# contours remplis, mais en ayant enleve au prealable le tour de l'image. ATTENTION, on ne #
# peut pas reduire a 0 l'epaisseur du cadre '$NOIR' sous peine de voir boucler ce processus. #
# En effet, '$xci/contours.11$X' peut recuperer des contours "lineaires" colles a l'un des #
# bords de l'image ; '$xci/contours.12$X' ne remplit alors rien, et le processus se met #
# a boucler, puisque l'image courante '$imageAT' (a laquelle on soustrait les remplissages) #
# n'evolue alors plus... #
$xci/init$X \
niveau=$NOIR \
R=$imageR \
$formatI
# Initialisation de l'image Resultat contenant les contours remplis qui ont ete extraits... #
FileTmpB imageC1
FileTmpB imageC2
FileTmpB FileT
set Iterer=$EXIST
# Afin de boucler sur l'extraction de tous les contours. #
set Numero1=1
set Numero=$Numero1
# Afin de compter les contours. #
while ($Iterer == $EXIST)
set Arguments="A=$imageAT seuil=$SeuilContours pas=$PasContours niveau=$NiveauContours R=$imageC1"
# Arguments necessaires a '$xci/contours.11$X'. #
if ("$ListerContours" == "VRAI") then
if ($Numero > $Numero1) then
saut
else
endif
echo "CONTOUR=""$Numero"
# Edition, si necessaire, du numero de contour courant... #
else
endif
$xci/contours.11$X \
$Arguments \
points_contour=$ListerContours \
centre_gravite=$CentreGravite \
EX=$EchelleX TX=$TranslationX \
EY=$EchelleY TY=$TranslationY \
point_interieur=FAUX \
$formatI
# Extraction du contour courant avec edition eventuelle de la liste des points extraits du #
# contour courant avec leur mise a l'echelle eventuelle... #
$xci/contours.11$X \
$Arguments \
points_contour=FAUX \
centre_gravite=FAUX \
point_interieur=VRAI \
EX=1.0 TX=0.0 \
EY=1.0 TY=0.0 \
$formatI \
>& $FileT
set PointInterieur="`$CA $FileT`"
$DELETE $FileT
# Recuperation des coordonnees {x,y} d'un point interieur au contour 'v $imageC1'. #
$xci/contours.12$X \
A=$imageC1 \
seuil=$SeuilContours \
niveau=$NiveauRempli \
$PointInterieur \
R=$imageC2 \
$formatI
# Remplissage du contour courant. #
$xci/or_02$X \
A1=$imageR \
A2=$imageC2 \
R=$imageR \
$formatI
# Cumul des contours remplis... #
$xci/complement$X \
A=$imageC2 \
$formatI | \
$xci/and$X \
A2=$imageAT \
R=$imageAT \
$formatI
# Suppression du contour courant rempli de l'image courante. #
$xci/extrema$X \
A=$imageAT \
coordonnees=FAUX \
minimum=FAUX \
moyenne=FAUX \
maximum=VRAI \
$formatI \
>& $FileT
set Maximum="`$CA $FileT`"
$DELETE $FileT
# Recuperation du maximum de l'image courante. #
if ($Maximum < $SeuilContours) then
set Iterer=$NEXIST
# Afin d'arreter de boucler car il n'y a plus de contours a extraire... #
else
@ Numero = $Numero + 1
# Pour compter les contours extraits... #
endif
end
FileTmpE imageAT
FileTmpE imageC1
FileTmpE imageC2
FileTmpE FileT