dimanche 23 décembre 2012

gif animés de Jupiter avec ImageMagick

En ce moment Jupiter passe à l'opposition, c'est la période la plus favorable pour l'observation de cette planète car :
  • durant cette période la planète est observable toute la nuit à plus de 50° de hauteur  et son diamètre apparent dépasse les 48" d'arc
  •  l'atmosphère de la planète est très riche en structures nuageuses complexes : Grande tâche rouge, festons et ovals dans les bandes équatoriales  ... dont le défilement est très rapide   (Jupiter fait un tour sur elle même en 10h environ!)
  •  les transits des satellites Galiléens et de leur ombre devant la planète se multiplient lorsque Soleil-Terre-Jupiter sont approximativement alignés (d'autant plus que le satellite Io fait une rotation autour de Jupiter en 2 jours et demi  seulement! )
c'est l'occasion de faire quelques images et animations de la planète géante sous forme de gifs animés :

Io s'éloigne de Jupiter juste après le transit de son ombre sur la planète géante.



transit de Ganymède et de son ombre sur le disque de Jupiter alors que la grande tâche rouge apparait.

panaches et festons autour de la grande tâche rouge.
séries de festons sur la face de Jupiter opposée à la grande tâche rouge  alors qu'Io s'éloigne de Jupiter.


On peut voir plusieurs défauts sur ces images :
  • certaines paraissent moins nettes c'est par ce que je les ai faites en utilisant une lentille de barlow (2x) pour grossir la taille de jupiter) hélas le résultat est moins net qu'en prenant des images de plus petite taille et en les grossissant ensuite par traitement informatique
  • sur certaines animations onvoit les positions successives des satellites d'une image à l'autre ... c'est du à  la compression gif  qui n'est pas la meilleur possible  (mais hélas le format gif est le seul qui soit lisible à peut près partout sur le web :-( )

 Le principe pour réaliser ce type d'image est de
  • prendre à la webcam (une philipps SPC900NC dans mon cas) pendant une heure ou plus plusieurs petits films espacés de 10minutes
  • ensuite réaliser une image de Jupiter pour chaque film (avec REGISTAX dans mon cas )
  • puis créer un gif animé à partir des images obtenues(après les avoir réalignées)
 Voici quelques astuces pour transformer une séries d'images de Jupiter en une animations.

1.  Alignement des images 

La première étape consiste à aligner les images de telles sortes que le disque de jupiter se trouve à la même position sur chaque image. C'est une opération bien connues si vous utilisé un logiciel de traitement des images astronomiques comme iris ou registax   :
  • sélectionner la liste d'images  (menu select) 
  • aligner les images sur le disque de jupiter (onglet align)
  • optimiser l'alignement (onglet optimize)
  • et lorsqu'on arrive à l'onglet stack utiliser le panneau "save registred"  en choisissant votre format d'images et la zone à sauver ("maximum area")

sauvegarder une série d'images alignées dans registax
Registax sauve les images dans le répertoire où on été choisies les images de départ donc si vous gardez le même format d'images régistax écrasera les images de départ avec les images alignées .  Dans la suite  on supposera que l'on a une séries d'images de jupiter  dans des fichiers :

jupiter_1.bmp jupiter_2.bmp .... 


2. création de gif animés avec ImageMagick

ImageMagick est une bibliothèque de fonctions dédié à la manipulation d'images qui s'utilise en lignes de commandes. Si vous êtes sous linux vous l'installerez facilement depuis votre gestionnaire de paquets préféré, sous windows on le trouve à l'adresse http://www.imagemagick.org/script/binary-releases.php#windows  ou mieux directement dans les paquets cygwin  (ce qui a l'avantage de vous fournir un environnement complet  de programmation bash similaire à ce que l'on a sous linux  et bien utile pour faire des traitement automatisés sur des fichiers).  Une très bonne sources d'exemples d'utilisation d' ImageMagick  pour créer/modifier des images est disponible à l'adresse : http://www.imagemagick.org/Usage/ .  C'est de là que j'ai appris tout ce que je connais sur l'utilisation d'ImageMagick et de sa commande principale convert.  J'ai déjà donné un exemple d'utilisation  d'ImageMagick en astronomie dans le billet retouche astrophoto avec ImageMagick .

Aujourd'hui voyons comment  créer très facilement un gif animé à partir des images précédement alignées en utilisant la commande convert et les options -loop et -delay :
convert -loop nombre_de_répétitions -delay durée_par_image liste_d'images  animation.gif

  •  nombre_de_répétitions = un entier, mais la valeur 0 indiquede répéter à l'infini l'animation
  • durée_par_image= temps en  centièmes de secondes (c'est l'unité par défaut)
dans notre cas ça donne :

 convert -loop 0 -delay 50 jupiter_*.bmp jupiter_11212.gif


mais on peut faire beaucoup plus de choses, par exemple modifier  les images  avant de créer l'animation pour les améliorer ou y ajouter des informations. Par exemple si les images de Jupiter sont trop petites on peut facilement les agrandir avec :

convert -resize 200% -crop 640x480+320+240 -transpose  jupiter_1.bmp

  • -resize indique comment on veut augmenter la taille en %  ou en donnant une taille d'images (sous la forme pixels x pixels)
  • -crop lxh+x0+y0 permet de recadrer l'image  (après l'augmentation de taille) en donnant la largeur (l) et la hauteur (h) puis les coordonnées (x0,y0) en pixels du point en haut à gauche d'où part le découpage 
  • -transpose permet de redresser les images  (flip vertical plus une rotation de 90°) de manière à avoir le nord en haut et l'ouest à droite
s'il y a plusieurs  images à traiter de la même manière il suffit de remplacer convert par mogrify  pour appliquer le même traitement à chaque image. Cependant si on ne veut pas écraser les images de départ il faut modifier le format de sortie  avec l'option -format  (de bmp à png par exemple) :

mogrify -resize 200% -crop 640x480+320+240 -transpose  jupiter_*.bmp

on peut aussi ajouter du texte sur les images en utilisant l'option -draw . La syntaxe est un peu difficile  donc inspiré vous d'un exemple comme celui ci-dessous pour comprendre les différentes options utilisées :
  • -pointsize choisit la taille de la font
  • -gravity indique la zone où placer les commentaires d'une manière simplifié (north, south, east west, north-east ....)
  • -fill et -stroke -strokewith -background  permettent de gérer les choix de couleurs d'avant et d'arrière plan
auteur="'Ph. Roux'"
img=jupiter_1.bmp
txt="'11/12/12  20h16 TU'"
`convert ${img}  -pointsize 40 -gravity southeast \
                           -fill white -stroke black -strokewidth 2 \
                           -draw " text 0,0 ${auteur} "  tmp `
`convert tmp     -pointsize 40 -gravity southwest  \
                           -fill white -stroke black -strokewidth 2 \
                           -draw   "text 0,0 ${txt} " ${img} `
`convert ${img}  -pointsize 20 -gravity southeast -background black
     -draw " fill white  text  1,1  ${auteur}   \
                         text  0,0  ${auteur}  fill black  \
                         text -1,-1 ${auteur} "  tmp`
`convert tmp       -pointsize 20 -gravity southwest -background black \
     -draw " fill white  text  1,1  '${txt}'   \
                         text  0,0  '${txt}'  fill black \
                         text -1,-1 ${txt} "  ${img}`
rm tmp

3. Autres manipulation en bash
suivant le logiciel utilisé pour la prise de vue  ou le traitement des images (registax par exemple)  on peut récupérer les données concernant la date et l'heure de la prise de vue directement dans le nom du fichier. Cela se fait assez facilement  en bash avec la commande cut
  • cut -f n -d 'x'  (coupe le champ numéro n, suivant le délimiteur x)
  • cut -c a-b  (coupe du caractère a au caractère b)
par exemple  en utilisant imageinfo pour sauver les informations sur l'image  dans registax on peut faire ensuite pour récupérer la date et l'heure :

img=jupiter_20121211_2016_026_ST328.bmp
an=`echo ${img} | cut -f2 -d '_'| cut -c 3-4`
mois=`echo ${img} | cut -f2 -d '_'| cut -c 5-6`
jour=`echo ${img} | cut -f2 -d '_'| cut -c 7-8`
heure=`echo ${img} | cut -f3 -d '_'| cut -c 1-2`
min=`echo ${img} | cut -f3 -d '_'| cut -c 3-4`
nbimg=`echo ${img} | cut -f1 -d '.'| cut -f2 -d 'T'`
txt="${jour}/${mois}/${an}  ${heure}h${min} TU"

ce type de d'outils permet d'automatiser la création d'animation qui peuvent en temps normal prendre plusieurs heures de travail derrière l'écran !
mouvement de Io et Ganymède en Octobre 2011


1 commentaire:

Pour écrire des formules mathématiques vous pouvez utiliser la syntaxe latex en mettant vos formules entre des "dollars" $ \$....\$ $ par exemple :
- $\sum_{n=1}^\infty {1\over n^2}={\pi^2\over 6}$ s'obtient avec \sum_{n=1}^\infty {1\over n^2}={\pi^2\over 6}
- $\mathbb R$ s'obtient avec {\mathbb R} et $\mathcal D$ s'obtient avec {\mathcal D}
- pour les crochets $\langle .,. \rangle$ dans les commentaires utilisez \langle .,. \rangle
vous pouvez écrire du html dans les commentaires :
- italique <i> ... </i> gras <b> ... </b>
- lien <a href="http://adresse "> .... </a>