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