MoonStack version 2.1

logiciel destiné au compositage de tout type d'images : lunaires ou ciel profond, argentiques ou numériques

Ce logiciel est entièrement gratuit, mais si vous l'utilisez pensez à m'envoyer un mail :-)

I'm sorry there is no english translation available yet of the file you are reading now

Nouveautés de la version 2.1:
    - plus rapide pour l'alignement global des images
    - image compositéeau format FITS 16 bits en plus du BMP en sortie
     - versions Linux et Macintosh en plus de la versionWindow

Je tiens à remercier Franck Sicard pour le portage Linux et Jacques-André Régnier pour la version Mac


Téléchargement (environ 50ko, la doc est contenue dans l'archive) :

cliquez ici pour télécharger MoonStack 2.1 version Windows
cliquez ici pour télécharger MoonStack 2.1 version Linux
cliquez ici pour télécharger MoonStack 2.1 version Macintosh

Téléchargement d'un jeu d'images de test pour vérifier que tout fonctionne correctement (226 ko, fichier ZIP)


Cette page a pour but de vous présenter MoonStack. Au départ, ce logiciel a été conçu pour le compositage d'images lunaires faites avec une webcam, mais il peut servir  pour compositer tout type d'images en particulier celles obtenues en photo argentique duciel profond. Toutes les  photos lesplus récentesde mon site ont été compositéesgrâce àMoonStack.

Images Lunaires ou solaires
Lorsqu'on veut compositer des images lunaires (ou solaires) faites avec une webcam par exemple, celles-ci ont le défaut de ne pas être superposables sur toute leur surface à cause de déformations provoquées par  la turbulence. Le but de ce logiciel est de déformer toutes les images d'une série pour qu'elles soient superposables à une image de référence.
Voici un exemple de compositage de 12 images de Copernic faites avec uneVesta pro (Newton 200 à f/4.6+barlow qui donnait environ 3000mm defocale).Ce compositage a été fait avec la version 1.2 de MoonStack,mais bien sur la version 2.1 permet de faire la même chose plus facilement.

L'image ci-dessus a été réduite de 50%. Ci-dessous un agrandissement de la partie centrale et une comparaison avec une registration classique sans déformation (utilisation de la commande pregister dans Iris). Le traitement final (un masque flou) est le même pour les deux images.

Le gain en résolution sans être extraordinaire est quand même assez bien visible, en particulier sur le bord inférieur droit ducratère.L'autre avantage d'aligner séparément chaquepartie d'imageest d'obtenir un alignement correct sur toute la surface del'image.

Images argentiques du ciel profond

Quand on veut aligner précisément 2 photos argentiques dans le but de les compositer on se heurte à un problème : on abeau les tourner dans tous les sens, il y a toujours un coin ou çane se superpose pas bien. Même si le cadrage a été strictement le mêmepour les deux photos, ça ne colle pas ! Il serait dommage de se contenterd'un alignement imparfait qui  dégraderait larésolution de l'image alors qu'on a passé plus d'une heurel'oeil rivéà l'oculaire guide pour essayer justement d'obtenirla meilleure résolutionpossible ! D'où viennent ces défauts?De tout un tas de facteurs: lefilm n'est pas forcément tout àfait plan (ni dans le boîtierphoto ni dans le scanner), différencedans la réfraction atmosphériqueentre les deux prises de vue,cadragepas tout à fait identique combinéà une déformationgéométrique de l'image en bordde champ, erreur d’entraînementde la tête du scanner ..
Pour corriger ces défauts on doit faire subir à une des deux images une déformation non linéaire (contrairement aux rotations et translations de l'étape précédente). MoonStack réalise cette opération de façon automatique.
Dans le même ordre d'idée, ce type de déformation autorise de nouveaux types de prise de vue:
- prise de vue simultanée avec 2 objectifs différents (mais de même focale) qui visent la même zone du ciel. Avantage pour le même temps passé à guider la photo, vous en obtenez 2 que vous pouvez compositer, d'où un gain non négligeableen qualité d'image.
- possibilité de faire des mosaïques: c'est à dire demettre des photos bout à bout, ce qui permet d'augmenter le champ.Il suffitd'indiquer un point commun aux deux images.


Téléchargement

Depuis la première version de MoonStack, j'ai corrigé pas mal de bugs. Ceci dit si vous en trouvez de nouveaux faites le moi savoir à eroyer@club-internet.fr
Bien entendu je suis également preneur de toute suggestion visantà améliorer l'efficacité du programme.
Le lien pour le téléchargement est en haut de la page.
Ce logiciel est entièrement libre d'utilisation. Il fonctionne sous Windows, mais le code source est écrit en C à la norme ANSI. Il devrait être compilable sans problèmes pour Linux, Mac ou autre. Si vous êtes intéressé par un portage sur un autre système,écrivez moi.

Utilisation
Pour l'instant l'interface est très rudimentaire. Il s'agit d'un fichier texte qui doit être dans le même dossier que leprogramme et qui s'appelle ScriptMoonStack2.txt  (ne pas oublier l'extension). Tous les fichiers utilisés doivent être dans le même dossier que MoonStack.
Les images doivent être enregistrées au format BMP non compressé. Si vous utilisez Photoshop, dans la boite d'enregistrement du fichier BMP, il faut cocher  format Windows (et pas OS/2).
Le format du script a complètement changé pour cette version de MoonStack. Le principe est le suivant chaque commande occupe une ligne (il est possible de sauter des lignes). Pour être valable une ligne commence par le nom de la commande suivie de 2 points. Par exemple on écrira

compositage : compo.bmp

pour que l'image issue du compositage soit sauvée sous le nom de compo.bmp. Il est possible de mettre des commentaires en faisant commencer la ligne par rem: Voici un exemple:

rem : ceci est un commentaire

La ligne ci-dessus sera ignoré par MoonStack, ce qui vous permet de noter des informations dans le script (aide-mémoire)
Plutot que de rentrer dans le détail des commandes tout de suite je vous propose 2 scripts : le premier est adapté pour traiter une série d'images de la Lune faites avec une webcam, le second est destinéà aligner 2 photos argentiques scannées.

Script n°1 : séquence d'imagesdela Lune

La première chose à faire est de sélectionner les images à compositer. On peut le faire avec Avi2Bmp par exemple. Il suffit d'ouvrir le fichier AVI ou la séquence d'images BMP, de marquer les images les plus nettes et de faire un enregistrement par lot des images marquées. Ainsi vous obtenez une série d'images nommées par exmple Lune1.bmp à Lune10.bmp prêtes à être compositées dans MoonStack. Le script sera alors le suivant :

reference : Lune1.bmp
sourcesbmp : Lune, sortie, 1, 10
translation : 50 , 1
blocs : 10, 15, 4, 1
compositage : Lunecompositee.bmp

Notez qu'on pourra faire mieux par la suite (voir dernière remarque de ce paragraphe). Mais pour l'instant, examinons ce script plus en détail.

La commande reference indique quelle image doit servir de référence. Cette image ne sera pas modifiée et toutes les images de la série vont venir se superposer dessus. Les images de la séquence sont appelées image source et on précise leur nom ainsi que le numéro dedébut et de fin de la séquence par la commande sourcesbmp: (notez le s à la fin de sources). Le nom sortie indique que Moonstack va déformer chaque image de la séquence et enregistrer le résultat comme sortie1.bmp à sortie10.bmp.Notez que dans cette commande on ne précise pas l'extension bmp mais les fichiers doivent avoir cette extension. En passant à la dernière ligne, on voit que l'image compositée sera nommée Lunecompositee.bmp . Nouveau depuis la version 2.1 : une image compositée est également sauvée au format FITS. Dans cet exemple, vous obtiendrez 3 fichiers supplémentaires : LunecompositeeR.fit, LunecompositeeV.fit et LunecompositeeB.fit qui contiennent les couches Rouges, Verte et Bleue que vous pouvez importer directement dans IRIS. Dans la commande compositage vous pouvez omettre l'extension.

Les 2 commandes restantes indiquent les traitements à effectuer.
La ligne translation: indique un décalage global appliqué à chaque image avant de procéder à un alignement plus fin. Ici on a précisé un décalage maximum de 50 pixels (en plus ou en moins) par rapport à la position de départ,et on a demandé d'aligner les images avec une précision de1 pixel.

La ligne blocs indique qu'une étape d'alignement plus fin sera réalisé. A cette étape l'image n'est plus déplacée dans son ensemble mais elle est déformée. En fait elle estdécoupée en petit carrés (ou blocs) qui sont positionnésindépendament les uns des autres. Pour cela MoonStack cherche àpositionner au mieuxun certain nombre de blocs de l'image. Le 10 indiquequ'un calcul sera faittous les 10 pixels de l'image (en hauteur et en largeur)Si on diminue cenombre, l'alignement sera plus précis mais le calculsera plus long.Le nombre 15 précise la demi longueur de chaque bloc(c'est àdire lesblocs feront 30 pixels de coté). Les blocssont toujours carrés.Il vaut mieux ne pas descendre ce paramètreen dessous de 5 (et encore...)sinon il n'y a plus assez de pixels pour faireun alignement fiable. Le 4indique le déplacement maximum autorisépour chaque blocs (ça devraitconvenir pour un bon nombre d'imagesmais on peut essayer d'autresvaleurspour voir). Et enfin le 1 final indiquequ'on veut une précisionde1 pixel.

Quelques remarques :
- Il est possible de demander une précision inférieure (0.5 pixels ou même moins) mais alors les temps de calcul sont nettement plus longs
- Pour accélérer la phase d'alignement global on aurait puse contenter d'une précision de 2 pixels seulement car de toutes façons, on fait un alignement plus fin par la suite.
- Le choix de l'image 1 comme image de référence n'est pasforcémentle meilleur. Ça convient bien pour l'ajustement global,maisil estpréférablede procéder autrement: on faitd'abordun alignementglobal en utilisantl'image 1 comme référence.Danscette étapeon ne metpas de commande bloc, et on produit uneimage compositéequ'onappelleref.bmp et quiservira de référencepour une deuxièmephaseou on ne feraqu'un alignement par blocs cettefois-ci. Le résultatesten général meilleur.

Script n°2 : alignement de 2 images argentiques ciel profond

Supposons que les 2 images d'appellent image1.bmp et image2.bmp . Il n'est plus nécessaires de faire un subir un alignement préalable aux 2 images. La seule opération à faire consiste àrepérer 1 étoile commune aux deux images. On note ses coordonnéesdans l'image 1 (par exemple x=1235, y=765) et dans l'image 2 (ex : x=1316,y=753). C'est tout ! Le script sera le suivant :

reference : image1.bmp, 1235, 765
source : image2.bmp , sortieimage2.bmp , 1316, 753
angle : -20 , 20 , 0.05
blocs : 100, 50, 7, 1
compositage : Final.bmp


La commande reference indique quelle image doit servir de référence. Cette image ne sera pas modifiée et l'image source va venir se superposer dessus. En même temps que le nom de chaque image on note les coordonnées qu'on a relevées juste avant. Le nom sortieimage2.bmp sera le nomsous lequel sera enregistrée l'image 2 après déformation. En passant à la dernière ligne, on voit que l'image compositée sera nommée Final.bmp. Il suffira d'ouvrir cette image dans un logiciel de retouche pour faire les derniers ajustements.

Les 2 commandes restantes indiquent les traitements à effectuer.
La ligne angle: indique que MoonStack va chercher à déterminer la meilleure rotation possible pour amener les 2 images à se superposer. On indique que cette rotation peut atteindre plus ou moins 20 degrés autour de la position de départ, et on veux une précision de 0.05 degrés. Une telle précision est suffisante (si vous voulez accélérer un peu ce calcul vous pouvez même vous contenter de 0.1 degré).

A ce stade si on voulait compositer, on se rendrait compte que les images se superposent plutôt bien, mais avec un certains nombres de petits défautsrésiduels. Ces défauts vont être corrigés parlacommande blocs:
A cette étape l'image ne subit plus un déplacement dans son ensemble mais elle est déformée. En fait elle est découpée en petit carrés (ou blocs) qui sont positionnés indépendament les uns des autres. Pour cela MoonStack cherche à positionner au mieux un certain nombre de blocs de l'image. Le 100 indique qu'un calcul sera fait tous les 100 pixels de l'image (en hauteur et en largeur) Si on diminue ce nombre, l'alignement sera plus précis mais le calcul sera plus long. Le nombre 50 précise la demi longueur de chaque bloc (c'est à dire les blocs feront 100 pixels de coté). Le 4 indique le déplacement maximum autorisé pour chaque blocs (ça devrait convenir pour un bon nombre d'images mais on peut essayer d'autres valeurs pour voir).Les blocs sont toujours carrés. Pour des images du ciel profond scannées à 1950 dpi ces valeurs conviennent très bien. A 4000 dpi je pense que ça devrait marcher aussi mais vous pouvez remplacer la séquence 100,50,7 par 200,100,14. Enfin le 1 final indique que nous voulons une précision d'alignement de 1 pixel. Il n'est pas nécessaire de descende sousla barre des 1 pixels. La précision gagnée est insignifiantemais le temps de calcul augmente considérablement.

On peut très bien ajouter une troisième image en ajoutant la ligne
source : image3.bmp , sortieimage3.bmp , 1316, 753
Dans ce cas les 2 images sources seront traitées en utilisant la même image de référence. L'image compositée sera la moyenne des 3 images utilisées. Si vous avez de nombreuses images à aligner la commande sourcesbmp est très pratique (voir le script n°1).

Mosaïques

Une mosaïque consiste simplement à mettre des images bout à bout pour élargir le champ. MoonStack permet d'aligner les imagesen utilisant leur partie commune. Il suffit de procéder exactementcomme dans le cas de l'alignement de 2 images, c'est à dire de noterlescoordonnées d'une étoile commune aux 2 images. Il vautmieuxchoisir cette image au centre de la partie commune aux deux images.Pasbesoindes'occuper du recadrage des images.
Il est important de noter que dans le cas des mosaïques les déformations sont souvent assez prononcées en bord de champ surtout si les images ont été faites avec des objectfis de courte focale. Il vaut mieux entrer une valeur de décalage maximum de bloc relativement importante, mais il peut arriver que l'alignement ne soit pas bon à certains endroits. Bref, il reste du boulot dans ce domaine !

Automatisation des traitements

Il est possible de traiter plusieurs séries d'images à la suite les unes des autres. C'est pratique car on peut faire autre chose pendant que l'ordinateur calcule. Pour cela il suffit d'écrire un fichier.bat  (par exemple ms.bat )tel que celui-ci
moonstack script1.txt
moonstack srcipt2.txt
etc ...

Ensuite au lieur de double cliquer sur l'icone de moonstack.exe, on double clique sur moonstack.bat. Les scripts seront exécutés les uns après les autres. Il n'est pas possible pour l'instant de donner plusieurs scripts sur la même ligne de commande.
Normalement, si vous lancez directement MoonStack ,le programme attend l'appui sur entrée à la fin de l'exécution. Si vous lancez MoonStack à partir d'un ligne de commande, le programme quitte automatiquement. Si vous désirez modifier ce comportement par défaut vous pouvez rajouter dans le script:
quitter:0
ou
quitter:1
Si la valeur est mise à 1, MoonStack quittera automatiquement en fin d'exécution.

Divers

Si vous utilisez la commande translation: un fichier intitulé shift.lst est généré. Chaque ligne de ce fichier indique le déplacement qui a été appliqué à chaque image en abscisse en en ordonnée.

Afin de réduire le temps de calcul, le calcul de la meilleure translation ne prend pas en compte la totalité de l'image mas seulement la partie centrale. Cela peut poser des problèmes si l'objet n'occupe qu'une partie du champ (une planète par exemple). Il est possible de régler la fraction d'image prise en compte pour le calcul avec la commande optitranslation: Voici 2 exemples:
optitranslation:1

Dans ce cas toute l'image est prise en compte, ce qui permet d'être certain qu'il n'y aura pas d'erreur dans la superposition. Mais le calcul sera plutot lent.
En faisant:
optitranslation:8
Seule une petite partie de l'image sera utilisée pour le calcul et le calcul sera plus rapide. Ce réglage convient très bien pour des images où la Lune qui occupe tout le champ. La valeur par défaut est 6.