JSol’Ex est un traitement d’images solaires produites par l’intermédiaire du Sol’Ex de Christian Buil. Il permet de traiter les fichiers SER capturés avec cet instrument pour produire des images du disque solaire, de manière similaire à INTI de Valérie Desnoux. S’il est principalement conçu pour traiter les images produites par Sol’Ex, il est possible qu’il donne de bons résultats sur d’autres héliospectrographes.

JSol’Ex est un logiciel libre sous licence Apache 2, écrit en Java et fourni à titre gratuit sans aucune garantie.

Téléchargement

JSol’Ex peut être téléchargé sur cette page. Des installateurs sont disponibles pour Linux, Windows et MacOS.

Alternativement, vous pouvez lancer JSol’Ex en téléchargeant les sources puis en exécutant la commande:

./gradlew jsolex:run

Traitement d’une vidéo

JSol’Ex ne peut traiter que les fichiers SER, vous devez donc configurer votre logiciel de capture pour utiliser ce format. La fenêtre principale se présente sous cette forme:

main window fr

Dans le menu "Fichier", sélectionnez "Ouvrir un fichier SER". Choisissez votre fichier, la fenêtre suivante devrait s’ouvrir:

params 1 fr

Cette fenêtre est le point d’entrée de la configuration du traitement. Vous pouvez préciser:

  • la longueur d’onde d’observation: s’il n’est pas obligatore de remplir ce champ, le faire vous permettra de bénéficier de la coloration automatique. En cliquant sur les "…​" vous disposez de la possibilité d’ajouter vos propres raies si elles ne sont pas listées

  • décalage en pixels : par défaut, le logiciel trouve la raie la plus sombre dans l’image et calcule un polynôme de second degré pour modéliser cette raie. L’image est reconstituée en prenant les pixels au centre de la raie (décalage = 0). Il vous est possible d’entrer un décalage en pixels pour aller par exemple vers le continuum, ou trouver une raie plus difficile à identifier (ex. Hélium) à partir de la raie la plus sombre.

  • le décalage Doppler est utilisé uniquement lorsque vous observez en raie h-alpha pour générer une image Doppler. Par défaut, le logiciel utilise 2 images décalées de 3 pixels pour reconstituer une image en couleur.

  • Forcer la valeur du tilt : lors de la correction géométrique d’image, JSol’Ex calcule une ellipse pour modéliser le disque solaire reconstitué. Cette ellipse est utilisée pour calculer des paramètre comme l’angle de tilt. Si le calcul effectué par le logiciel est erroné, vous disposez de la possibilité de surcharger la valeur calculée.

  • Forcer le rapport X/Y : de manière similaire, sur certaines images dans des raies difficiles, l’ellipse peut ne pas parfaitement correspondre au disque solaire et ne pas reconstituer un soleil parfaitement circulaire. Vous pouvez surcharger le rapport détecté pour corriger ces problèmes

  • Inverser l’axe horizontal/vertical : permet de retourner l’image verticalement et horizontalement pour avoir le Nord et l’Est bien orientés

  • Aiguiser les images : permet d’appliquer un filtre pour améliorer les détails de l’image après reconstitution

Paramètres d’observation

Les paramètres d’observation sont utilisés lorsque vous enregistrez vos images au format FITS, pour remplir certaines métadonnées. A noter qu’à ce stade, nous ne recommandons pas d’envoyer les images générées par JSol’Ex sur la base de données BASSS2000, les champs de métadonnées entrés n’étant pas exactement les mêmes.

params 2 fr

Voici les champs disponibles dans JSol’Ex:

  • Observateur : personne qui a effectué l’observation

  • Adresse email : adresse e-mail de l’observateur

  • Instrument : pré-rempli avec "Sol’Ex"

  • Télescope : votre lunette ou télescope utilisé avec votre Sol’Ex

  • Longueur focale et ouverture

  • Latitude et longitude du site d’observation

  • Caméra

  • Date : pré-rempli avec les métadonnées du fichier SER, en zone UTC

Autres paramètres disponibles

params 3 fr
  • Supposer vidéo mono : si cette cache est cochée, JSol’Ex n’essaiera pas de faire un dématriçage de la vidéo d’entrée, ce qui permet d’accélérer considérablement les temps de traitement. En règle générale, vos vidéos seront en mono, il est donc utile de conserver cette case cochée.

  • Enregistrement automatique des images : si cette case est cochée, toutes les images générées sont automatiquement enregistrées sur disque. Dans le cas contraire, vous devrez dans l’interface qui affiche les images générés appuyer sur le bouton "Enregistrer" pour conserver les images produites

  • Générer des images de debug : permet de générer des images telles que la reconnaissance de contours, la reconnaissance d’ellipse/tilt, l’image moyenne. Utile pour vérifier si le logiciel ne se comporte pas correctement sur votre vidéo et que vous souhaitez vérifier là où il se trompe

  • Générer des fichiers FITS : permet de générer des fichiers FITS, non destructifs, en plus des images PNG

  • Largeur de correction de bande : c’est la largeur des bandes qui sont utilisées pour l’algorithme de correction de transversallium. L’algorithme calcule la valeur moyenne des pixels dans ces bandes et corrige la luminosité d’une ligne en fonction de cette valeur.

  • Nombre de passes de correction de bande : plus vous ferez de passes, plus il sera possible de corriger de gros défauts, au prix d’une image moins contrastée et/ou moins lumineuse

Modèles de noms de fichier

Par défaut, JSol’Ex enregistre les images produites dans un sous-dossier correspondant au nom de la vidéo, et dans ce sous-dossier un autre sous-dossier par type d’image (raw, debug, traitées, etc…​). Si ce modèle ne vous convient pas, vous pouvez créer vos propres modèles de nommage, en cliquant sur les "…​":

params 4 fr

Un modèle de nommage consiste en un label (un nom), mais surtout un modèle dont les composantes sont des jetons entre %.

Voisi les jetons disponibles:

  • %BASENAME% est le nom de base du fichier SER, sans l’extension

  • %KIND% correspond au type d’image générée (raw, debug, …​)

  • %LABEL% est l’identifiant des images, par exemple recon, protus, etc…​

  • %CURRENT_DATETIME% est la date et l’heure de traitement

  • %CURRENT_DATE% est la date de traitement

  • %VIDEO_DATETIME% est la date et heure de la vidéo

  • %VIDEO_DATE% est la date de la vidéo

  • %SEQUENCE_NUMBER% est le numéro de séquence dans le cas d’un traitement en mode batch (avec 4 chiffres, par ex. 0012)

Par exemple, pour créer un modèle pour mettre toutes vos images dans un même dossier peut être :

%BASENAME%/%SEQUENCE_NUMBER%_%LABEL%

Le champ "exemple" donne une idée de ce qui sera généré.

Lancer un traitement

Vous avez le choix entre 3 modes de traitement.

  • Le mode "rapide" ne produira que 2 images : l’image brute reconstituée, qui permet de se donner une idée de la circularité du disque et donc du potentiel sous-échantillonage, et une image corrigée géométriquement. C’est un mode particulièrement utile lors des premières acquisitions, par exemple de temps de régler le tilt correctement. Combiné au fait de ne pas sauvegarder automatiquement les images, il peut vous faire gagner un temps précieux et de l’espace disque !

  • Le mode "complet" produira l’intégralité des images que peut produire JSol’Ex. En fonction de la raie spectrale choisie, certaines images seront disponibles ou non. Par défaut, le logiciel produira:

  • l’image brute reconstituée

  • une version géométriquement corrigée et "étalée" (contraste amélioré)

  • une version colorisée (si la raie choisie dispose d’un profil de colorisation)

  • une version en négatif

  • une éclipse virtuelle, permettant de simuler un coronagraphe

  • une version "mix" combinant l’éclipse virtuelle et l’image colorisée

  • une image Doppler

  • le mode "personnalisé" permet de choisir plus précisément les images générées, voire de générer des images non prévues à l’origine par le logiciel (voir la section suivante).

Affichage des images produites

Lorsque les images sont produites, elles apparaissent au fur et à mesure en onglets. Il vous est alors possible, en fonction des images, de modifier des paramètres de constraste et d’enregistrer les images.

image display fr

Vous pouvez zoomer dans les images en utilisant la molette de la souris. Un clic droit vous permettra d’ouvrir l’image générée dans votre explorateur de fichiers.

Personnalisation des images générées

Lorsque vous cliquez sur "Personnalisé" au lieu des modes "rapide" ou "complet", JSol’Ex vous permet de choisir bien plus précisément quelles images généres.

Il existe 2 modes : le mode simple et le mode ImageMath.

Dans le mode simple, vous pouvez choisir la liste des images générées en cochant chacune d’entre elles, et vous pouvez aussi demander la génération d’images avec des décalages de pixels différents.

Par exemple, si vous souhaitez disposer d’images allant du continuum en passant par la raie explorée, vous pouvez entrer -10;-9;-8;-7;-6;-5;-4;-3;-2;-1;0;1;2;3;4;5;6;7;8;9;10 ce qui aura pour effet de générer 21 images distinctes, pour des décalages de pixels entre -10 et 10.

Ceci peut être intéressant par exemple si vous les recombinez pour en faire un GIF animé ou une vidéo.

A noter que si vous cochez certaines images comme "Doppler", certains décalages sont automatiquement ajoutés à la liste (ex. -3 et 3).

Si ceci ne suffit pas, vous pouvez utiliser le mode avancé "ImageMath" qui est extrêmement puissant tout en restant simple d’accès.

ImageMath : scripts de calcul d’images

Introduction à ImageMath

Le mode ImageMath permet de générer des images en effectuant des calculs plus ou moins complexes sur des images générées. Il repose sur un langage de script simple mais suffisamment riche pour faire des traitement complexes.

Reprenons l’exemple précédent, dans lequel il s’agissait de générer l’ensemble des images pour des décalages allant de -10 à 10 pixels. Dans le mode "simple", il nous a fallu entrer l’ensemble des valeurs à la main, séparés par des points-virgule. Dans le mode "ImageMath", nous disposons d’un langage permettant de le faire.

Commençez par sélectionner le mode ImageMath dans la liste et cliquez sur "Ouvrir ImageMath". L’interface suivante s’ouvre:

imagemath 1 fr

Dans la partie gauche, "Scripts à exécuter", nous trouvons la liste des scripts qui seront appliqués lors du traitement. Les scripts sont des fichiers enregistrés sur votre disque, que vous pouvez partager avec d’autres utilisateurs. Leur contenu est éditable dans la partie droite de l’interface.

Effacez le contenu du script d’exemple et remplacez le par:

range(-10;10)

Puis cliquez sur "sauvegarder". Choisissez un fichier de destination et enregistrez. Le script apparaît désormais dans la liste de gauche, il sera appliqué lors du traitement.

Cliquez alors sur "Ok" pour fermer "ImageMath" et ne conservez que "Après correction géométrique et étendue" dans la liste des images.

Cliquez sur "Ok" pour lancer le traitement, vous obtenez alors les images demandées:

imagemath 2 fr

Les fonctions d’ImageMath

Nous avons utilisé ici une seule fonction, range, qui a permis de générer en une seule instruction une vingtaine d’images, mais il existe de nombreuses fonctions.

Fonctions "unitaires":

  • img demande une image à un décalage de pixels donné. Par exemple, img(0) est l’image centrée sur la raie, img(-10) est celle décalée de 10 pixels vers le haut.

  • avg permet de calculer la valeur moyenne d’images, par exemple: avg(img(-1), img(0), img(1)) calcule la moyenne des images aux décalages -1, 0 et 1. Il est aussi possible d’écrire: avg(range(-1,1))

  • max permet de calculer la valeur maximale d’images, par exemple max(img(-3), img(3)). Le maximum est calculé pixel par pixel.

  • min permet de calculer la valeur minimale d’images, par exemple min(img(-3), img(3)). Le minimum est calculé pixel par pixel.

  • range permet de générer une suite d’images à des pixels décalés. Cette fonction prend au minimum 2 arguments, la valeur basse (inclue) et la valeur haute (inclue). Par exemple, range(-5,5) produira 11 images. Il est possible de générer une image tous les X pixels, en ajoutant un 3ème argument, le pas. Par exemple, range(-5,5,5) ne générera plus que 3 images, à -5, 0 et 5 pixels.

Il est possible de faire des calculs sur les images, par exemple:

(img(5)+img(-5))/2 est équivalent à avg(img(5),img(-5)).

Ou encore: 0.8*img(5) + 0.2*avg(range(0;10))

Les autres fonctions disponibles sont:

  • invert, qui permet d’obtenir le négatif d’une image

  • asinh_stretch permet d’appliquer la fonction d’étirement par arcsinus hyperbolique. Elle prend 3 paramètres: l’image, le point noir et le coefficient de stretch. Par exemple, asinh_stretch(img(0), 200, 100).

  • fix_banding permet d’appliquer l’algorithme de corrections de bandes (ou transversallium). Il prend 3 arguments: l’image, la largeur de bande et le nombre d’itérations. Par exemple, fix_banding(img(0), 10, 5).

Note
Si vous ne connaissez pas la valeur du point noir, vous pouvez utiliser la valeur estimée par JSol’Ex, disponible dans une variable prédéfinie blackPoint: asinh_stretch(img(0), blackPoint, 100)
  • autocrop permet de réduire l’image à un carré autour du disque solaire. Cette fonction fonctionne grâce à l’ellipse corrigée et utilise le centre du disque pour centrer l’image. Par exemple: autocrop(img(0)).

  • colorize permet de coloriser une image. Elle prend au choix 2 ou 7 paramètres. Dans sa version la plus simple à 2 paramètres, le premier est l’image à coloriser, et le second est le nom du profil de colorisation, tel que trouvé dans la fenêtre de paramétrage, par exemple: colorize(img(0), "h-alpha"). Dans sa version longue, les paramètres de colorisation sont les points "entrée" et "sortie" pour chacun des canaux rouge, bleu et vert, entre 0 et 255. Par exemple: colorize(img(0), 84, 139, 95, 20, 218, 65) est équivalent à l’entrée précédente. Notez que la colorisation varie fortement en fonction des images en entrée et qu’il peut être nécessaire d’avoir appliqué la fonction asinh_stretch avant pour obtenir les couleurs souhaitées.

Scripts ImageMath

Dans la section précédente, nous avons vu les "briques élémentaires" d’ImageMath, qui permettent de calculer des images. Les scripts permettent d’efficacement combiner ces briques pour en faire de véritables outils puissants pour traiter vos images.

A titre d’exemple, voici un script qui permet de traiter une image dans la raie Hélium.

[params]
# Entrer la valeur du décalage de raie
RaieHelium = -85
# Limites hautes et basses pour le continuum
ContinuumLo=-80
ContinuumHi=-70
# Coefficient d'application du continuum
ContinuumCoef=0.95
# Stretch de l'image
Stretch=10
# Largeur de correction de bande
BandWidth=25
# Iterations de correction de bande
BandIterations=10

## Variables temporaires
[tmp]
continuum = max(range(ContinuumLo,ContinuumHi))
helium_raw = autocrop(img(RaieHelium) - ContinuumCoef*continuum)

## Maintenant les images !
[outputs]
helium = asinh_stretch(helium_raw, blackPoint, Stretch)
helium_fixed = asinh_stretch(fix_banding(helium_raw;BandWidth;BandIterations),blackPoint, Stretch)
helium_color = colorize(helium_fixed, "Helium (D3)")

Notre script est décomposé en 3 sections: [params], [tmp] et [outputs]. La seule section obligatoire est [outputs]: elle permet de définir quelles images nous souhaitons obtenir en sortie. Le nom des autres sections est arbitraire, vous pouvez en définir autant que vous le souhaitez.

Ici, nous avons une section [params] qui permet de mettre en évidence les paramètres de notre script, autrement dit ce que l’utilisateur peut configurer. On y trouve des variables, déclarées par un nom (ex RaieHelium) et une valeur -85.

Note
Une variable doit ne peut contenir que des caractères ascii, des numéros (hors premier caractère) ou le caractère _. Par exemple, maVariable, MaVariable0 et maVariable_0 sont tous valides, mais hélium ne l’est pas.

Ces variables peuvent être réutilisés dans d’autres variables ou des appels de fonctions.

Important
Les variables sont sensibles à la casse. maVariable et MaVariable sont 2 variables distinctes !

Ainsi, notre 2ème section, [tmp], définit des images qui nous servent d’intermédiaire de calculs, mais pour lesquelles nous ne sommes pas intéressés par le résultat. Ici, nous calculons 2 images temporaires, une du continuum, qui est calculée en prenant la valeur maximale des images d’un intervalle dans le continuum, et une image "raw" de l’helium qui correspond à l’image de la raie Hélium à laquelle on soustrait l’image du continuum, pondérée par un coefficient définit dans notre section [params].

Au final, la section [outputs] déclare les images qui nous intéressent:

helium = asinh_stretch(helium_raw, blackPoint, Stretch) permet de générer une image avec le label helium (partie gauche de l’égalité) et dont le calcul est simplement la transformation hyperbolique.

La formule helium_fixed = asinh_stretch(fix_banding(helium_raw;BandWidth;BandIterations),blackPoint, Stretch) fait la même chose, mais applique en plus l’algorithme de correction de bandes.

Enfin, helium_color = colorize(fix_banding(helium_raw;BandWidth;BandIterations), "Helium (D3)") permet d’obtenir une version colorisée.

Note
Vous pouvez mettre des commentaires sur une ligne commençant par # ou //

Traitement par lots

En plus du traitement individuel, JSol’Ex propose une mécanique de traitement par lot. Dans ce mode, plusieurs vidéos sont traitées en parallèle, permettant de générer rapidement un grand nombre d’images, qui peuvent par exemple être ensuite envoyées dans un logiciel d’empilement tel qu’AutoStakkert!.

Pour lancer un traitement en lot, il faut aller dans le menu "Fichier" et cliquer sur "Traiter un lot". Sélectionnez alors l’ensemble des fichiers SER à traiter (ils doivent se trouver dans un seul et même dossier).

La même fenètre de paramétrage que dans le mode fichier seul s’ouvre alors. Elle permet de configurer le traitement, mais cette fois si pour le lot complet. Lorsque le traitement est lancé, il y a cependant quelques différences:

  1. les fichiers seront systématiquement enregistrés, indépendemment de la case "enregistrement automatique des images"

  2. les images ne s’affichent pas dans l’interface, mais une liste des fichiers traités à la place

batch mode fr

La liste des fichiers comprend le fichier de log du traitement de ce fichier, ainsi que toutes les images générées pour ce fichier.

Note
En mode batch, nous recommendons d’utiliser un modèle de nom de fichier qui met toutes les images dans le même dossier, ce qui rendra plus simple leur exploitation dans un programme tiers.

Mesures avec le débogueur de spectre

JSol’Ex propose un outil permettant de visualiser la détection des lignes spectrales sur une vidéo. Cet outil peut être utilisé pour trouver, par exemple, le décalage de pixels à appliquer pour trouver la raie hélium.

Pour se faire, ouvrez une vidéo en cliquant sur "Outils → Débogueur de spectre". Le logiciel va calculer l’image moyenne pour la vidéo puis vous présenter cette fenêtre:

spectral debug 1 fr

En haut, vous voyez l’image moyenne. La ligne rouge correspond à la ligne spectrale détectée. Sous la ligne violette s’affiche une image corrigée en fonction du polynôme : ceci vous permet de vérifier facilement si le polynôme est correct: l’image du bas doit avoir des lignes spectrales parfaitement horizontales.

Dans la partie basse de l’interface, vous trouverez:

  • le bouton radio "Moyenne / Images" qui permet de basculer entre l’image moyenne et les images individuelles du film SER

  • lorsque "Images" est sélectionné, le slider à droite permet de naviguer dans la vidéo

  • le seuil de détection du soleil peut être changé (non recommandé, le logiciel ne permet pas de modifier cette valeur, c’est un mode expert)

  • la case "vérouiller le polynôme" permet de figer la détection de ligne spectrale sur l’image actuelle : elle nous sera utile pour les mesures de distances

  • le slider "contraste" permet d’augmenter le contraste et la luminosité de l’image (transformation arcsin hyperbolique)

Application au calcul de décalage de la raie hélium

Nous supposerons ici que notre fichier SER est une vidéo incluant à la fois la raie spectrale Hélium et une autre raie suffisamment sombre pour être bien détectée par JSol’Ex.

Nous pouvons alors procéder par étapes.

  • vérouiller le polynôme sur l’image moyenne

spectral debug 2 fr
  • sélectionner le mode "Images"

spectral debug 3 fr
  • Augmenter le contraste

spectral debug 4 fr
  • Choisir une image au bord du limbe

spectral debug 5 fr

Nous pouvons désormais effectuer des mesures. Lorsque vous déplacez la souris sur l’image, des coordonnées s’affichent :

spectral debug 6 fr

Les 2 premiers nombres sont les coordonnées (x,y) du point sous le curseur de la souris. Le 3ème nombre est celui qui nous intéresse : c’est le décalage en pixels entre le point sous le curseur et la ligne spectrale en rouge.

Le 4ème nombre nous permet d’obtenir une mesure plus précise, en calculant une moyenne sur un nombre d’échantillons.

Pour ajouter un échantillon, trouvez un point sur la raie hélium et appuyez sur "CTRL" tout en cliquant. Vous pouvez ajouter autant de points que vous le souhaitez:

spectral debug 7 fr

Le 4ème nombre représente la distance moyenne calculée. Nous en déduisons que le décalage de pixels à appliquer est de -134.

Remerciements

  • Christian Buil pour avoir conçu le Sol’Ex et diriger la communauté d’une main de maître

  • Valérie Desnoux pour son travail remarquable sur INTI

  • Jean-François Pittet pour ses rapports de bugs, ses vidéos de test et ses formules de correction géométrique

  • Sylvain Weiller pour son beta-testing intensif, ses retours précieux et ses idées de traitement