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.
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