IMAGES

GÉNÉRALITÉS
CONSTRUCTIONS
AFFICHAGE
CONVOLUTIONS
TRANSFORMATIONS GÉOMÉTRIQUES
LES CONTINUITÉS
COULEURS
DYNAMIQUE
MORPHINGS
PALETTE
IMAGE 3D
HAUTE DÉFINITION
PRIMITIVES GRAPHIQUES 2D
PRIMITIVES GRAPHIQUES 3D
Voir aussi

















































GÉNÉRALITÉS

         Par défaut anyflo est lancé en mode graphic sur une station supposée posséder une carte graphic. L´image affichée sur l´ecran est appelée l´image courante.
         D´autres images, en mémoire, peuvent être construites, elles sont référencées par leur identificateur id: image(id).
         Anyflo, lancé avec les options gra=0 et win=x,y, peut tourner sur une station sans carte graphic, l´image courante (de numéro 0 et de dimensions x,y) et d´autres images sont alors toutes en mémoire centrale.
         Par défaut les affichages sont réalisés dans l´image courante, qui peut être traitée puis stockée sur le disque. En mode no graphic cettee image porte le numéro 0.
         On peut redéfinir la window par:
         window interaction number(1)
         Ou: window number(1)=x1,y1,x2,y2
         On peut créer d´autres window:
         Interactivement: window interaction number(num)
         Ou: window number(num)=x1,y1,x2,y2

CONSTRUCTIONS

Générations

generate image.
generate image(id);
         Copie l´image courante dans l´image id.
generate(mouse)image;
         Permet de désigner à la souris 2 coins opposés du cadre à copier.

Écritures sur le disque

write image(id)name("nnn.eee")
         Gare l´image id dans le fichier nnn.eee selon l´ extension eee.

Lectures

read image(id)name("nnn.eee")
         Lit l´image nnn.eee dans l´image id selon l´ extension eee.
Si id est absent l´image est lue dans la fenêtre courante, il faur faire a href="displ.1.htm#image">displ image´ pour la voire.

Interpolations

interpol(k) image(n1,n2,n3);
         Calcule l´image n3 = (1 - k) * n1 + k * n2

Écriture dans une image en mémoire

         Il est possible d´écrire des configurations simples de pixels dans une image en mémoire:
         screen image(num); Efface l´image num
         rectangle(x1,y1,x2,y2) image(num); Affiche un rectangle dans l´image num
         disk(x,y,r) image(num); Trace un disque dans l´image num
         etc...
         Sans graphic (options de lancement: g=0 m=1, ou interactivement: ´no graphic´ et ´yes memory´) les affichages sont écrits dans l´image numéro 0 qui est en mémoire centrale

Conversions

Le fichier env/convert.func contient 2 fonctions:
convert(nom1,ext1,im1,im2,nom2,ext2)
Convertit nom1[im1,im2].ext1 en nom2[im1,im2].ext2 Exemples:\n"; convert(\"A\",\"jpg\",1000,2000,\"B\",\"bmp\")
         Convertit A[1000,2000].jpg en B[1000,2000].bmp
convert(\"A\",\"jpg\",1000,2000,\"B\",\"raw\")
         Convertit A[1000,2000].jpg en B[1000,2000].raw
Si nom1=\"def\": Valeurs par defaut (modifier dans la fonction convert()

raw(nom1,ext1,im1,im2,nom2)
convertit nom1[im1-im2].ext1 en nom2[im1-im2].raw en format 1/2
Utile pour la fonction
interaction read image
         Qui permet de jouer un film en temps réel.

AFFICHAGE

Affichege

displ image.
displ image(id);
         Affiche l´image id.

Détourage

displ back image(id);
         Affiche les pixels de l´image id de couleur différente de celle du fond.

CONVOLUTIONS

Lissages

smooth image(id);
         Réalise une convolution dans la fenêtre courante de l´image id.

Matrices programmables

smooth(k00,k01,...,k0n,k10,k11,...,knn);
         Réalise une convolution de matrix n*n (coefficients kij) dans le fenêtre courante de l´image courante
smooth(k00,k01,...,knn) normal;
         Réalise une convolution de matrix n*n (coefficients kij divisés par leur sum) dans la fenêtre courante de l´image courante
Exemple: smooth(1/16,1/8,1/16,1/8,1/4,1/8,1/16,1/8,1/16) image;

Convolution

image(xa1,ya1,xa2,ya2)image(xb1,yb1,xb2,yb2);
         Réalise une convolution de la fenêtre (xa1,ya1,xa2,ya2) dans la fenêtre (xb1,yb1,xb2,yb2) de l´image courante
image video
         Convole l´image courante dans une fenêtre de définition vidéo. Il est possible de préciser des numéros d´images, par exemple: image video number(-1): Convole l´image courante dnas l´image numéro -1 de définition vidéo

TRANSFORMATIONS GÉOMÉTRIQUES

Des commandes telles que generate image read image primitive image permettent de construire d´autres images.
         Des commandes telles que
rotx image
roty image
rotz image
smooth image
tran image
permettent de traîter ces images

LES CONTINUITÉS

Le problème de "coutures" des mappes

         Lorsque l´on affecté une texture à une surface fermée (par exemple une surface de révolution), une discontinuité de la texture apparait à la jonction (car le 1er et le dernier points d´une section horizontale, géométriquement identiques prennent la couleur de la texture respectivement sur le bord left et le bord droit de la texture)
         La discontinuité disparait si on rend la texture "périodique", c´est à dire si ses bords gauceh et droit sont identiques.
         Le même problème a lieu pour une surface fermée verticalement (par exemple un tore engendré par un cercle tournant autour des y), il faudra alors rendre le bord bas et le bord haut de la texture identiques
         Pour les mappes de reflexion, la texture est placée sur une sphère englobant la scène et des déformations apparaissent aux poles. Le problème disparait si on applique à la texture la déformatiuon inverse

Période en x

rotx image ang(an);
         Rend l´image courante périodique en x, l´angle d´ouverture an mesurant la partie de l´image modifiée (PI modifie toute l´image)
rotx image(num) ang(an);
         Rend l´image num périodique en x
Exemple:
         rotx image(1) ang(PI/4); Rend l´image 1 périodique en x en ne modifiant que le quart left et le quart right

période en y

roty image ang(an);
         Rend l´image courante périodique en y, l´angle d´ouverture an mesurant la partie de l´image modifiée (PI modifie toute l´image)
roty image(num) ang(an);
         Rend l´image num périodique en y
Exemple:
         roty image ang(PI/2); Rend l´image courante periodique en y en ne modifiant que la moitié left et la moitié right

Déformation sphérique

sphere image;
         Déforme l´image courante pour la mapper (sans déformation) sur une sphère (utile pour le mapping de réflexion) sphere image(num);
         Rend l´image num sphérique

COULEURS

Aléatoire

alea image

Dilatation

dila image

Rendre une texture "floue"

6-3-1 Principe

         texture vol(num_vol)=num_texture,type,r,v,b,k;
         Définit sur le volume num_vol la texture de numéro num_texture
         Si type=2: Mappe 2d
         (r,v,b) mesure l´influence de la couleur du volume sur la texture
         Si k=1: Les pixels de la texture qui sont de la couleur du back ne seront pas affichés.
         En disposant une distribution aléatoire de pixels de la couleur du back sur la texture on rend don celle-ci "transparente" à l´affichage
alea back image coe(c);
         Affiche des pixels aléatoires de la couleur du back en proportion c (entre 0 et 1)
alea back image number(num) coe(c);
         Pour traîter l´image numéro num
alea anc back image coe(c);
         Bruitage reproductible
alex image coe(c);
         Affiche des pixels de la couleur du back sur des verticales en modifiant la proportion c de l´image, maximum sur les bords left et right puis décroissant vers le center
alex anc image coe;
         Bruitage reproductible
aley image coe(c);
         Affiche des pixels de la couleur du back sur des horizontales en modifiant la proportion c de l´image, maximum sur les bords bas et haut puis décroissant vers le center
aley anc image coe;
         Bruitage reproductible

Seuillage

adjust(r1,v1,b1,r2,v2,b2,rs,vs,bs) image;
         Seuille inférieurement et supérieurement l´image:
         Si k=ks k=k2
adjust(r1,v1,b1,r2,v2,b2,rs,vs,bs) image(num);
         Traîte l´image numéro num
adjust(l1,l2,ls) luminance image;
         Seuille inférieurement et supérieurement l´image en calculant sa luminance:
         Si l

MORPHINGS

Principe

         Un algorithme de morphing consiste à définir des zones d´influence sur l´image, chaque pixel étant déplacé en composant ces influences.
         Pratiquement on prent une série de couples de segments auquels sont affectés des coefficients d´influence

Morphing dans anyflo

morphing image(n1) line(w1) image(n2) line(w2) coe(a,b,c);
         Réalise un morphing de l´image n1 a l´image n2 w1=x1,y1,x2,y2,... sont des segments définies sur l´image n1 w2=x1,y1,x2,y2,... sont des segments définies sur l´image n2
Remarques:
         1) Il doit y avoir autant de segments dans n1 et n2
         2) Si ´coe(a,b,p)´ est présent apres un ´segment(u)´, les coefficients (a, b, p) permettent de moduler l´influence du segment u par la formule:
         [(long^p)/(a+dist)]^b
                  avec long = longueur du segment
         et dist = distance du pixel au segment
         Par défaut on a: a = 0, b = 0 et p = 1
         Si a=0: Les pixels sur le segment sont invariants
         Si p et b > 1: Augmente l´influence du segment
         Si p et b < 1: Diminue l´influence du segment
         3) Si n1 est absent (ou même si image est absent)l´image origine est l´image courante
         4) Si n2 est absent (ou même si image est absent)l´image résultat est l´image courante
         5) Si image(n1) et image(n2) sont absents, le morphing est réaslisé de l´image courante dans elle-même
Exemples:
         1) morphing line(-200,0,200,0) line(-200,100,200,100); Réalise une translation verticale de l´image courante
         2) morphing image(1) line(0,0,100,0) image(2) line(0,0,0,-100); Réalise une rotation de l´image 1 dans l´image 2

morphing image line frame

morphing image(n1) line(w1) image(n2) image(w2) frame(x1,y1,x2,y2);
         Réalise un morphing de l´image n1 à l´image n2, en gardant les bords du frame (x1,y1,x2,y2) invariants
Remarques:
         1) Si (x1,y1,x2,y2) est absent il est pris égal à la fenêtre courante
         2) ´morphing image line image line coe frame´ existe

Morphing interactif

(Voir le mode ´palette´)

PALETTE

         La commande palette passe en mode interaction à la souris, un menu (clic droit) permet alors de traîter l´image courante.
         Cette palette est programmable, c´est à dire que le menu peut être arbitrairement enrichi.

IMAGE 3D

Principe

         Une image est une fonction appliquant un rectangle [0,nx-1]*[0,ny-1] du plan dans un cube [0,1]*[0,1]*[0,1] de l´espace 3D (couelur RGB)
         pixel(x,y) -> couleur(r,v,b) ou dans l´espace (teintes,saturation,valeur)
         pixel(x,y) -> (t,s,v)
         En définissant plusieurs plans de pixels on peut créer une image 3D pouvant servir de texture 3D ou d'espace dans lequel il est possible de voyager en l´interectant avec un plan (considéré comme plan des pixel d'une image 2D), ou par une surface quelconque.
Voir read image name pour construire une telle image à partir des images successives d´une animation.

Interprétation géométrique

adjust(cr,cv,cb) vol(n1) image(n2);
         Le z des points du volume n1 sont modifiés selon la formule:
         z -= (cr * r + cv * v + cb * b) / 3
         avec (r,v,b) = couleur average de l´image numéro n2 dans une fenêtre contenant les voisins de ce point
Si n2 est absent, l´image courante est traîtée
adjust vol image col;
         Chaque point traîté prend la couleur de l´image adjust(ct,cs,cv) vol(n1) image(n2) hsv
         Le z des points du volume n1 sont mofifiés selon la formule:
         z -= (ct * t + cs * s + cv * v) / 3
         avec (t,s,v) = (teinte,saturation,valeur) moyennes de l´image dans une fenêtre contenant les voisins de ce point
adjust vol image limit;
         Le volume est ajusté dans la fenêtre de l´image contenant des pixels différents du back
adjust vol image precision(eps);
         La comparaison se fait avec une approximation de eps
adjust vertex(s) vol image;
         Seuls les points numéros s seront traîtés
         Exemple:
         adjust(100,50,30) vertex[100,200] vol(1) image
adjust("x",crx,cvx,cbx,"y",cry,cvy,cby,"z",crz,cvz,cbz)vol image;
         Le (x,y,z) des points du volume sont modifiés selon ls formules:
         x -= (crx * r + cvx * v + cbx * b) / 3
         y -= (cry * r + cvy * v + cby * b) / 3
         z -= (crz * r + cvz * v + cbz * b) / 3
adjust("toto") vol image;
         Le (x,y,z) des points du volume sont modifiés par la fonction utilisateur de nom toto dans laquelle on peut utiliser les commandes suivantes:
         p=poi: Récupere les coordonnées espace du point affiché
         k=col: Récupere la couleur (r,v,b) du point écran
         t=hsv(k): Récupere le (t,s,v) du point écran
         p=fonction(p,k): Calculer la nouvelle position
         poi(p): Valider cette position
adjust exec(c,v1,v2,...) vol image;
         La fonction adjust_vol_image_utilisateur sera executée avec le code c et les valeurs v1, v2, ... Il sera nécessaire de modifier cette fonction dans le fichier utilb.c et de relinker anyflo (see ´manuel.applic.htm´).
Remarques:
         1) Si (cr,cv,cb) est absent il vaut (100,100,100) par défaut
         2) Si n2 est absent ou nul, l´image courante est traîtée
         3) Cette fonction permet de "monter" un relief à partir d´une image 2D
         4) Toutes les formes précédentes sont combinables
         5) Pratiquement: Construire une image (synthétisée ou digitalisée) Construire un volume (de préférence une grid fine view de face) Invoquer adjust vol image
         6) Exemples: adjust(100,50,-50) vol(1) image adjust(100,70,40) vol(1) col limit vertex[12,120] image(1)

Interprétation dynamic

field image(n1)=n2,kr,kv,kb,dx,dy,dz;
         En animation (see ´animate´), si le volume n1 (ou ses sommets) est muni d´une mass, chacun de ses sommets subira un field de force de direction (dx,dy,dz) et d´amplitude (kr*r,kj*v,kb*b), avec (r,v,b) = couleur au pixel correspondant de l´image n2
         Le volume n1 doit être isomorphe à une grid (grid, ball, rev, geod, filet, ...)
         Permet de générer un field à partir d´une image. Si celle-ci est animée, le field est variable et donc l´animation d´objets placés dans ce field est dynamic

HAUTE DÉFINITION

         Lancer anyflo avec l´option:
         anyflo hau=2
         L´image en mémoire centrale a 4 fois la taille vidéo. Lors d´un ´write image´, cette image sera convolée à la taille vidéo.
         On peut préciser la taille de l´image antialiasée (dimx,dimy) et le facteur d´antialiasage k:
         anyflo x=dimx y=dimy gra=0 mem=1 hau=k

Voir aussi

image