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.
Note aux utilisateurs français
Si vous votez Rassemblement National ou tout autre parti proche de l’extrême droite, je vous demande de ne pas utiliser ce logiciel Mes convictions sont diamètralement opposées à celles de ces partis et je ne souhaite pas que mon travail, développé sur mon temps libre avec une licence libre serve à des personnes qui soutiennent ces idées nauséabondes. La solidarité, le partage, l’ouverture aux autres, la lutte contre les discriminations et les inégalités, le respect de toutes les religions, de tous les genres sont les valeurs qui m’animent. Elles sont à l’opposé de celles prônées par ces partis. Je vous invite à ne pas céder aux sirènes de la haine et à vous tourner vers des valeurs plus positives, où votre bien-être ne passe pas par le rejet de l’autre. |
Téléchargement
Cliquez sur le bouton correspondant à votre système ci-dessous :
JSol’Ex peut aussi être téléchargé ou installé depuis les sources 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
Communauté
Vous pouvez nous rejoindre sur notre serveur Discord pour discuter de JSol’Ex, poser des questions, ou partager vos images.
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:

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

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.
-
Correction angle P : lorsque cette case est cochée, l’angle P du soleil sera calculé automatiquement à partir de la date d’observation (disponible dans le fichier SER). Les images seront automatiquement corrigées de cet angle, pour que le Nord soit bien en haut. Ce paramètre n’affecte pas les images générées avec ImageMath, qui doivent faire leur propre correction.
-
Rotation : permet d’effectuer une rotation à gauche ou à droite (90 degrés) de l’image. Ceci peut par exemple être utile dans le cas d’un scan fait en déclinaison, pour corriger l’orientation. Ce paramètre n’affecte pas les images crées avec ImageMath.
-
Rognage : permet d’effectuer un rognage automatique de l’image après correction géométrique. Il existe plusieurs modes:
-
Aucun: pas de rognage (par défaut)
-
Largeur d’origine : l’image sera redimensionnée dans un carré de la taille de la largeur de la vidéo d’origine. Idéal pour les disques solaires complets.
-
Rayon (x…) : l’image sera redimensionnée en fonction du rayon du disque solaire, en appliquant un multiplicateur. Peut-être utile par exemple lorsque le disque est tronqué et que l’on veut avoir une image carrée permettant de "remettre" la portion à sa place.
-
-
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
-
Forcer le polynôme: permet de forcer le polynôme de second degré utilisé pour modéliser la raie spectrale. Voir la section sur le forçage du polynôme pour plus d’informations.
-
Inverser l’axe horizontal/vertical : permet de retourner l’image verticalement et horizontalement pour avoir le Nord et l’Est bien orientés
-
Redimensionner au maximum: peut être utilisé si votre vidéo est sur-échantillonnée et que vous souhaitez conserver la résolution maximum. Ceci arrive par exemple si vous faites des scans à basse vitesse (ex, sidérale).
Activer ce paramètre peut produire des images sensiblement plus grandes et entraîner une forte pression mémoire. Il n’est pas recommandé d’activer ce paramètre. |
Paramètres d’amélioration de l’image
Cette section permet de configurer les transformations qui seront appliqueés aux images de façon à améliorer leur aspect esthétique.

-
Paramètres CLAHE : permet de configurer l’algorithme d’amélioration de contraste CLAHE. Il est possible de configurer la taille des tuiles utilisées pour calculer les histogrammes, la résolution de l’histogramme et le facteur de clipping.
Viennent ensuite les paramètres de correction de bandes, qui permettent de corriger les bandes transversales qui peuvent apparaître sur les images par exemple à cause de poussières sur la fente.
-
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
Une autre section permet de configurer la déconvolution des images. Par défaut, aucune déconvolution n’est appliquée, mais vous pouvez choisir l’agorithme de déconvolution et ses paramètres.
Pour la déconvolution de Richardson-Lucy, vous pouvez choisir la taille du PSF synthétique, le facteur sigma et le nombre d’itérations.
Enfin, vous pouvez choisir d’appliquer un filtre d’amélioration des détails à la fin du traitement en cochant la case "aiguiser les images".
Expérimental
La correction par flat artificiel permet de corriger un éventuel vignettage. Elle calcule un modèle à partir des pixels du disque. Les pixels considérés sont ceux dont la valeur est comprise entre un percentile bas et un percentile haut. Par exemple, si vous entrez 0.1 et 0.9, les pixels dont la valeur est comprise entre le 10ème et le 90ème percentile seront utilisés pour calculer le modèle. Enfin, un polynome d’ordre spécifié est ajusté sur les valeurs du modèle pour corriger l’image. |
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. Elles servent aussi à calculer le graphique de longueur d’ondes. 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.

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
-
Binning : le binning appliqué à la caméra lors de l’acquisition
-
Taille des pixels : la taille des pixels de la caméra, en microns
-
Inversement haut/bas du spectre : normalement, le spectre doit avoir l’aile bleue en haut et l’aile rouge en bas. Si c’est l’inverse, vous pouvez cocher cette case. C’est typiquement le cas si vous utilisez un Sunscan.
-
Mode altazimutal : cochez cette case si vous n’utilisez pas une monture équatoriale mais une monture altazimutale (typiquement le cas avec Sunscan).
Mode altazimutal et correction de l’orientation des images
Il est important de comprendre que JSol’Ex n’est pas capable de déterminer si une image est retournée verticalement ou horizontalement, mais il peut calculer l’angle solaire P à partir de la date d’observation. Cependant, la grille d’orientation qui est générée ne sera correcte que si vous utilisez une monture équatoriale. Si vous utilisez une monture altazimutale, l’oritentation sera incorrecte, ainsi que la position des étiquettes des régions actives détectées. Pour corriger cela, vous devez cocher la case "mode altazimutal" et entrer les coordonnées de votre site d’observation : JSol’Ex calculera alors l’angle parallactique et effectuera la correction automatiquement, donnant une image bien orientée. |
Autres paramètres disponibles

-
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
Forcer le polynôme
JSol’Ex effectue une détection de la raie spectrale en cherchant la ligne la plus sombre dans l’image, puis en ajustant un polynôme de 3ème ordre. Il arrive parfois que la détection soit incorrecte, auquel cas vous pouvez forcer l’utilisation d’un polynôme. Pour ce faire, cliquez sur le bouton "forcer le polynôme", qui vous permettra d’entrer les coefficients du polynôme.
Le format du polynôme est une liste de 4 nombres entre accolades, séparés par des virgules, par exemple: {1.3414109042116584E-10,3.889927699830093E-5,-0.056529799336687114,35.76051527062038}
.
La façon la plus simple d’obtenir les coefficients du polynôme est de cliquer sur les "…" qui ouvrira une fenêtre avec l’image moyenne et la raie spectrale détectée :

Vous pouvez alors appuyer sur "CTRL" puis cliquer sur la ligne pour ajouter des points de mesure : une croix rouge sera ajoutée pour chaque point. Lorsque vous avez suffisamment de points, cliquez sur le bouton "Calculer le polynôme", qui ajustera un polynôme de 3ème ordre aux points et remplira automatiquement le champ "polynôme de force" dans les paramètres de traitement :

You can then close the popup and start processing.
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 "…":

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 exemplerecon
,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 contraste et d’enregistrer les images.

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 ou dans une nouvelle fenêtre.
Mode surveillance de répertoire
Lors de la mise au point, il peut être utile de traiter "à la chaîne" de nouvelles vidéos jusqu’à avoir obtenu un résultat satisfaisant (image centrée, mise au point correcte, etc.). JSol’Ex offre une façon simple de gagner du temps, en surveillant un dossier : les vidéos qui apparaissent dans le dossier seront automatiquement traitées.
Pour ce faire, dans le menu fichier, sélectionnez "Surveiller un dossier" puis sélectionnez le dossier dans lequel seront enregistrés vos fichiers SER (par exemple là où SharpCap va enregistrer).
JSol’Ex bascule en mode "surveillance" que vous pouvez interrompre en cliquant sur le bouton en bas à gauche.
Ouvrez maintenant votre logiciel de capture et enregistrez une nouvelle vidéo. Lorsque vous rebasculerez sur JSol’Ex, le logiciel ouvrira automatiquement la fenètre de paramétrage. Choisissez vos options et lancez le traitement.
Une fois le résultat obtenu, rebasculez sur le logiciel d’acquisition et enregistrez une nouvelle vidéo. Lorsque vous rebasculerez sur JSol’Ex, cette fois-ci le logiciel réutilisera les paramètres utilisés lors du traitement de la première vidéo : vous obtiendrez donc rapidement une nouvelle image !
Lorsque vous basculez de votre logiciel de capture à JSol’Ex, faites attention à ce que l’enregistrement soit terminé. Dans le cas contraire, le traitement serait lancé sur un fichier SER incomplet, ce qui échouera. |
Lorsque vous avez terminé, cliquez sur le bouton "Interrompre la surveillance" en bas à gauche.
Vous pouvez combiner le fait d’être en mode surveillance avec le fait d’ouvrir une image dans une fenêtre externe (en faisant un clic droit sur l’image choisie). En effet, lors du traitement de la nouvelle vidéo, l’image dans la fenêtre sera automatiquement remplacée par la nouvelle version. Ceci peut par exemple être intéressant dans des présentations publiques, en ayant une fenêtre montrant simplement le résultat du traitement. |
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:

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:

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.
Reconstruction d’images solaires
IMG
Renvoie l’image reconstruite au décalage de pixel spécifié.
Argument |
Requis ? |
Description |
Valeur par défaut |
|
Décalage de pixel |
||
Exemples
img(0)
img(ps: 1)
img(ps: a2px(1)) // 1 Å pixel shift
RANGE
Renvoie des images reconstruites aux décalages de pixel spécifiés par l’intervalle.
Argument |
Requis ? |
Description |
Valeur par défaut |
|
|||
|
Fin de l’intervalle (inclusif) |
||
|
Pas de l’intervalle |
1 |
|
Exemples
range(-1;1)
range(-1;1;0.5))
range(from: -10; to: 10; step: 2)
Fonctions mathématiques
AVG
Calcule la moyenne de ses arguments. Si les arguments sont des images, la moyenne est calculée pixel par pixel.
Argument |
Requis ? |
Description |
Valeur par défaut |
|
Arguments |
||
Exemples
avg(range(-1;1))
avg(img(0); img(1))
CONCAT
Concatène des listes d’arguments.
Argument |
Requis ? |
Description |
Valeur par défaut |
|
Arguments |
||
Exemples
concat(list(img(0));range(-1;1))
EXP
Calcule une exponentielle
Argument |
Requis ? |
Description |
Valeur par défaut |
|
Valeur |
||
|
Exposant |
||
Exemples
exp(img(0); 1.5)
exp(v:img(0), exp: 2)
exp(2, 3)
exp(v:2, exp: 3)
LOG
Calcule un logarithme
Argument |
Requis ? |
Description |
Valeur par défaut |
|
Valeur |
||
|
Exposant |
||
Exemples
log(img(0); 1.5)
log(v:img(0), exp: 2)
log(2, 3)
log(v:2, exp: 3)
MAX
Calcule le maximum de ses arguments. Si les arguments sont des images, le maximum est calculée pixel par pixel.
Argument |
Requis ? |
Description |
Valeur par défaut |
|
Arguments |
||
Exemples
max(range(-1;1))
max(img(0); img(1))
MEDIAN
Calcule la médiane de ses arguments. Si les arguments sont des images, la médiane est calculée pixel par pixel.
Argument |
Requis ? |
Description |
Valeur par défaut |
|
Arguments |
||
Exemples
median(range(-1;1))
median(img(0); img(1))
MIN
Calcule le minimum de ses arguments. Si les arguments sont des images, le minimum est calculée pixel par pixel.
Argument |
Requis ? |
Description |
Valeur par défaut |
|
Arguments |
||
Exemples
min(range(-1;1))
min(img(0); img(1))
POW
Calcule une puissance
Argument |
Requis ? |
Description |
Valeur par défaut |
|
Valeur |
||
|
Exposant |
||
Exemples
pow(img(0); 1.5)
pow(v:img(0), exp: 2)
pow(2, 3)
pow(v:2, exp: 3)
WEIGHTED_AVG
Calcule une moyenne pondérée d’images
Argument |
Requis ? |
Description |
Valeur par défaut |
|
Images |
||
|
Poids |
||
Exemples
weighted_avg(range(-1;1);list(.5;1;.5))
weighted_avg(images: range(-1;1); weights: list(.5;1;.5)))
Utilitaires
AR_OVERLAY
Génère une image avec les taches solaires détectées. Cette fonction ne fonctionnera que si la génération d’images de taches solaires a été sélectionnée.
Argument |
Requis ? |
Description |
Valeur par défaut |
|
Image(s) |
||
|
0 : ne pas afficher 1 : afficher les zones et les labels 2 : affichier uniquement les labels |
1 |
|
Exemples
ar_overlay(continuum())
ar_overlay(img: img(0); labels: 2)
CHOOSE_FILE
Ouvre une boîte de dialogue pour choisir un fichier image.
Argument |
Requis ? |
Description |
Valeur par défaut |
|
An ID for the file chooser. The next time the function is called with the same ID, the directory where the file chooser was opened will be used as the starting point. |
||
|
Titre de la boîte de dialogue |
||
Exemples
choose_file("my_id", "Choose a file")
choose_file(id: "my_id", title: "Choose a file")
CHOOSE_FILES
Ouvre une boîte de dialogue pour choisir des fichiers image.
Argument |
Requis ? |
Description |
Valeur par défaut |
|
An ID for the file chooser. The next time the function is called with the same ID, the directory where the file chooser was opened will be used as the starting point. |
||
|
Titre de la boîte de dialogue |
||
Exemples
choose_files("my_id", "Choose a file")
choose_files(id: "my_id", title: "Choose a file")
ELLIPSE_FIT
Force une nouvelle détection de la forme du disque solaire.
Argument |
Requis ? |
Description |
Valeur par défaut |
|
Image(s) |
||
Exemples
ellipse_fit(img(0))
ellipse_fit(img:range(0;1))
FILTER
La fonction filter permet de filtrer une liste d’images pour ne conserver que celles qui correspondent à un critère particulier. Ceci peut être particulièrement utile en mode batch. Par exemple, vous pouvez vouloir effectuer un retournement vertical et horizontal des images après un certain temps, en raison du retournement méridien.
Argument |
Requis ? |
Description |
Valeur par défaut |
||||||||||||||||||||||||||||
|
Liste d’images à filtrer. |
||||||||||||||||||||||||||||||
|
Sujet du filtre ( |
||||||||||||||||||||||||||||||
|
Opérateur à appliquer pour filtrer les images. |
||||||||||||||||||||||||||||||
|
Valeur de comparaison |
||||||||||||||||||||||||||||||
|
Exemples
filter(images, "file-name", "contains", "2021-06-01")
filter(img: images, subject:"file-name", function:"contains", value:"2021-06-01")
filter(images, "dir-name", "contains", "2021-06-01")
filter(imgimages, subject:"dir-name", function:"contains", value:"2021-06-01")
filter(images, "pixel-shift", ">", 0)
filter(images, "time", ">", "12:00:00")
filter(images, "datetime", ">", "2021-06-01 12:00:00")
GET_AT
Renvoie la valeur d’un élément d’une liste à la position spécifiée.
Argument |
Requis ? |
Description |
Valeur par défaut |
|
Liste |
||
|
Index |
||
Exemples
get_at(list; 0)
get_at(list: some_list; index: 1)
GET_B
Extraie le canal bleu d’une image.
Argument |
Requis ? |
Description |
Valeur par défaut |
|
Image(s) |
||
Exemples
get_b(some_image)
get_b(img: some_image)
GET_G
Extraie le canal vert d’une image.
Argument |
Requis ? |
Description |
Valeur par défaut |
|
Image(s) |
||
Exemples
get_g(some_image)
get_g(img: some_image)
GET_R
Extraie le canal rouge d’une image.
Argument |
Requis ? |
Description |
Valeur par défaut |
|
Image(s) |
||
Exemples
get_r(some_image)
get_r(img: some_image)
LIST
Crée une liste à partir des paramètres.
Argument |
Requis ? |
Description |
Valeur par défaut |
|
Liste |
||
Exemples
list(img(-3), img(3))
list(list: img(-3), img(3))
LOAD
Charge une image depuis un fichier.
Argument |
Requis ? |
Description |
Valeur par défaut |
|
Chemin du fichier |
||
Exemples
load('image.fits')
load(file: '/path/to/image.fits')
LOAD_MANY
Charge des images depuis un dossier.
Argument |
Requis ? |
Description |
Valeur par défaut |
|
Chemin du dossier |
||
|
Expression régulière pour filtrer les fichiers |
.* |
|
Exemples
load_many("/chemin/vers/dossier")
load_many(dir: "/chemin/vers/dossier", pattern:".*cropped.*")
MONO
Convertit une image couleur en niveaux de gris.
Argument |
Requis ? |
Description |
Valeur par défaut |
|
Image(s) |
||
Exemples
mono(some_image)
mono(img: some_image)
REMOTE_SCRIPTGEN
Fonction expérimentale et avancée qui est décrite spécifiquement dans cette section.
Argument |
Requis ? |
Description |
Valeur par défaut |
|
URL du service à invoquer |
||
Exemples
remote_scriptgen("http://localhost:8080/jsolex/remote")
remote_scriptgen(url: "http://localhost:8080/jsolex/remote")
RGB
Crée une image RGB à partir de trois images mono.
Argument |
Requis ? |
Description |
Valeur par défaut |
|
Image rouge |
||
|
Image verte |
||
|
Image bleue |
||
Exemples
rgb(img(-1);img(0);img(1))
rgb(r: redWing; g: avg(redWing;blueWing); b: blueWing)
SORT
Trie une liste d’images
Argument |
Requis ? |
Description |
Valeur par défaut |
|
Images |
||
|
Ordre de tri. Peut-être |
shift |
|
Exemples
sort(images, 'date')
sort(images, 'date asc')
sort(images: images, order: 'date desc')
VIDEO_DATETIME
Renvoie la date/heure à laquelle une vidéo a été enregistrée.
Argument |
Requis ? |
Description |
Valeur par défaut |
|
Image(s) |
||
|
Format de la date. |
||
Exemples
video_datetime(img(0))
video_datetime(img: img(0), format:"yyyy-MM-dd HH:mm:ss")
WAVELEN
Renvoie la longueur d’onde d’une image.
Argument |
Requis ? |
Description |
Valeur par défaut |
|
Image(s) |
||
Exemples
wavelen(img(0))
wavelen(img: img(0))
WORKDIR
Change le dossier de travail dans lequel les images sont chargées par les fonctions LOAD et LOAD_MANY.
Argument |
Requis ? |
Description |
Valeur par défaut |
|
Dossier de travail |
||
Exemples
workdir('/path/to/dir')
workdir(dir: '/path/to/dir')
Amélioration d’image
ADJUST_CONTRAST
Permet d’appliquer un ajustement très simple du contraste, en coupant les pixels sous une limite minimale ou au-dessus de la limite maximale.
Argument |
Requis ? |
Description |
Valeur par défaut |
|
Image(s) |
||
|
Valeur minimum |
||
|
Valeur maximum |
||
Exemples
adjust_contrast(img: img(0), min: 10, max: 200)
adjust_contrast(img(0), 10, 200)
ADJUST_GAMMA
Applique une modification gamma à une image.
Argument |
Requis ? |
Description |
Valeur par défaut |
|
Image(s) |
||
|
Gamma |
||
Exemples
adjust_gamma(img: img(0), gamma: 2.2)
adjust_gamma(img(0), 1.5)
ASINH_STRETCH
Permet d’appliquer la fonction d’étirement par arcsinus hyperbolique.
Argument |
Requis ? |
Description |
Valeur par défaut |
|
Image(s) |
||
|
Point noir |
||
|
Facteur d’étirement |
||
Exemples
asinh_stretch(img: img(0), bp: 500, stretch: 2.5)
asinh_stretch(img(0), 0, 10)
AUTO_CONTRAST
C’est une fonction d’amélioration du contraste crée spécifiquement pour les images de spectrohéliographes. Elle combine plusieurs techniques pour améliorer l’image.
Argument |
Requis ? |
Description |
Valeur par défaut |
|
Image(s) |
||
|
Gamma |
||
|
Aggressivité de la correction du fond entre 0 et 1. 1 = pas de correction, 0 = correction maximale. |
0.25 |
|
|
Amplification des protubérances. 0 = pas d’amplification |
0 |
|
Exemples
auto_contrast(img: img(0), gamma: 1.5)
auto_contrast(img(0), 1.5)
BLUR
Applique un flou gaussien à une image.
Argument |
Requis ? |
Description |
Valeur par défaut |
|
Image(s) |
||
|
Taille du noyau |
3 |
|
Exemples
blur(img(0))
blur(img(0), 7)
blur(img: img(0), kernel:7)
CLAHE
Applique une transformation CLAHE (Contrast Limited Adaptive Histogram Equalization) à une image.
Argument |
Requis ? |
Description |
Valeur par défaut |
|
Image(s) |
||
|
Taille de la tuile |
||
|
Nombre de paniers |
||
|
Valeur de coupure |
||
Exemples
clahe(img: img(0), ts: 16, bins: 128, clip: 1.1)
clahe(img(0), 16, 128, 1.1)
COLORIZE
Colorise une image en utilisant un profil de couleur lié à la longueur d’onde.
Argument |
Requis ? |
Description |
Valeur par défaut |
|
Image(s) |
||
|
Nom du profil (voir éditeur de raies spectrales) |
||
Exemples
colorize(img: img(0), profile: "H-alpha")
colorize(range(-1, 1), "Calcium (K)")
COLORIZE2
Colorise une image en utilisant une modélisation des courbes de couleur. Les courbes sont définies par 2 points de contrôle: la valeur d’entrée et la valeur de sortie.
Argument |
Requis ? |
Description |
Valeur par défaut |
|
Image(s) |
||
|
Valeur d’entrée pour le rouge (0-255) |
||
|
Valeur de sortie pour le rouge (0-255) |
||
|
Valeur d’entrée pour le vert (0-255) |
||
|
Valeur de sortie pour le vert (0-255) |
||
|
Valeur d’entrée pour le bleu (0-255) |
||
|
Valeur de sortie pour le bleu (0-255) |
||
Exemples
colorize(img: img(0), profile: "H-alpha")
colorize(range(-1, 1), "Calcium (K)")
CURVE_TRANSFORM
Applique une transformation de courbe à une image. La transformation interpole un polynôme de degré 2 passant par trois points: le point d’origine (0,0), le point de la courbe (in, out) et le point extrême (255,255).
Argument |
Requis ? |
Description |
Valeur par défaut |
|
Image(s) |
||
|
Valeur d’entrée de la courbe (0-255) |
||
|
Valeur de sortie de la courbe (0-255) |
||
Exemples
curve_transform(img(0), 100, 120)
curve_transform(img: img(0), in:50, out: 200)
DISK_FILL
Remplit le disque solaire détecté avec une valeur donnée (par défault, celle du point noir détecté).
Argument |
Requis ? |
Description |
Valeur par défaut |
|
Image(s) |
||
|
Valeur de remplissage |
detected black point value |
|
Exemples
disk_fill(img(0))
disk_fill(img: img(0), fill: 200)
DISK_MASK
Crée un masque du disque solaire, où les pixels à l’intérieur du disque auront la valeur 1, contre 0 pour ceux à l’extérieur du disque. Il est possible d’inverser (0 à l’intérieur, 1 à l’extérieur) en passant 1 comme 2d paramètre de la fonction.
Argument |
Requis ? |
Description |
Valeur par défaut |
|
Image(s) |
||
|
Inversion du masque (1 signifie valeur 0 à l’intérieur, 1 à l’extérieur) |
0 |
|
Exemples
disk_mask(img(0))
disk_mask(img: img(0), invert: 1)
EQUALIZE
Egalise l’histogramme des images en paramètre pour qu’elles aient toutes à peu près la même luminosité.
Argument |
Requis ? |
Description |
Valeur par défaut |
|
Liste d’images à égaliser. |
||
Exemples
equalize(range(-1;1))
equalize(list: some_images)
FIX_BANDING
Applique une correction de bandes sur l’image
Argument |
Requis ? |
Description |
Valeur par défaut |
|
Image(s) |
||
|
Largeur de la bande |
||
|
Nombre de passes |
||
Exemples
fix_banding(img(0), 64, 3)
fix_banding(img: img(0), bs: 48, passes: 10)
FIX_GEOMETRY
Corrige la géométrie de l’image en fonction de l’ellipse calculée
Argument |
Requis ? |
Description |
Valeur par défaut |
|
Image(s) |
||
Exemples
fix_geometry(img(0))
fix_geometry(img: img(0))
FLAT_CORRECTION
Calcule une image de flat artificielle pour corriger l’image puis applique la correction.
Argument |
Requis ? |
Description |
Valeur par défaut |
|
Image(s) |
||
|
Valeur du percentile bas |
0.1 |
|
|
Valeur du percentile haut |
0.95 |
|
|
Ordre du polynome |
2 |
|
[NOTE] .Expérimental ==== La correction par flat artificiel permet de corriger un éventuel vignettage. Elle calcule un modèle à partir des pixels du disque. Les pixels considérés sont ceux dont la valeur est comprise entre un percentile bas et un percentile haut. Par exemple, si vous entrez 0.1 et 0.9, les pixels dont la valeur est comprise entre le 10ème et le 90ème percentile seront utilisés pour calculer le modèle. Enfin, un polynome d’ordre spécifié est ajusté sur les valeurs du modèle pour corriger l’image. ==== |
Exemples
flat_correction(img(0))
flat_correction(img: img(0), order: 3)
INVERT
Inverse les couleurs d’une image.
Argument |
Requis ? |
Description |
Valeur par défaut |
|
Image(s) |
||
Exemples
invert(img(0))
invert(img: img(0))
LINEAR_STRETCH
Etire l’histogramme d’une image pour qu’il occupe toute la plage de valeurs possibles. Cette fonction peut aussi être utilisée pour compresser les valeurs d’une image dans la plage de valeurs possibles (par exemple après un calcul exponentiel).
Argument |
Requis ? |
Description |
Valeur par défaut |
|
Image(s) |
||
|
Valeur minimale de l’histogramme à étirer. |
0 |
|
|
Valeur maximale de l’histogramme à étirer. |
65535 |
|
Exemples
linear_stretch(img(0))
linear_stretch(img(0), 10000, 48000)
linear_stretch(img: img(0), hi: 48000)
RL_DECON
Applique l’algorithme de déconvolution de Richardson-Lucy à l’image.
Argument |
Requis ? |
Description |
Valeur par défaut |
|
Image(s) |
||
|
Rayon de la gaussienne |
2.5 |
|
|
Sigma |
2.5 |
|
|
Nombre d’itérations |
5 |
|
Exemples
rl_decon(img(0))
SATURATE
Sature les couleurs d’une image.
Argument |
Requis ? |
Description |
Valeur par défaut |
|
Image(s) |
||
|
Saturation |
||
Exemples
saturate(img(0);1.5)
saturate(img: img(0); factor: 1.5)
SHARPEN
Applique un filtre de netteté à une image.
Argument |
Requis ? |
Description |
Valeur par défaut |
|
Image(s) |
||
|
Taille du noyau |
3 |
|
Exemples
sharpen(img(0))
sharpen(img(0), 7)
sharpen(img: img(0), kernel:7)
Recadrage
AUTOCROP
Rogne automatiquement une image autour du disque solaire. Les dimensions de la zone de rognage sont déterminées par l’ellipse mais aussi les dimensions de l’image. Il est préférable d’utiliser la fonction autocrop2
qui garantit un rognage centré et carré.
Argument |
Requis ? |
Description |
Valeur par défaut |
|
Image(s) |
||
Exemples
autocrop(img: img(0))
autocrop(img(0))
AUTOCROP2
Crée une image centrée et carrée autour du disque solaire.
Argument |
Requis ? |
Description |
Valeur par défaut |
|
Image(s) |
||
|
La largeur de l’image sera le diamètre du disque solaire multiplié par ce facteur. |
1.1 |
|
|
La largeur de l’image sera arrondie à ce multiple. Doit être un multiple de 2. |
16 |
|
Exemples
autocrop2(img: img(0))
autocrop2(img(0))
CROP
Rogne une image aux coordonnées et dimensions spécifiées.
Argument |
Requis ? |
Description |
Valeur par défaut |
|
Image(s) |
||
|
Coordonnée X du coin supérieur gauche de la zone de rognage. |
||
|
Coordonnée Y du coin supérieur gauche de la zone de rognage. |
||
|
Largeur de la zone de rognage. |
||
|
Hauteur de la zone de rognage. |
||
Exemples
crop(img(0), 10, 20, 100, 200)
crop(img: img(0), left: 10, top: 20, width: 100, height: 200)
CROP_AR
Génère une liste d’images correspondant aux taches solaires détectées.
Argument |
Requis ? |
Description |
Valeur par défaut |
|
Image(s) |
||
|
Taille minimale de la tache. |
32 |
|
|
Marge autour de la tache (en %). |
10 |
|
Exemples
crop_ar(continuum))
crop_ar(img:img(0), margin: 15)
CROP_RECT
Réduit l’image aux dimensions indiquées, en garantissant que le centre du disque solaire sera au centre de l’image. Il n’y a pas de changement d’échelle : si le disque solaire n’entre pas dans les dimensions cibles, il sera tronqué.
Argument |
Requis ? |
Description |
Valeur par défaut |
|
Image(s) |
||
|
Largeur de la zone de rognage. |
||
|
Hauteur de la zone de rognage. |
||
Exemples
crop_rect(img(0), 1024, 1024)
crop_rect(img: img(0), width: 200, height: 200)
Extraction de fond
BG_MODEL
Crée un modèle de fond de ciel à partir d’une image, qui peut par exemple être soustraite de l’image d’origine.
Argument |
Requis ? |
Description |
Valeur par défaut |
|
Image(s) |
||
|
Ordre du polynôme. Une valeur supérieure à 3 n’est pas recommandée. |
2 |
|
|
Nombre de sigmas pour la sélection des échantillons. |
2.5 |
|
Exemples
bg_model(img(0); 2.5; 3)
bg_model(img: img(0); sigma: 3)
NEUTRALIZE_BG
C’est une fonction similaire à remove_bg
qui utilise une modélisation polynomiale du fond pour supprimer les gradients. Cette fonction est utilisable sur des images sans information d’ellipse (disque solaire)
Argument |
Requis ? |
Description |
Valeur par défaut |
|
Image(s) |
||
|
Nombre d’itérations de l’algorithme. |
1 |
|
Exemples
neutralize_bg(some_image)
neutralize_bg(img: img(0), iterations: 5)
REMOVE_BG
Supprime le fond d’une image. Cela peut être utilisé lorsque le contraste est très faible (par exemple dans le traitement de l’hélium) et que l’étirement de l’image étire également l’arrière-plan. Ce processus calcule la valeur moyenne des pixels en dehors du disque, puis utilise cela pour effectuer une suppression adaptative en fonction de la distance par rapport au limbe, afin de préserver les structures lumineuses autour du limbe.
Argument |
Requis ? |
Description |
Valeur par défaut |
|
Image(s) |
||
|
Tolerance |
0.9 |
|
Exemples
remove_bg(some_image)
remove_bg(img: img(0), tolerance: .5)
Rotations et redimensionnement
HFLIP
Inverse horizontalement une image.
Argument |
Requis ? |
Description |
Valeur par défaut |
|
Image(s) |
||
Exemples
hflip(some_image)
hflip(img: img(0))
RADIUS_RESCALE
Méthode de redimensionnement relative qui peut être utile pour faciliter les mosaïques d’images. Elle sera donc typiquement utilisée en traitement par lots. Elle permet de redimensionner un ensemble d’images pour que toutes aient le même rayon solaire. Elle procède à une recherche du disque pour chaque image, trouve celle qui a le disque le plus grand, et redimensionne toutes les autres images pour qu’elles aient le même rayon solaire.
Argument |
Requis ? |
Description |
Valeur par défaut |
|
Image(s) |
||
Exemples
radius_rescale(some_image)
radius_rescale(images: my_list)
RESCALE_ABS
Redimensionne une image aux dimensions absolues spécifiées.
Argument |
Requis ? |
Description |
Valeur par défaut |
|
Image(s) |
||
|
Largeur de l’image |
||
|
Hauteur de l’image |
||
Exemples
rescale_abs(img(0), 100, 100)
rescale_abs(img: img(0), width: 100, height: 100)
RESCALE_REL
Redimensionne une image en appliquant un facteur de redimensionnement.
Argument |
Requis ? |
Description |
Valeur par défaut |
|
Image(s) |
||
|
Facteur de redimensionnement horizontal |
||
|
Facteur de redimensionnement vertical |
||
Exemples
rescale_rel(img(0), .5, .5)
rescale_rel(img: img(0), sx: 0.5, sy: 0.5)
ROTATE_DEG
Applique une rotation à une image, en degrés.
Argument |
Requis ? |
Description |
Valeur par défaut |
|
Image(s) |
||
|
Angle |
||
|
Valeur de remplissage pour les pixels en dehors de l’image. |
||
|
Redimensionner l’image pour s’adapter à la rotation. |
||
Exemples
rotate_deg(img(0); 30)
rotate_deg(img: img(0); angle: 30)
ROTATE_LEFT
Applique une rotation à gauche.
Argument |
Requis ? |
Description |
Valeur par défaut |
|
Image(s) |
||
Exemples
rotate_left(img(0))
rotate_left(img: img(0))
ROTATE_RAD
Applique une rotation à une image, en radians.
Argument |
Requis ? |
Description |
Valeur par défaut |
|
Image(s) |
||
|
Angle |
||
|
Valeur de remplissage pour les pixels en dehors de l’image. |
||
|
Redimensionner l’image pour s’adapter à la rotation. |
||
Exemples
rotate_rad(img(0); 2.1)
rotate_rad(img: img(0); angle: 2.1)
ROTATE_RIGHT
Applique une rotation à droite.
Argument |
Requis ? |
Description |
Valeur par défaut |
|
Image(s) |
||
Exemples
rotate_right(img(0))
rotate_right(img: img(0))
VFLIP
Inverse verticalement une image.
Argument |
Requis ? |
Description |
Valeur par défaut |
|
Image(s) |
||
Exemples
vflip(some_image)
vflip(img: img(0))
Analyse
A2PX
Calcule le nombre de pixels correspondant à une distance en Angstroms. La distance est déterminée en calculant la dispersion, qui ne sera correcte que si vous avez bien renseigné la taille des pixels de la caméra, ainsi que votre spectrohéliographe.
Argument |
Requis ? |
Description |
Valeur par défaut |
|
Angstroms |
||
|
Longueur d’onde de référence en Angstroms |
||
Exemples
a2px(1.2)
a2px(a: 1.2, ref: 6328)
CONTINUUM
Génère une image du continuum autour de la raie étudiée. Cette fonction diffère de l’image continuum classique au sens où il ne s’agit pas d’une image unique calculée à la différence de pixels fixe de 15 pixels, mais d’une image calculée à partir de la médiane d’un ensemble d’images.
Argument |
Requis ? |
Description |
Valeur par défaut |
Exemples
continuum()
FIND_SHIFT
Calculee un décalage en pixels par rapport à la raie détectée. La distance est déterminée en calculant la dispersion, qui ne sera correcte que si vous avez bien renseigné la taille des pixels de la caméra, ainsi que votre spectrohéliographe.
Argument |
Requis ? |
Description |
Valeur par défaut |
|
Longueur d’onde recherchée en Angstroms ou nom de la raie |
||
|
Longueur d’onde de référence en Angstroms |
||
Exemples
find_shift(5875.62)
find_shift(wl: 5875.62, ref: 5895.92)
PX2A
Calcule le nombre d’angstroms correspondant à une distance en pixels. La distance est déterminée en calculant la dispersion, qui ne sera correcte que si vous avez bien renseigné la taille des pixels de la caméra, ainsi que votre spectrohéliographe.
Argument |
Requis ? |
Description |
Valeur par défaut |
|
pixels |
||
|
Longueur d’onde de référence en Angstroms |
||
Exemples
px2a(24)
px2a(px: 24, ref: 6328)
Dessin
DRAW_ARROW
Dessine une flèche sur l’image.
Argument |
Requis ? |
Description |
Valeur par défaut |
|
Image(s) |
||
|
Début de la flèche (coordonnée X) |
||
|
Début de la flèche (coordonnée Y) |
||
|
Fin de la flèche (coordonnée X) |
||
|
Fin de la flèche (coordonnée Y) |
||
|
Épaisseur de la flèche |
1 |
|
|
Couleur de la flèche |
||
Exemples
draw_arrow(img(0), 100, 100, 200, 200, 2, "ff0000")
draw_arrow(img:img(0), x1:100, y1:100, x2:200, y2:200, color: "ff0000")
DRAW_CIRCLE
Dessine un cercle sur l’image.
Argument |
Requis ? |
Description |
Valeur par défaut |
|
Image(s) |
||
|
Coordonnéee X du centre du cercle |
||
|
Coordonnée Y du centre du cercle |
||
|
Épaisseur de la flèche |
1 |
|
|
Couleur de la flèche |
||
Exemples
draw_circle(img(0), 100, 100, 2)
draw_circle(img:img(0), cx:100, cy:100, color: "ff0000")
DRAW_EARTH
Dessine la Terre sur l’image, à l’échelle du disque solaire
Argument |
Requis ? |
Description |
Valeur par défaut |
|
Image(s) |
||
|
Coordonnée X du centre de la Terre |
||
|
Coordonnée Y du centre de la Terre |
||
Exemples
draw_earth(img(0), 100, 100)
draw_earth(img:img(0), x:100, y:100)
DRAW_GLOBE
Dessine un globe dont l’orientation et le diamètre correspond aux paramètres solaires détectés.
Argument |
Requis ? |
Description |
Valeur par défaut |
|
Image(s) |
||
|
angle P |
angle P |
|
|
Angle b0 |
b0 |
|
Exemples
draw_globe(img(0))
draw_globe(img:img(0), angleP: 0)
DRAW_OBS_DETAILS
Affiche sur l’image les données d’observation
Argument |
Requis ? |
Description |
Valeur par défaut |
|
Image(s) |
||
|
Coordonnée X |
50 |
|
|
Coordonnée Y |
50 |
|
Exemples
draw_obs_details(img(0), 100, 100)
draw_obs_details(img:img(0), x:100, y:100)
DRAW_RECT
Dessine un rectangle sur l’image.
Argument |
Requis ? |
Description |
Valeur par défaut |
|
Image(s) |
||
|
Coordonnéee X du coin supérieur gauche du rectangle |
||
|
Coordonnée Y du coin supérieur gauche du rectangle |
||
|
Largeur du rectangle |
||
|
Hauteur du rectangle |
||
|
Épaisseur du trait |
1 |
|
|
Couleur de la ligne |
||
Exemples
draw_rect(img(0), 100, 100, 300, 200)
draw_rect(img:img(0), left:100, top:100, color: "ff0000")
DRAW_SOLAR_PARAMS
Affiche sur l’image les paramètres solaires
Argument |
Requis ? |
Description |
Valeur par défaut |
|
Image(s) |
||
|
Coordonnée X |
top right |
|
|
Coordonnée Y |
top right |
|
Exemples
draw_solar_params(img(0), 100, 100)
draw_solar_params(img:img(0), x:100, y:100)
DRAW_TEXT
Ecrit du texte sur l’image
Argument |
Requis ? |
Description |
Valeur par défaut |
|
Image(s) |
||
|
Coordonnéee X |
||
|
Coordonnée Y |
||
|
Texte à écrire |
||
|
Taille de la police |
auto |
|
|
Couleur de la flèche |
||
Exemples
draw_circle(img(0), 100, 100, 2)
draw_circle(img:img(0), cx:100, cy:100, color: "ff0000")
Animations
ANIM
Crée une animation à partir d’une série d’images.
Argument |
Requis ? |
Description |
Valeur par défaut |
|
The list of images |
||
|
Délai entre chaque trame (en ms) |
250 |
|
Exemples
anim(range(0,10))
anim(images: range(0,10), delay: 100)
TRANSITION
Interpole des images entre elles. Par défaut, l’interpolation est linéaire et elle créera exactement le nombre d’images spécifié. Cependant, si une unité est spécifiée, alors le comportement sera différent: le nombre d’étapes correspond au nombre d’images à créer, pour une unité de temps donnée, pour le temps écoulé entre les deux images. Par exemple, si une image a été prise à 10:00 et l’autre à 10:02, et que l’unité est ipm
, que le nombre d’étapes est 10, alors 20 images seront créées. Cela permet de créer des transitions plus douces lorsque les fichiers SER n’ont pas été enregistrés à intervalles réguliers.
Argument |
Requis ? |
Description |
Valeur par défaut |
|
Image(s) |
||
|
Nombre d’images intermédiaires à générer. |
||
|
Type d’interpolation: |
linear |
|
|
Unité de l’interpolation: |
||
Exemples
transition(list(img(0), img(1)), 10)
transition(images: my_imges, steps: 10, type: ease_in, unit: 'ipm')
Empilement et composition de mosaïque
DEDISTORT
Permet de corriger la distorsion d’une image. Elle dispose de 2 modes d’utilisation distincts. Dans le premier mode, on lui fournit une image de référence et une image à corriger, ainsi que 3 paramètres optionnels : la taille des tuiles, l’échantillonnage et la valeur du fond de ciel. L’image renvoyée sera corrigée en s’approchant au possible de l’image de référence, la rendant par exemple utilisable pour du stacking. Dans le second mode, on lui fournit une liste d’images à corriger (1er paramètre) et une liste d’images déja corrigées, auquel cas les paramètres de correction de chaque image est pris en utilisant l’image de même index dans la liste des images déja corrigées. Ceci peut-être utile par exemple lorsqu’on calcule la distorsion sur le centre de la raie (décalage 0) et qu’on souhaite appliquer les mêmes corrections à des images de décalage différent.
Argument |
Requis ? |
Description |
Valeur par défaut |
|
Image(s) de référence |
||
|
Images à corriger. |
||
|
Taille des tuiles. |
32 |
|
|
Echantillonnage. Une valeur de 0.5 pour une taille de tuile de 32 pixels signifie qu’il y aura un échantillon tous les 16 pixels. |
0.5 |
|
|
Valeur du fond de ciel. |
||
Exemples
crop_rect(img(0), 1024, 1024)
crop_rect(img: img(0), width: 200, height: 200)
MOSAIC
Permet de créer une mosaïque d’images.
Argument |
Requis ? |
Description |
Valeur par défaut |
|
Images à assembler. |
||
|
Taille des tuiles |
64 |
|
|
Facteur d’échantillonnage |
0.25 |
|
Exemples
mosaic(some_images)
mosaic(images: some_images, ts: 128)
STACK
Empile plusieurs images.
Argument |
Requis ? |
Description |
Valeur par défaut |
|
Images à empiler. |
||
|
Taille des tuiles |
32 |
|
|
Facteur d’échantillonnage |
0.5 |
|
|
Méthode de sélection de la meilleure image. Peut-être |
sharpness |
|
Exemples
stack(some_images)
stack(some_images, 64; .5; "eccentricity")
stack(images: some_images, ts: 128, sampling: 0.5, select: "sharpness")
STACK_REF
Sélectionne une image de référence pour le stacking.
Argument |
Requis ? |
Description |
Valeur par défaut |
|
Images à empiler. |
||
|
Méthode de sélection de la meilleure image. Peut-être |
sharpness |
|
Exemples
stack_ref(some_images)
stack_ref(some_images, "eccentricity")
stack_Ref(images: some_images, select: "sharpness")
Fonctions personnalisées
En plus des fonctions fournies par JSol’Ex, il est possible de définir vos propres fonctions, qui combinent des fonctions existantes. Par exemple, disons que vous souhaitiez dessiner le globe, les détails techniques et les paramètres solaires sur plus d’une image. Votre script pourrait ressembler à ceci :
image1=draw_obs_details(draw_solar_params(draw_globe(img(0))))
image2=draw_obs_details(draw_solar_params(draw_globe(auto_contrast(img(0);1.5))))
Au lieu de répéter les mêmes appels de fonction sur plusieurs images, nous pouvons déclarer une fonction :
[fun:decorate img] (1)
result=draw_obs_details(draw_solar_params(draw_globe(img))) (2)
[outputs]
image1=decorate(img(0)) (3)
image2=decorate(auto_contrast(img(0);1.5)) (4)
1 | La déclaration de la fonction. Le nom de la fonction est decorate , et elle prend un seul argument, img . |
2 | La fonction doit se terminer par une affectation à la variable result . |
3 | La fonction est ensuite appelée avec l’image img(0) . |
4 | La fonction peut également être appelée avec l’image auto_contrast(img(0);1.5) . |
Les fonctions doivent être déclarées au début du script.
Elles peuvent prendre n’importe quel nombre d’arguments, mais elles doivent toujours retourner une valeur dans la variable result
.
Si vous déclarez une fonction, vous devez avoir une section qui sépare les déclarations de fonctions de votre script principal (pour la section [outputs]
).
Une fonction peut avoir des expressions intermédiaires et peut appeler d’autres fonctions. Par exemple, créons une fonction qui affichera notre image avec un titre :
[fun:titled img title] (1)
decorated=decorate(img) (2)
result=draw_text(decorated, 10, 10, title)
[fun:decorate img]
result=draw_obs_details(draw_solar_params(draw_globe(img)))
[outputs]
image1=titled(img(0)) (3)
image2=titled(auto_contrast(img(0);1.5)) (4)
1 | La déclaration de la fonction titled . Elle prend 2 arguments : img et title . |
2 | La fonction titled appelle la fonction decorate , puis ajoute un titre à l’image. |
3 | La fonction titled est ensuite appelée avec l’image img(0) . |
4 | La fonction titled peut également être appelée avec l’image auto_contrast(img(0);1.5) . |
Passer une liste à une fonction
Le premier argument d’une fonction est toujours traité différemment.
Si une liste est utilisée, alors la fonction sera appelée pour chaque élément de la liste, puis les résultats seront collectés dans une liste.
Par exemple, si nous appelons la fonction |
Inclure d’autres scripts
Il est possible d’inclure d’autres scripts dans votre script.
Cela peut être utile si vous avez un ensemble de fonctions que vous souhaitez réutiliser dans plusieurs scripts.
Par exemple, nous pourrions extraire les définitions de fonctions de l’exemple précédent et les mettre dans un fichier séparé, functions.math
:
[fun:decorate img]
result=draw_obs_details(draw_solar_params(draw_globe(img)))
[fun:titled img title]
decorated=decorate(img)
result=draw_text(decorated, 10, 10, title)
Ensuite, il peut être inclus dans un autre script :
[include "functions"]
[outputs]
image1=titled(img(0), "Ma première image")
image2=titled(auto_contrast(img(0);1.5), "Ma deuxième image")
Les inclusions sont résolues par rapport au script qui les inclut. |
Génération de script à distance
Cette fonctionnalité est expérimentale et peut évoluer à l’avenir. Elle est conçue pour les utilisateurs avancés qui sont à l’aise avec la programmation. |
ImageMath est un langage d’expression. Il ne prend pas en charge les structures de contrôle comme les boucles ou les conditions, ce qui peut parfois être limitant. De plus, il se peut que vous souhaitiez effectuer des opérations qui ne sont pas disponibles dans le langage lui-même.
Pour prendre en charge ces cas d’utilisation avancés, une fonction spéciale nommée remote_scriptgen
est disponible.
Cette fonction appellera un service qui sera responsable de générer un script qui contribuera à de nouvelles variables dans le contexte actuel.
La fonction accepte un seul argument, qui est une URL vers le service.
JSol’Ex créera alors une requête POST
à cette URL, avec une charge utile JSON contenant le contexte actuel, c’est-à-dire la liste des variables avec leurs valeurs au moment de l’appel, mais aussi le contexte comme les paramètres de traitement ou la longueur d’onde détectée.
Le payload JSON a 2 entrées principales : variables
et params
.
{
"variables": {
... une clé par variable ...
},
"context": {
... les paramètres du processus ...
}
}
Les variables peuvent être des valeurs simples, comme des nombres ou des chaînes de caractères, mais aussi des tableaux ou des objets comme des images :
{
"variables": {
"detectedWavelen": 6562.8099999999995,
"detectedDispersion": 0.10878780004221283,
"l0": "4.4165",
"src": {
"type": "image",
"width": 1424,
"height": 1424,
"file": "/tmp/jsolex/1960308/image9339121918435728514.fits",
"metadata": {
"sourceInfo": {
"serFileName": "12_08_34.ser",
"parentDirName": "christian",
"dateTime": "2021-09-05T10:08:34.806652200Z[UTC]"
},
"pixelShiftRange": {
"minPixelShift": -20.0,
"maxPixelShift": 40.0,
"step": 6.0
},
"solarParameters": {
"carringtonRotation": 2248,
"b0": 0.12636308214692193,
"l0": 4.416504789595021,
"p": 0.38650968395297775,
"apparentSize": 0.0091870061684479
},
"pixelShift": {
"pixelShift": 0.0
},
"transformationHistory": {
"transforms": [
"Rotation à gauche",
"Retournement",
"Réduction de bandes (taille de bande : 24 passes : 16)",
"Correction de géométrie",
"Recadrage automatique",
"ImageMath: img(0)",
"ImageMath: img(0)",
"ImageMath: img(0)",
"ImageMath: src=img(0)",
"ImageMath: range(-1;1;.5)",
"ImageMath: range(-1;1;.5)",
"ImageMath: range(-1;1;.5)",
"ImageMath: range(-1;1;.5)",
"ImageMath: img(0)",
"ImageMath: img(0)",
"ImageMath: img(0)",
"ImageMath: src=img(0)"
]
},
"ellipse": {
"a": 0.7071067811865355,
"b": -1.1224941413357953E-13,
"c": 0.7071067811865596,
"d": -1006.9200564095466,
"e": -1006.9200564095809,
"f": 423490.4527558379
},
"generatedImageMetadata": {
"kind": "IMAGE_MATH",
"title": "src",
"name": "batch/2025-03-26T225606/src/0000_12_08_34_src"
}
}
},
"blackPoint": "283.533",
"angleP": "0.3865",
"some_var": 123.0,
"b0": "0.1264",
"carrot": "2248"
}
}
Dans le cas d’une image, l’objet aura une clé type
avec la valeur image
.
Le fichier sera disponible uniquement au format FITS.
Le chemin du fichier est le chemin vers le fichier FITS, qui est un fichier temporaire, sur l’hôte qui exécute JSol’Ex.
Par conséquent, vous ne pourrez accéder à ce fichier que depuis le même hôte !
Cela peut également être utilisé pour générer de nouvelles images, qui peuvent être chargées dans JSol’Ex si le script retourné contient une opération |
Le service doit retourner un objet JSON contenant une clé script
, avec le script à exécuter dans JSol’Ex.
Il peut aussi renvoyer un objet avec une clé error
, qui sera affichée à l’utilisateur.
Les scripts retournés par le serveur sont interprétés dans un contexte séparé, mais ils partagent les variables et fonctions utilisateur du script appelant. Seule la section outputs contribuera à de nouvelles variables dans le contexte.
Par exemple, si un serveur retourne le script suivant :
[tmp]
base=auto_contrast(img(0);1.5)
[outputs]
final=draw_obs_details(draw_solar_params(draw_globe(base)))
Alors seule la variable final
sera visible dans le script appelant après exécution.
Lorsqu’un script appelle la fonction |
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]
# The shifting between the helium line and the detected line (in pixels)
Line=5875.62
HeliumShift=find_shift(Line)
# Banding correction width and number of iterations
BandWidth=25
BandIterations=20
# Contrast adjustment
Gamma=1.5
# Autocrop factor (of diameter)
AutoCropFactor=1.1
## Temporary variables
[tmp]
helium_raw = img(HeliumShift) - continuum()
helium_fixed = fix_banding(helium_raw;BandWidth;BandIterations)
cropped = autocrop2(auto_contrast(helium_fixed;Gamma);AutoCropFactor)
## Let's produce the images now!
[outputs]
helium_mono = cropped
helium_color = colorize(helium_mono, Line)
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 Line
) et une valeur 5875.62
.
La deuxième variable, HeliumShift
, est calculée à partir de la fonction find_shift
, qui prend en paramètre la variable Line
(et permet de déterminer le décalage en pixels de la ligne par rapport à celle détectée).
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.
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 3 images temporaires :
-
helium_raw
est l’image de la raie Hélium, décalée par rapport à la raie détectée et à laquelle on a soustrait l’image continuum. -
helium_fixed
est l’imagehelium_raw
à laquelle on a appliqué l’algorithme de correction de transversalliums. -
cropped
est l’imagehelium_fixed
à laquelle on a appliqué un rognage automatique et un ajustement de contraste.
Au final, la section [outputs]
déclare les images qui nous intéressent :
-
helium_mono
est l’imagecropped
telle quelle, en noir et blanc. -
helium_color = colorize(fix_banding(helium_raw;BandWidth;BandIterations), "Helium (D3)")
permet d’obtenir une version colorisée.
Vous pouvez mettre des commentaires sur une ligne commençant par # ou //
|
Réduire la taille des fichiers SER
Il n’est pas rare d’avoir des fichiers SER qui contiennent beaucoup de trames vides au début ou à la fin, en raison de la façon dont nous capturons généralement les vidéos : nous commençons la capture, puis nous attendons que le montage se stabilise, enfin nous arrêtons la capture. De plus, notre fenêtre de rognage peut être un peu trop grande pour ce que nous voulons réellement étudier.
En conséquence, les fichiers SER stockés sur le disque sont généralement beaucoup plus grands que ce qu’ils devraient être. Depuis JSol’Ex 2.10, une nouvelle option est disponible à la fin du traitement d’un fichier. Vous pouvez cliquer sur le bouton "Réduire SER" en haut à droite de l’interface, ce qui ouvrira une nouvelle fenêtre :

Cette fenêtre est pré-remplie avec des paramètres déduits du fichier traité. En particulier, les trames de début et de fin, ainsi que les valeurs X mininum et maximum (largeur) sont déterminées automatiquement à partir de la détection du disque solaire dans la vidéo. Une marge raisonnables de 10% est ajoutée, ce qui signifie que parfois, la première et la dernière trame peuvent en fait correspondre à la vidéo complète si vous avez réellement une vidéo où le soleil apparaît rapidement dans le champ de vision.
Les paramètres "pixels vers le haut"/"pixels vers le bas" correspondent au nombre de pixels que vous souhaitez conserver dans le fichier SER cible autour de la ligne spectrale. Une fois de plus ces valeurs sont déduites de ce qu’il est possible de faire en corrigeant le "sourire" (courbature de la ligne spectrale), mais il peut être particulièrement intéressant de les réduire, car cela aura un impact important sur la taille du fichier. Cependant, réduire le nombre de pixels vers le haut/bas supprimera des informations de la vidéo (vous ne pourrez pas calculer d’images avec des décalages de pixels plus importants), alors soyez toujours prudent de ne pas trop les réduire.
Une fois que vous êtes satisfait des paramètres, cliquez sur "Réduire" et un nouveau fichier SER sera créé dans le même dossier que l’original, avec le suffixe _trimmed
.
Il est important de savoir que la vidéo rognée aura également la correction du sourire appliquée, ce qui signifie que la ligne spectrale sera centrée dans la vidéo et que chaque ligne sera parfaitement horizontale. Cette information est utilisée par JSol’Ex si vous décidez de traiter la vidéo rognée, de sorte que vous n’ayez pas à recalculer la correction du sourire.
Il est important de comprendre que la réduction de fichier SER est une opération destructive : si vous réduisez le nombre de trames ou les valeurs min x/max x, alors vous tronquez potentiellement le disque solaire ou des caractéristiques comme les protubérances. Si vous choisissez des valeurs trop faibles pour les pixels vers le haut/bas, alors vous réduisez la bande passante de l’observation, ce qui signifie par exemple que vous ne pourrez plus générer d’image de continuum. Dans les deux cas, le résultat du traitement de la vidéo rognée sera différent de l’original. |
Voici un exemple de résultat :
Et la version réduite :
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:
-
les fichiers seront systématiquement enregistrés, indépendemment de la case "enregistrement automatique des images"
-
les images ne s’affichent pas dans l’interface, mais une liste des fichiers traités à la place

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.
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. |
Passage en revue des images traitées en lot
Une fois qu’un lot a été traité, il est possible de passer en revue les images générées. Ceci permettra, par exemple, de ne conserver que les images avec un disque sans passage nuageux, ou les images sans déformations.
Pour ce faire, dans les options de traitement, dans l’onglet "divers", cochez la case "Passer en revue les images après traitement en lot" :

Lorsque le traitement est terminé, une nouvelle fenêtre s’ouvre, vous permettant de passer en revue les images traitées :

En haut à droite, vous pouvez choisir entre rejeter une image, la conserver, ou la définir comme la meilleure image. La meilleure image est alors affichée à gauche, et l’image courante à droite. Vous pouvez ainsi comparer chaque image à la meilleure image, et décider si vous la conservez ou non.
Dans la liste de gauche, vous disposez de la liste des images générées pour chaque fichier SER. En bas à droite, vous pouvez passer à l’image suivante ou précédente, et terminer le processus.
Lorsque vous avez fini, la fenêtre suivante s’ouvre :

Elle vous permet de choisir ce que vous voulez faire des images qui ont été rejetées : les conserver, les supprimer, ou les déplacer dans un sous-dossier (par défaut, elles seront déplacées). De même, vous pouvez choisir ce que vous voulez faire des fichiers SER qui ont servi à générer ces images rejetées : les conserver, les supprimer, ou les déplacer dans un sous-dossier.
Si vous utilisez un script en mode batch, la partie du script ne s’exécutera que pour les images que vous avez conservées, ce qui permettra donc, par exemple, de faire un stacking uniquement sur les images de qualité.
A noter que dans les fonctions stack
et stack_ref
, vous disposerez alors de la possiblitité de spécifier la méthode de sélection de la référence manual
, qui choisira alors la meilleure image que vous avez sélectionnée.
Extensions d’ImageMath disponibles en mode batch
Lorsque vous utilisez le mode batch, une nouvelle section est disponible dans les scripts ImageMath. Cette section permet de composer des images à partir du résultat du traitement de chaque image individuelle. Typiquement, ceci peut-être utilisé pour faire de l’empilement.
Cette section doit apparaître en fin de script et se délimite par le bloc [[batch]]
:
#
# Empile des images en utilisant le mode batch
#
[params]
# banding correction width and iterations
bandingWidth=25
bandingIterations=3
# autocrop factor
cropFactor=1.1
# contrast adjustment
clip=.8
[tmp]
corrected = fix_banding(img(0);bandingWidth;bandingIterations) (1)
contrast_fixed = clahe(corrected;clip) (2)
[outputs]
cropped = autocrop2(contrast_fixed;cropFactor;32) (3)
# This is where we stack images, simply using a median
# and assuming all images will have the same output size
[[batch]] (4)
[outputs]
stacked=sharpen(median(cropped)) (5)
1 | Pour chaque film, on calcule une image intermédiaire corrigée (qui ne sera pas stockée sur disque) |
2 | On applique une correction de contraste sur cette image corrigée |
3 | Important pour l’empilement : on réduit les images à un carré centré sur le disque solaire et on arondit les dimensions à un multiple de 32 pixels. Il s’agit de notre image de sortie pour chaque film du lot. |
4 | On déclare une section [[batch]] pour décrire la sortie du mode batch |
5 | Une image nommée stacked sera calculée en utilisant la médiane des images cropped |
Il est important de bien comprendre que seules les images apparaissant dans la partie [outputs]
du traitement individiduel peuvent être utilisées dans la section [[batch]]
.
Ainsi, une image cropped
apparaissant dans la partie individuelle devient implicitement une liste d’images dans la section [[batch]]
: on travaille bien sur la liste des images générées dans le lot !
Certaines fonctions comme img
ne sont pas disponibles dans le mode batch
.
Si vous avez besoin d’images individuelles, vous devez les stocker dans une variable de sortie.
Par exemple:
[outputs]
frame=img(0) (1)
[[batch]]
[outputs]
video=anim(frame) (2)
1 | Pour que img(0) soit disponible dans la section batch , on l’assigne dans une variable nommée frame |
2 | On crée une animation dont chaque image est constituée d’une frame |
Scripts indépendants
Une dernière façon d’utiliser des scripts est de réutiliser des résultats de sessions précédentes (typiquement des images traitées lors d’une ou plusieurs sessions) sans avoir besoin de traiter une nouvelle vidéo.
Pour se faire, vous pouvez passer par le menu "Outils" puis "Editeur ImageMath".
L’interface qui apparaît est exactement la même que lors du traitement d’une vidéo ou d’un lot de vidéos.
La principale différence dans ce mode est que les images doivent être chargées avec les fonctions load
ou load_many
(au lieu d’utiliser img
).
Si vous utilisez ce mode, il est important de charger des images enregistrées au format FITS. En effet, ces images contiennent des métadonnées telles que les ellipses détectées, les paramètres de traitement, etc. qui permettent de faire les mêmes traitements avec des images enregistrées sur disque que ceux obtenus dans une session de traitement classique. |
Mesures
Mesures de décalage vers le rouge
Si vous traitez une image H-alpha, JSol’Ex peut automatiquement rechercher dans l’image des régions où le redshift (décalage vers le rouge ou vers le bleu) est particulièrement fort.
Pour se faire, vous devez soit sélectionner le mode "complet" lors du traitement, soit cocher la case "Mesures de décalage vers le rouge" dans la sélection personnalisée des images.
Les mesures ne seront valides que si la taille des pixels renseignée est correcte et que vous utilisez un Sol’Ex (d’autres spectrohéliographes ont des focales différentes).
Lors du traitement, une image supplémentaire sera générée avec les régions entourées en rouge et la vitesse associée.
De plus, si vous sélectionnez les images de débug, les parties du spectre ayant permis de trouver ces régions seront affichées.
Enfin, une fois la détection effectuée, il vous est possible de générer 2 nouveaux types de rendus, en vous rendant sur l’onglet "Redshift":

La taille correspond à la taille minimale de la région à capturer, en pixels. Une petite région sera centrée autour du filament détecté, mais pourra être assez pixelisée selon les cas. La marge permet de choisir combien, en décalage de pixels, prendre de marge par rapport à ce qu’a détecté JSol’Ex. Par exemple, JSol’Ex peut trouver un décalage maximum de 20 pixels, mais vous pouvez souhaiter ajouter 2 ou 4 pixels de marge pour une animation et bien voir apparaître le filament.
Enfin, sélectionnez le type de rendu :
-
Animation : génère une vidéo dont chaque image est décalée de 0.25 pixels
-
Panneau : génère une seule image, un panneau où chaque case correspond à un décalage de pixels différent

Mesures avec l’analyseur de vidéo
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 → Analyseur de vidéo". Le logiciel va calculer l’image moyenne pour la vidéo puis vous présenter cette fenêtre:

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

-
sélectionner le mode "Images"

-
Augmenter le contraste

-
Choisir une image au bord du limbe

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

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:

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.
Empilement et création de mosaiques
JSol’Ex dispose d’un outil permettant d’empiler des images et de créer des mosaïques. Les 2 outils sont très similaires, mais l’empilement est plus simple à utiliser. L’empilement consiste à prendre plusieurs images de la même région du soleil et à en faire une seule image, en alignant les détails et en moyennant les pixels. La mosaïque consiste à prendre plusieurs images de régions différentes du soleil et à les assembler pour former une image plus grande.
Les 2 outils sont disponibles en passant par le menu "Outils" puis "Empilement et création de mosaïques".
La fenêtre qui s’ouvre est la suivante:

A gauche, vous pouvez créer des panneaux d’images à empiler. Si vous ne créez qu’un seul panneau, il s’agira d’un empilement simple. Si vous créer plusieurs panneaux, il s’agira d’une mosaïque. Un panneau contiendra une ou plusieurs images, qui seront empilées ensemble. Pour créer un panneau, vous pouvez, au choix: - cliquer sur le bouton "+" et sélectionner les images à empiler - faire un glisser-déposer d’une ou plusieurs images depuis votre explorateur de fichiers

Dans l’image ci-dessus, nous avons créé 2 panneaux. Le premier contient 3 images qui seront empilées pour faire le panneau nord, et le second contient 2 images qui seront empilées pour faire le panneau sud.
Les options d’empilement sont visibles à droite. Il n’est pas recommandé de les modifier, sauf si vous savez ce que vous faites. Les options sont les suivantes:
-
la taille des tuiles permet de découper l’image en tuiles pour l’empilement. Plus la taille est petite, plus l’empilement sera précis mais le calcul sera plus long et il ne sera pas possible de découvrir des décalages importants entre les images.
-
l’échantillonage permet de déterminer où seront pris les échantillons servant à calculer le modèle de distorsion. Un facteur de 0.5 combiné à des tuiles de 32 pixels signifie par exemple un échantillon tous les 16 pixels.
-
Forcer le recalcul des ellipses permet de recalculer l’ellipse (ou le cercle) du disque solaire pour chaque image. Ceci est utile notamment si vous utilisez des images venant d’un autre logiciel ou que les ellipses ont été mal détectées.
-
Corriger la géométrie permet de rendre le disque solaire parfaitement circulaire, ce qui est généralement une bonne idée si les images que vous importez n’ont pas été corrigées.
Le script de post-traitement vous permet de sélectionner un script ImageMath
à appliquer à chaque image après empilement.
Dans un script de post-traitement, l’image empilée est disponible sous le nom de image . Par exemple, vous pouvez créer un script qui appliquera une déconvolution en utilisant la formule rl_decon(image) .
|
Les autres options disponibles sont celles de sélection des formats de fichier. Si vous avez créé plusieurs panneaux, nous passons alors en mode mosaïque. Non seulement les images seront empilées dans chaque panneau, mais chaque image empilée sera ensuite assemblée pour former une mosaïque.
Il est recommandé de ne PAS utiliser d’images traitées (par exemple avec amélioration de contraste) pour la création de mosaïques. En effet, ces images sont plus difficiles à aligner. Il est donc recommandé d’utiliser les images recon (corrigée géométriquement) ou raw (brute).
|

Si vous souhaitez simplement empiler des images sans faire de mosaique, vous pouvez désactiver l’option "Créer la mosaïque". Dans le cas contraire, vous disposez de paramètres qu’il est possible de modifier, encore une fois, si vous savez ce que vous faites. Nous recommandons de ne pas changer la taille des tuiles et le chevauchement pour la mosaïque, sauf si vous obtenez des images déformées ou non reconstruites.
Vous pouvez aussi choisir un script de post-traitement à appliquer après la création de la mosaïque.
Calculatrice d’exposition optimale
Dans le menu "Outils", vous trouverez la calculatrice d’exposition optimale. Cette calculatrice vous permet de déterminer le temps d’exposition optimal que vous devrez utiliser pour obtenir une image du soleil parfaitement ronde et éviter le sous-échantillonage.
Entrez :
-
la taille des pixels de votre caméra et le binning utilisé
-
la longueur focale de votre instrument
-
la vitesse du scan (en multiple de la vitesse sidérale, par exemple 2, 4, 8, …)
-
la date d’observation
Le logiciel calculera alors le framerate recommandé annsi que l’exposition optimale en fonction de ces paramètres, en millisecondes.
Notez que vous pouvez changer le type de spectrohéliographe utilisé, ce qui peut changer le calcul de l’exposition optimale.
Explorateur de spectre
L’explorateur de spectre est disponible dans le menu "Outils". Il permet de visualiser l’aspect du spectre tel qu’il serait vu dans un logiciel de capture tel que SharpCap ou FireCapture. Il vous permet de vous "promener" dans le spectre :

Dans la case "Longueur d’onde", vous pouvez saisir une longueur d’onde en Angströms. En cliquant sur "Aller" ou en tapant entrée, le spectre sera automatiquement centré autour de cette longueur d’onde :

Une ligne pointillée bleue est ajoutée, vous permettant de bien repérer la ligne.
Alternativement, vous pouvez rechercher directement une ligne spectrale remarquable en la sélectionnant dans la boîte à côté du bouton "Aller".
Lorsque vous cliquez sur "Coloriser", le spectre est alors colorisé de façon à vous donner une idée d’où vous vous situez dans le spectre visible (nous recommandons cependant de rester en niveaux de gris pour repérer précisément une raie) :

Sur la deuxième ligne, vous avez la possibilité de choisir le spectrohéliographe qui a été utilisé (celui-ci aura une influence sur la dispersion spectrale calculée), ainsi que de préciser la taille des pixels (pensez à multiplier par le binning).
Si vous cochez la case "Ajuster dispersion", la dimension du spectre est automatiquement ajustée pour correspondre précisément à la dispersion par pixel.
Vous pouvez zoomer soit en cliquant sur les boutons "+" et "-", ou, plus simplement, en appuyant sur "CTRL" et en faisant tourner votre molette de souris. Si vous zoomez, l’ajustement automatique est désactivé (puisqu’il ne correspond plus à la dispersion exacte par pixel).
Identification automatique
Enfin, JSol’Ex propose une fonctionnalité encore expérimentale : vous pouvez cliquer sur le bouton "Identifier" pour ouvrir une fenêtre de sélection de fichier.
Choisissez alors une image du spectre, telle que capturée par votre logiciel. JSol’Ex essayera alors de retrouver dans quelle partie du spectre elle se trouve :

Si l’identification fonctionne, votre image sera affichée en transparence, par dessus le spectre, sur la partie gauche de l’image, ce qui vous permettra de vérifier facilement si l’identification a réussi.
Vous pouvez masquer l’image en transparence en cliquant sur le bouton "Cacher".
Serveur Web embarqué
Dans le menu "Outils", vous trouverez la possibilité de lancer un serveur web embarqué. Ce serveur permet de voir les images traitées par le logiciel depuis d’autres ordinateurs, en se connectant à ce serveur.
Cette fonctionalité peut-être particulièrement pratique lors de projections publiques, en ayant un ordinateur utilisant JSol’Ex pour l’acquisition des images et un autre ordinateur sur le même réseau pour la projection sur un écran.

Vous pouvez configurer le port sur lequel le serveur écoute et disposez de la possibilité de le lancer automatiquement au démarrage du logiciel.
L’interface donne accès aux images en cours de traitement ainsi qu’à leur historique, au cas où vous traitez plusieurs images successivement.

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
-
Ken M. Harrison pour l’amélioration des calculs d’exposition optimale