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.

widget

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.

  • 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.

params 2 fr
  • 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.

params 3 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

  • 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

params 4 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

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 :

force polynomial 1

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 :

force polynomial 2

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 "…​":

params 5 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 contraste 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 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:

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.

Reconstruction d’images solaires

IMG

Renvoie l’image reconstruite au décalage de pixel spécifié.

Argument

Requis ?

Description

Valeur par défaut

ps

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

from

to

Fin de l’intervalle (inclusif)

step

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

list

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

list

Arguments

Exemples

concat(list(img(0));range(-1;1))
EXP

Calcule une exponentielle

Argument

Requis ?

Description

Valeur par défaut

v

Valeur

exp

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

v

Valeur

exp

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

list

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

list

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

list

Arguments

Exemples

min(range(-1;1))
min(img(0); img(1))
POW

Calcule une puissance

Argument

Requis ?

Description

Valeur par défaut

v

Valeur

exp

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

Images

weights

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

img

Image(s)

labels

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

id

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.

message

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

id

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.

message

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

img

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

img

Liste d’images à filtrer.

subject

Sujet du filtre (file-name, dir-name, pixel-shift, time ou datetime).

function

Opérateur à appliquer pour filtrer les images.

value

Valeur de comparaison

Sujet

Description

Opérateurs disponibles

Exemple

file-name

Le nom du fichier SER

=, `

=, `contains, starts_with, ends_with

filter(images, "file-name", "contains", "2021-06-01")

dir-name

Le nom du dossier qui contient le fichier SER

=, `

=, `contains, starts_with, ends_with

filter(images, "dir-name", "contains", "2021-06-01")

pixel-shift

Le décalage de pixels de l’image

=, `

=, `>, <, >=,

filter(images, "pixel-shift", ">", 0)

time

L’heure d’acquisition (comparé en UTC)

=, `

=, `>, <, >=,

filter(images, "time", ">", "12:00:00")

datetime

La date et l’heure de l’acquisition (comparée en UTC)

=, `

=, `>, <, >=,

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

list

Liste

index

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

img

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

img

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

img

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

list

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

file

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

dir

Chemin du dossier

pattern

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

img

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

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

r

Image rouge

g

Image verte

b

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

Images

order

Ordre de tri. Peut-être date, shift ou file_name, modulé par asc ou desc.

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

img

Image(s)

format

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

img

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

dir

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

img

Image(s)

min

Valeur minimum

max

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

img

Image(s)

gamma

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

img

Image(s)

bp

Point noir

stretch

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

img

Image(s)

gamma

Gamma

bg

Aggressivité de la correction du fond entre 0 et 1. 1 = pas de correction, 0 = correction maximale.

0.25

protusStretch

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

img

Image(s)

kernel

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

img

Image(s)

ts

Taille de la tuile

bins

Nombre de paniers

clip

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

img

Image(s)

profile

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

img

Image(s)

rIn

Valeur d’entrée pour le rouge (0-255)

rOut

Valeur de sortie pour le rouge (0-255)

gIn

Valeur d’entrée pour le vert (0-255)

gOut

Valeur de sortie pour le vert (0-255)

bIn

Valeur d’entrée pour le bleu (0-255)

bOut

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

img

Image(s)

in

Valeur d’entrée de la courbe (0-255)

out

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

img

Image(s)

fill

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

img

Image(s)

invert

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

list

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

img

Image(s)

bs

Largeur de la bande

passes

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

img

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

img

Image(s)

lo

Valeur du percentile bas

0.1

hi

Valeur du percentile haut

0.95

order

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

img

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

img

Image(s)

lo

Valeur minimale de l’histogramme à étirer.

0

hi

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

img

Image(s)

radius

Rayon de la gaussienne

2.5

sigma

Sigma

2.5

iterations

Nombre d’itérations

5

Exemples

rl_decon(img(0))
SATURATE

Sature les couleurs d’une image.

Argument

Requis ?

Description

Valeur par défaut

img

Image(s)

factor

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

img

Image(s)

kernel

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

img

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

img

Image(s)

factor

La largeur de l’image sera le diamètre du disque solaire multiplié par ce facteur.

1.1

rounding

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

img

Image(s)

left

Coordonnée X du coin supérieur gauche de la zone de rognage.

top

Coordonnée Y du coin supérieur gauche de la zone de rognage.

width

Largeur de la zone de rognage.

height

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

img

Image(s)

ms

Taille minimale de la tache.

32

margin

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

img

Image(s)

width

Largeur de la zone de rognage.

height

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

img

Image(s)

order

Ordre du polynôme. Une valeur supérieure à 3 n’est pas recommandée.

2

sigma

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

img

Image(s)

iterations

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

img

Image(s)

tolerance

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

img

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

images

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

img

Image(s)

width

Largeur de l’image

height

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

img

Image(s)

sx

Facteur de redimensionnement horizontal

sy

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

img

Image(s)

angle

Angle

bp

Valeur de remplissage pour les pixels en dehors de l’image.

resize

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

img

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

img

Image(s)

angle

Angle

bp

Valeur de remplissage pour les pixels en dehors de l’image.

resize

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

img

Image(s)

Exemples

rotate_right(img(0))
rotate_right(img: img(0))
VFLIP

Inverse verticalement une image.

Argument

Requis ?

Description

Valeur par défaut

img

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

a

Angstroms

ref

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

wl

Longueur d’onde recherchée en Angstroms ou nom de la raie

ref

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

px

pixels

ref

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

img

Image(s)

x1

Début de la flèche (coordonnée X)

y1

Début de la flèche (coordonnée Y)

x2

Fin de la flèche (coordonnée X)

y2

Fin de la flèche (coordonnée Y)

thickness

Épaisseur de la flèche

1

color

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

img

Image(s)

cx

Coordonnéee X du centre du cercle

cy

Coordonnée Y du centre du cercle

thickness

Épaisseur de la flèche

1

color

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

img

Image(s)

x

Coordonnée X du centre de la Terre

y

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

img

Image(s)

angleP

angle P

angle P

b0

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

img

Image(s)

x

Coordonnée X

50

y

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

img

Image(s)

left

Coordonnéee X du coin supérieur gauche du rectangle

top

Coordonnée Y du coin supérieur gauche du rectangle

width

Largeur du rectangle

height

Hauteur du rectangle

thickness

Épaisseur du trait

1

color

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

img

Image(s)

x

Coordonnée X

top right

y

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

img

Image(s)

x

Coordonnéee X

y

Coordonnée Y

text

Texte à écrire

fs

Taille de la police

auto

color

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

images

The list of images

delay

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

images

Image(s)

steps

Nombre d’images intermédiaires à générer.

type

Type d’interpolation: linear, ease_in, ease_out ou ease_in_out.

linear

unit

Unité de l’interpolation: ips (images par seconde), ipm (images par minute) ou iph (images par heure).

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

ref

Image(s) de référence

img

Images à corriger.

ts

Taille des tuiles.

32

sampling

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

threshold

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

Images à assembler.

ts

Taille des tuiles

64

sampling

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

Images à empiler.

ts

Taille des tuiles

32

sampling

Facteur d’échantillonnage

0.5

select

Méthode de sélection de la meilleure image. Peut-être sharpness (image la plus nette), average (moyenne de toutes les images), median (médiane de toutes les images) ou eccentricity (image du soleil le plus rond). En mode batch, un mode manual est aussi disponible.

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

Images à empiler.

select

Méthode de sélection de la meilleure image. Peut-être sharpness (image la plus nette), average (moyenne de toutes les images), median (médiane de toutes les images) ou eccentricity (image du soleil le plus rond). En mode batch, un mode manual est aussi disponible.

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 decorate ci-dessus avec une liste d’images, alors le résultat sera une liste d’images décorées. Si la fonction prend plus d’un argument, seul le premier argument se comporte de cette manière.

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 :

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 :

myscript.math
[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 LOAD.

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 remote_scriptgen, JSol’Ex contactera le serveur plusieurs fois avec des charges utiles différentes.

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’image helium_raw à laquelle on a appliqué l’algorithme de correction de transversalliums.

  • cropped est l’image helium_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’image cropped 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 :

trimming fr

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:

  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.

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" :

image filtering 3 fr

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

image filtering 1 fr

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 :

image filtering 2 fr

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":

redshift tab

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

Example of panel

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:

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.

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:

stacking 1 fr

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

stacking 2 fr

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).
stacking 3 fr

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 :

spectrum browser 1

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 :

spectrum browser 2

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) :

spectrum browser 3

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 :

spectrum browser 4

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.

embedded server 1 fr

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.

embedded server 2 fr

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