[LinuxFocus-icon]
Sommaire  |  Carte  |  Index  |  Recherche

Nouvelles | Archives | Liens | A propos
Ce document est disponible en: English  Castellano  Deutsch  Francais  Portugues  Russian  Turkce  

convert to palmConvert to GutenPalm
or to PalmDoc

[Photo de l'auteur]
par Yves Ceccone

L´auteur:

Photographe de formation, reconverti dans l'infographie,
n'a plus lâché la souris depuis.



Sommaire:

 

XMRM : Morphing sous Linux

Résumé:

XMRM (Multi resolution Morphing pour X) est un programme de morphing permettant à partir de 2 images de créer une vidéo au format mpeg ou l'une des images se transforme progressivement (suivant un nombre important de paramètres et de possibilités) en la deuxième. Cet article propose la description des principales fonctions du logiciel (grâce à la très complète documentation en anglais disponible sur le site de XMRM) ainsi que la description de la fabrication d'une petite animation qui montre qu'on peut obtenir un résultat intéressant très facilement.



 

Installation

La version utilisée dans cet article est au format rpm (sur une RedHat 6.0) mais on trouve aussi sur le site : (http://www.cg.tuwien.ac.at/research/ca/mrm/xmrm.html) les sources à compiler.
En plus du programme lui même pour pouvoir sauvegarder l'animation en mpeg il faudra installer aussi : "tifftopnm" et "ppmtoyuvsplit", qui sont tous les deux dans le package "netpbm01mar94" que l'on trouve ici : ftp://ftp.x.org/contrib/utilities/ ainsi que "mpeg" à cette adresse : ftp://ftp.x.org/contrib/utilities/

 

Principe

Le fonctionnement de XMRM est le suivant : Il faut charger 2 images, une image appelée "source" et une deuxième appelée "destination". Il faut ensuite faire à l'aide de vecteurs un tracé sur chaque image, chaque point d'un tracé sur une image correspondant à un point sur l'autre image. Ce sont ces tracés qui détermineront les contours du morphing. Après avoir choisi le type de morphing, la qualité, le nombre d'étape (frame) ..., on "calcule" l'animation qu'il sera possible de sauvegarder en mpeg.

 

menu, et fonctions principales



Ce menu fait double emploi puisqu'à chaque commande correspond un bouton sur l'interface générale.





Ce menu permet de choisir le type de "petite vague" (traduction littérale), donc de type de transformations, la variété du choix étant à but scientifique : le type "RTS-Transform" est suffisant dans bien des cas, spécialement pour les prévisualisation, pour des résultats de haute qualité choisissez dans la liste, de "Biorthogonal Spline" à "Battle Lemarie" (qui va du plus complexe au plus lent).
Les 3 autres peuvent donner des résultats "marrants" (funny)...





Ce menu permet de masquer ou de montrer les différentes fenêtres de travail.





- Charger l'image source
- Charger l'image de destination

Le format utilisé par XMRM est le TIFF.





- Charger des vecteurs
- Sauvegarder des vecteurs
- Enregistrer sous des vecteurs
- Supprime les vecteurs de l'image source et de destination.





Tous vos réglages incluant les vecteurs, les nom des images les paramètres, etc ... peuvent être sauvegardés, chargés et enregistrés sous.
Les projets sont sauvegardés avec l'extension .prj, les vecteurs sont sauvegardés dans un fichier à part avec l'extension .prj.vec.





Inverse l'image source et de destination ainsi que les vecteurs pour changer le sens du morphing.





Charger une image en noir et blanc pour utiliser la fonction "detail map morph"
Une image couleur sera convertie en noir et blanc.





Morphing de base par le mélange, la fusion de l'image source et celle de destination.





Ce mode de fonctionnement avec une image noir et blanc en plus de l'image source et de destination permet de contrôler la progression de la transformation. Ainsi une zone blanche sur l'image en noir et blanc permettra une apparition rapide des détails et inversement une zone noire une progression lente.





Ici c'est uniquement l'image source qui est déformée en fonction des vecteurs.
Effets surprenant garantis !





Permet de créer une séquence commençant avec les zones les plus détaillées de l'image sources et les moins détaillées de l'images de destination, pour continuer dans le sens inverse et revenir au début pour terminer le cycle.





Dans le mode avancé les "wavelet-functions" peuvent être sélectionnées et réglées séparément, dans le mode de fonctionnement simple c'est le 1 qui est toujours sélectionné :







Le temps de calcul avec cette option "haute qualité" peut être multiplié par 4 ...





Cette option positionne des vecteurs (invisibles) sur les 4 coté des 2 images (source et destination). Cela permet d'éviter la déformation du cadre pendant le morphing.





Si ce bouton est décoché, c'est le morphing conventionnel qui sera utilisé. Cette fonction détermine la valeur de l'image source et de destination pour chaque image composant l'animation.
Lorsqu'il est activé, on utilise alors le "wavelet-transformations mode" plus évolué qui est encore paramétrable avec l'option "Avanced mode".





Morphing progress



Il est possible de modifier la progression du morphing de la façon suivante: l'axe X représente le temps ou la position de l'image dans l'animation, à gauche on a l'image source et à droite celle de destination.
Sur l'axe Y on a en bas l'image source et en haut l'image de destination.
On pourra donc suivant les 3 exemples ci-dessus, avoir une progression régulière, une progression où l'image de destination apparaît vers la fin, et la dernière où on a un effet de boucle.
Pour ajouter ou modifier la position d'un point on utilise le bouton gauche de la souris, et pour en supprimer le bouton droit.



Positionnement des vecteurs

[Positioning the vectors]

Une fois les 2 images chargées, c'est avec les outils set, Edit, delete /vector et set /Line que l'on trace les vecteurs qui décideront des contours pris en compte par le morphing pour chaque image. Plus le nombre de vecteurs est important meilleure sera la qualité du morphing.
Il est possible d'avoir plusieurs tracés par image : par exemple, dans la doc officielle il y a un exemple de morphing avec un ours et un léopard où on a le contour de la tête plus le tracé de chaque oeil et donc 3 tracés par photo.



 

Calcul de l'animation



On décide ici du nombre d'images (frames) qui composera l'animation, ce qui décidera de sa durée (ceci en rapport avec le nombre de frame par seconde) et du rendu (fluide, saccadé ...) de l'animation.





Le nombre de frame par seconde (fps) se programme ici ainsi qu'une éventuelle animation en boucle en activant le bouton "Cycle".






L'option "frame preview" sert à visualiser une image donnée d'une animation qu'on sélectionne par sa position dans l'animation.



 

Sauvegarde de l'animation



"save Pics from animation" sauvegarde chaque frame en un fichier tif, ceci après que l'on ait calculé l'animation. Pour cela il faut d'abord choisir un répertoire et un nom_de_fichier.tif.(la sauvegarde se fera ainsi : nom_de_fichier000.tif; nom_de_fichier001.tif; nom_de_fichier002.tif etc ...)
"Save pics when calculate" sauvegarde ces mêmes fichiers correspondant à chaque frame au format tif, mais en même temps que se calcule l'animation, il faut alors choisir le nom du fichier avant de lancer "calculate". Cette option permet une bien meilleur qualité d'image en ce qui concerne les couleurs.



On obtient cette boite de dialogue en cliquant sur "Execute xmrm_mpeg" où il faudra, avec le bouton "chose start/stop frame" choisir la première et la dernière image de l'animation, puis faire "GO" pour lancer la dernière opération pour obtenir l'animation en mpeg.
On pourra également créer une boucle et lancer mpeg_play sitôt le mpeg créé.


 

Créer rapidement un morphing


Voici d'abord les 2 images que vous pouvez télécharger si vous voulez utiliser les mêmes images que dans l'exemple :
01.tif et 02.tif (90 ko chacune)

[The input files]

Cliquez sur "load Source" et chargez 01.tif puis sur "load destination" et chargez 02.tif.




Avec l'outil "Set vector" faites un tracé autour du bébé.
Cet outil s'utilise en cliquant avec le bouton gauche et en tirant sur la longueur que l'on désire donner au vecteur puis en relâchant la souris, et ainsi de suite.
On remarque que une des flèches au sommet de la tête du bébé est verte. C'est un point de repère, qui aide à tracer et à positionner le même nombre de vecteurs sur l'image de destination que sur l'image source : Après avoir bouclé le tracé sur la première image, lorsqu'on commence celui de la deuxième le tracé de celle-ci est accompagné de flèche verte le long du premier tracé et facilite ainsi le travail.

Voici les paramètres que j'ai utilisé pour obtenir un résultat intéressant :

- Simple morph
- Border vector
- use wavelets

- Le curseur "wavelet interpolation levels" monté au 3/4.
- le "Morphing-progress" rectiligne et centré
- Nombre de frames : 50
- "Animaton sequence" cochée et 25 fps

Cliquez maintenant sur "calculate" pour générer l'animation qu'il est possible de visualiser avec le bouton "animate" pour éventuellement faire des modifications. Attention le fait de relancer à nouveau "calculate" écrase la précédente animation.

Une fois satisfait du résultat, cochez "save pics from animation" et choisissez un nom de fichier et un répertoire où sauvegarder les 50 fichiers .tif que va générer la commande "ready" de la boite de dialogue ouverte par "choose filname"

Dernière opération : Cliquez sur "Execute xmrm_mpeg" choisissez comme START-frame celui des 50 qui se nomme nom_de_fichier000.tif et comme LAST-frame le nom_de_fichier049.tif et faite "GO" pour créer le fichier vidéo mpeg qui se nommera nom_de_fichier.mpg et se trouvera dans le même répertoire que les 50 fichiers tif.


[small animated gif]

Facile, non ?
Cette animation est téléchargeable en fichier mpg ou en animation gif

Note de la rédaction: la compilation de xmrm avec des distributions récentes de Linux peut poser certains problèmes. Nous vous proposons une liste de solutions :  

Discussion sur cet article

Chaque article possède sa page de discussion. Vous pouvez y soumettre un commentaire ou lire ceux d´autres lecteurs:
 page de discussion 

Site Web maintenu par l´équipe d´édition LinuxFocus
© Yves Ceccone, FDL
LinuxFocus.org

Cliquez ici pour signaler une erreur ou envoyer un commentaire à Linuxfocus

2001-09-07, generated by lfparser version 2.17