PySiril : guide des fonctions disponibles (V1.0.1)

Le programme Siril est un incontournable du traitement d’image astronomique, et pour ceux qui ont débuté sous IRIS (en mode ligne de commande), une belle façon de continuer son usage.

Surtout que Python peut se rajouter au poste de contrôle pour diriger les fonctions.

pySiril est un package Python très utile étendant les capacités de script, présent nativement dans Siril. Ecrit et développé par un astroamateur passionné nommé “M27 trognon de  pomme” :-), je l’ai découvert via la documentation officielle et ai décidé de “creuser”….

Il est destiné aux utilisateurs déjà familiarisés avec les scripts à la recherche d’une alternative à l’utilisation de shell complexes ou bat (sous Windows).

Avec pySiril, vous pouvez:

  • écrire des conditions et des boucles (ifelsefor …)
  • écrire facilement vos propres fonctions
  • récupérer les valeurs renvoyées par certaines des fonctions Siril telles que statbgcdgbgnoise …
  • utiliser toutes les capacités de python pour étendre les traitements ou logiques

Cette bibliothèque fonctionne pour les 3 principaux OS, Linux, Windows et MacOS.

Les commandes implémentées sont directement issues de celles disponibles sous la version 1.0.0 et 1.0.1. La description de chaque commande est disponible via cmd.help(‘commande’)

Dans cette page

Remarque importante pour des scripts avancés…

PySiril permet d’accéder aux commandes, en lançant une “instance” de SIRIL, tel qu’il est installé depuis un environnement Python.

Donc :

  • la langue des messages sera celle qui aura été définie via les paramètres de SIRIL
    Par convention personnelle, je travaille uniquement en version anglaise et les scripts fournis dans les pages utiliseront cette langue pour l’interprétation avancées des messages. Si un lecteur veut utiliser un script fournis dans une autre langue, il lui faudra adapter les éléments de langage dans ceux-ci.
  • les paramètres de “dématricage” (Bayer raw processing) seront également ceux repris dans la version installée. A ce stade, je n’ai pas trouvé comment les adapter “on the flight” SANS toucher aux paramètres de l’application.
  • des fonctions fort indispensables (ex : PSF local d’une étoile) qui utilisent une “sélection” dans un canal spécifique ne sont pas disponibles, car définies comme “non scriptable” au sein de SIRIL même (perso, je ne vois pas trop pourquoi… On pourrait utiliser les fonctions de “find” pour détecter des étoiles et ensuite leur appliquer la commande…)
    Donc, j’utiliserai des fonctions du même style disponibles dans d’autres librairies pour compléter l’action d’un script.

Commandes utilitaires à PySiril

Toutes les commandes se trouvent réparties dans trois librairies

import sys
from pysiril.siril import *
from pysiril.wrapper import *
from pysiril.addons import *

Programme python typique

Et le modèle général d’invocation qui sera utilisé dans tous les scripts python de ce site sera :

from pysiril.siril   import *
from pysiril.wrapper import *
from pysiril.addons  import *

path = "F:\\$Evscope_export\\Archive\\"

print("Siril Functions:begin")
app=Siril()
try:
    cmd=Wrapper(app)
    fct=Addons(app)
    app.Display(bLog=True,bInfo=True)
    app.MuteSiril(True)
    app.Open()
    
    if sys.platform.startswith('win32'): 

        status = cmd.cd(path) 
        
        if status:
            print ("directory change ok")
        else:
            print ("directory not found")
            
except Exception as e :
    print("\n**** ERROR *** " +  str(e) + "\n" )    

app.Close()
del app

print("Siril Functions:end")

En règle générale, on inclut toutes les commandes “invoquant” SIRIL dans un groupe de “try + except” qui isole les actions.

app=Siril() va initier l’instance

cmd = Wrapper(app) va permettre d’accéder à toutes les fonctions implémentées (liste complète dans cette page)

Ensuite, on a les deux modes d’invocation :
a) soit via status=cmd.<fonction>(<paramètres>). Dans ce mode, il faut suivre les définitions et conventions du wrapper
b) soit via status=app.execute(“commande”) qui est l’accès à la ligne de commande de SIRIL

Perso, je préfère la version “cmd” pour sa rigueur dans la programmation mais la flexibilité de pouvoir créer des commandes par simple concaténation est évidemment tentante…

Par contre, l’avantage de vitesse est pour le mode “commande”, ce qui est logique, on gagne le temps de l’interprétation à la volée de la ligne…

A mon sens, il faut utilise rl’un ou l’autre en fonction des besoins (ce que je ferai dans les cas de multi-paramètres variables, par exemple)

Gestion des messages

app.Display(bLog=True,bInfo=False) et app.MuteSiril(True) vont permettre de “régler” le niveau de messages que l’on veut voir apparaître. En pratique :

app.Display(bLog=True,bInfo=True)
app.MuteSiril(True)

Siril Functions:begin
WARNING: pysiril uses by default :C:/Program Files/SiriL/bin/siril.exe
INFO   : VERSION siril 1.0.0 : 
INFO   : Siril is compatible with pysiril
INFO   : Initialisation pySiril V0.0.12 : OK
INFO   : First step: Starting 'Siril -p' ....
INFO   : ThreadSiril is started
INFO   : run : C:/Program Files/SiriL/bin/siril.exe -p
INFO   : waiting: 
7s 
INFO   : Second step: Starting pipe reader ....
INFO   : ThreadReader is started
INFO   : Third step: Starting pipe writer ....
INFO   : PipeWriter is started
INFO   : Open()
directory change ok
INFO   : Stopping ThreadReader ...
INFO   : Stopping PipeWriter ...
INFO   : ThreadReader is aborted
INFO   : ThreadReader is stopped
INFO   : ThreadSiril is stopped
INFO   : PipeWriter is stopped
INFO   : Close()
Stopping Trace ...
Trace is stopped
Siril Functions:end

app.Display(bLog=True,bInfo=True)
app.MuteSiril(False)

Siril Functions:begin
WARNING: pysiril uses by default :C:/Program Files/SiriL/bin/siril.exe
INFO   : VERSION siril 1.0.0 : 
INFO   : Siril is compatible with pysiril
INFO   : Initialisation pySiril V0.0.12 : OK
INFO   : First step: Starting 'Siril -p' ....
INFO   : ThreadSiril is started
INFO   : run : C:/Program Files/SiriL/bin/siril.exe -p
INFO   : waiting: 
7s 
INFO   : Second step: Starting pipe reader ....
INFO   : ThreadReader is started
INFO   : Third step: Starting pipe writer ....
INFO   : PipeWriter is started
INFO   : Open()
> cd 'F:/$Evscope_export/Archive/'
: log: Running command: cd
: log: Setting CWD (Current Working Directory) to 'F:/$Evscope_export/Archive/'
> [status: success]
directory change ok
INFO   : Stopping ThreadReader ...
INFO   : Stopping PipeWriter ...INFO   : ThreadReader is aborted

INFO   : ThreadReader is stopped
INFO   : ThreadSiril is stopped
INFO   : PipeWriter is stopped
INFO   : Close()
Stopping Trace ...
Trace is stopped
Siril Functions:end

app.Display(bLog=True,bInfo=False)
app.MuteSiril(False)

Siril Functions:begin
WARNING: pysiril uses by default :C:/Program Files/SiriL/bin/siril.exe
INFO   : VERSION siril 1.0.0 : 
INFO   : Siril is compatible with pysiril
INFO   : Initialisation pySiril V0.0.12 : OK
7s 
> cd 'F:/$Evscope_export/Archive/'
: log: Running command: cd
: log: Setting CWD (Current Working Directory) to 'F:/$Evscope_export/Archive/'
> [status: success]
directory change ok
Siril Functions:end

app.Display(bLog=False,bInfo=False)
app.MuteSiril(False)

Siril Functions:begin
WARNING: pysiril uses by default :C:/Program Files/SiriL/bin/siril.exe
INFO   : VERSION siril 1.0.0 : 
INFO   : Siril is compatible with pysiril
INFO   : Initialisation pySiril V0.0.12 : OK
7s 
> cd 'F:/$Evscope_export/Archive/'
: log: Running command: cd
: log: Setting CWD (Current Working Directory) to 'F:/$Evscope_export/Archive/'
> [status: success]
directory change ok
Siril Functions:end

app.Display(bLog=False,bInfo=False)
app.MuteSiril(True)

Siril Functions:begin
WARNING: pysiril uses by default :C:/Program Files/SiriL/bin/siril.exe
INFO   : VERSION siril 1.0.0 : 
INFO   : Siril is compatible with pysiril
INFO   : Initialisation pySiril V0.0.12 : OK
7s 
directory change ok
Siril Functions:end

Il est évident que l’on active les modes en fonctions des besoins, surtout que certaines commandes sont “verbeuses” (avec un intérêt, mais un effet de ralentissement aussi…)

Gestion des erreurs

On constate qu’une erreur faisant appel au système d’exploitation (comme cd) se termine généralement “fort mal” si incorrecte…
Exemple : dans le code ci-dessus, si on donne une “mauvaise” sub-dir

Siril Functions:begin
WARNING: pysiril uses by default :C:/Program Files/SiriL/bin/siril.exe
INFO : VERSION siril 1.0.0 :
INFO : Siril is compatible with pysiril
INFO : Initialisation pySiril V0.0.12 : OK
7s
**** ERROR *** [WinError 2] Le fichier spécifié est introuvable: 'F:\$Evscope_export\Archiv\'
ERROR : *** ThreadReader::run() 'str' object has no attribute 'append'
Siril Functions:end

Le traitement des exceptions standard de Python n’est pas suffisant (vu le Wrapper et l’instance) pour “bloquer” une erreur… (remarquez que traitement en “exception” est aussi perturbé).

Donc, une bonne solution est de gérer les éléments “OS” au niveau Python lui-même. Un simple :

app=Siril()
try:
    cmd=Wrapper(app)
    fct=Addons(app)
    app.Display(bLog=True,bInfo=True)
    #app.MuteSiril(False)
    app.Open()
    
    if not os.path.exists(path):
        print ("directory not found")
    else:
        status = cmd.cd(path) 
        if status:
            cmd_msg=app.GetData()
            print ("directory change ok")
            
except Exception as e :
    print("\n**** ERROR *** " +  str(e) + "\n" )    

app.Close()
del app

Solutionne efficacement le problème

Siril Functions:begin
WARNING: pysiril uses by default :C:/Program Files/SiriL/bin/siril.exe
INFO : VERSION siril 1.0.0 :
INFO : Siril is compatible with pysiril
INFO : Initialisation pySiril V0.0.12 : OK
INFO : First step: Starting 'Siril -p' ….
INFO : ThreadSiril is started
INFO : run : C:/Program Files/SiriL/bin/siril.exe -p
INFO : waiting:
7s
INFO : Second step: Starting pipe reader ….
INFO : ThreadReader is startedINFO : Third step: Starting pipe writer ….
INFO : PipeWriter is started
INFO : Open()
directory not found
INFO : Stopping ThreadReader …
INFO : Stopping PipeWriter …
INFO : ThreadReader is stopped
INFO : ThreadSiril is stopped
INFO : PipeWriter is stopped
INFO : Close()
Stopping Trace …
Trace is stopped
Siril Functions:end

C’est là que la commande app.GetData() peut se révèler fort utile…
Cette commande va “récupérer” les messages pour les rendre disponibles au script Python (format liste). exemple, dans l’exemple ci-dessus, on obtient (pour une bonne sub-dir), dans la zone cmd_msg :

["status: starting cd 'F:/$Evscope_export/Archive/'",
'log: Running command: cd',
"log: Setting CWD (Current Working Directory) to 'F:/$Evscope_export/Archive/'",
"status: success cd 'F:/$Evscope_export/Archive/'",
'status: starting close']

Ce qui, dans le cas de commande plus complexes sera très utile pour “dépasser” les capacités d’un script SIRIL standard.
Par exemple : tester le niveau de “rejection ” d’empilage, etc…

Types de commandes : avec réponses ou pas…

Toutes les commandes fournissent un “status” booleen (“True”, “False” standards) d’exécution. Il est très largement utile de tester ce status à chaque appel ,surtout si on veut “boucler” dans le traitement de plusieurs images.

Certaines commandes fournissent des réponses de par leur fonctions, par exemple : bgnoise et stat

import sys
import os
import glob
import datetime

from pysiril.siril   import *
from pysiril.wrapper import *
from pysiril.addons  import *

# 
# Example of functions which return values
# 
def extract_stats(imagefiles):
#This funtion extrat statistics from a series of images    
    stats = []
    
    try:
        for image in imagefiles:
            imgstat = [] 
            app.Execute("load "+image)
        
            rec = image+";"
            
            _,bgnoise = cmd.bgnoise()
            rec = rec + str(bgnoise[0][1]).replace(".",",")+";"
                      
            _,stat = cmd.stat()
        
            for key, value in stat[0].items():
                rec = rec + str(value).replace(".",",")+";"
            
            stats.append(rec)
    
    except Exception as e :
        msg = "\nextract_stats : **** ERROR *** " + str(e) + "\n"
        print(msg)

    return stats

#*************************************

path = "F:\\$Evscope_export\\Archive\\"
path = path+'ttf001_2022-01-05T02-44-38.540_Resolved_NGC-2371\\'
path = path+'StackInput\\'

imagefiles=[]

#Global scan of subdirs
for file in glob.glob(path + "*.fits"):
    image = file.rpartition("\\")
    imagefiles.append(image[2])

print("StatusFunctions:begin")
app=Siril()
try:
    cmd=Wrapper(app)
    fct=Addons(app)
    #app.Display(bLog=True,bInfo=False)
    #app.MuteSiril(True)
    app.Open()
    
    if sys.platform.startswith('win32'): 

        command = "cd "+path
        app.Execute(command)

        image_stats = extract_stats(imagefiles)        
        if len(image_stats) == 0:
            print ("no stats available")
        else:
            print ("image statistics :",image_stats)
            
except Exception as e :
    print("\n**** ERROR *** " +  str(e) + "\n" )    

app.Close()
del app

print("StatusFunctions:end")

Fournira pour toutes les images d’une sub-directory, des infos dans le genre

['ttf001_2022-01-05T02-44-38.540_EnhancedVision_StackInput_0.fits;1043,449;B&W;5577,3;5680,0;1118,7;816,7;1472,0;65520,0;', 
etc...

Et en décodant un brin, est bien le cumul des infos retournées par bgnoise et stat, à savoir : BG Noise : 1043.449; B&W layer: Mean: 5577.3, Median: 5680.0, Sigma: 1118.7, AvgDev: 816.7, Min: 1472.0, Max: 65520.0

Fonctions “utilitaires”…

Elles ont définies dans le bloc “Addons” et peuvent être largement utiles…
Je ne les décrit pas toutes (il suffit d’aller voir dans le code), je ne reprends que celles j’ai utilisée jusqu’à présent…

S’activent via le fct=Addons(app)

Name : CreateSeqFile

Syntax : status=fct.CreateSeqFile( filename, nb_images, start=1 )

Crée un fichier de type .seq (séquence)
Parameters:

    - filename : full filename of sequence 

    - nb_images : images number of sequence

    - start     : start index of first image

Return : None
Name : GetSeqType

Syntax : status=fct.GetSeqType( seqname ):
Récupère le type d’une séquence existante

    Parameters:

        - seqname : full filename of sequence 

    Return : "Error", "Avi", "Ser", "Fitseq", "Fit"
Name : GetSeqFile

Syntax : status=fct.GetSeqFile(seqname ):
Récupère le contenu d’une séquence existante (attention : renvoie une structure, à décoder)

  GetSeqFile(self, seqname ): 
        """ Get sequence type
        
        Parameters:
        
            - seqname : full filename of sequence 
                       
        Return : Struct of  sequence  or NoName : ne 
Name : CopyLink

Syntax : status=fct.CopyLink(src, dst, CopyMode):
Exécute une copie (réelle d’une image) ou simplement un “lien” pour l’accéder (plus rapide et économe)

    Parameters:

        - src : source file

        - dst : destination file

        - bCopyMode : True = Copy mode / False = Link mode

    Return: True = Success / False = Aborted
Name : CleanFolder

Syntax : status=fct.CleanFolder(folder, ext_list, prefix) :
Permet de vider rapidement la sub-dir de “process” avant de traiter l’image suivante…

Parameters:

        - ext_list     : extension list of deleted file (defaul=[ ".fit",".fits", ".fts",".seq"] )

        - prefix       : prefix of deleted file ( default: None )

    Return: None
Name : GetSirilPrefs

Syntax pref=fct.GetSirilPrefs(self) :
Lit la configuration de Siril et vous renvoie le contenu dans un dictionnaire

    Parameters: None

    Return : a dictionnary containing the different blocks of config file as nested dictionnaries

Très utile… Pour vérifier les caractéristiques des dématricages actifs, par exemple, ou les valeurs par défauts utilisées par les commandes…
Par exemple :

...
'gamm_0': '2.222',
'gamm_1': '4.5',
'user_black': '0'},
'debayer-settings': {'use_bayer_header': 'true',
'bayer_pattern': '0',
'roworder_top_down': 'true',
'debayer_algo': '8',
'x_bayer_offset': '0',
'y_bayer_offset': '0'},
...
'astrometry-settings': {'messier': 'true',
'ngc': 'true',
'ic': 'true',
'ldn': 'true',
'sh2': 'true',
'stars': 'true',
'user': 'true',
...
'focal': '899.7',
'pitch': '3.75',
...
Name : ReadFITSHeader

Syntax : fits_header = ReadFITSHeader(filename,dbg) :
Lit le FITS header et le renvoie comme un dictionnaire (permet de gagner l’ajout d’une librairie additionnelle 🙂

    Parameters: 

        - filename  : the path to the fits file which header is required

        - dbg       : flag to print the contents of the dictionnary (default= False)

    Return : a dictionnary containing the keys of FITS header (all values as str) + additional filename field

Toutes les commandes de traitement d’image disponibles sous Python

NAME : asinh

SYNTAXE1 :
app.Execute(“asinh stretch”)

SYNTAXE2 :
status=app.asinh(stretch)

STATUS :
status[0] = True: exécution ok
status[0] = False: Echec

DESCRIPTION:
Étire l’image pour montrer des objets faibles, tout en même temps,
préserve la structure des objets lumineux du champ.

NAME : bg

SYNTAXE1 :
app.Execute(“bg”)

SYNTAXE2 :
status=app.bg()

STATUS :
status[0] = True: exécution ok
status[0] = False: Echec
status[1] = niveau du fond de l’image

DESCRIPTION:
Renvoie le niveau du fond de l’image chargée en mémoire.

NAME : bgnoise

SYNTAXE1 :
app.Execute(“bgnoise”)

SYNTAXE2 :
status=app.bgnoise()

STATUS :
status[0] = True: exécution ok
status[0] = False: Echec
status[1] = niveau du fond de l’image

DESCRIPTION:

Renvoie le niveau de bruit de fond de l’image chargée en mémoire.

NAME : cd

SYNTAXE1 :
app.Execute(“cd directory”)

SYNTAXE2 :
status=app.cd(directory)

STATUS :
status[0] = True: exécution ok
status[0] = False: Echec

DESCRIPTION:

Définissez le nouveau répertoire de travail actuel.
Le répertoire peut contenir le tilde ~, il sera développé comme répertoire de base. Les répertoires avec des espaces dans le nom peuvent être protégé par des guillemets simples ou doubles. Exemples:
cd ~ / M42
cd ‘../OIII 2×2 /’

NAME : cdg

SYNTAXE1 :
app.Execute(“cdg”)

SYNTAXE2 :
status=app.cdg()

STATUS :
status[0] = True: exécution ok
status[0] = False: Echec
status[1] = x
status[2] = y

DESCRIPTION:

Renvoie les coordonnées du centre de gravité de l’image.

NAME : clahe

SYNTAXE1 :
app.Execute(“clahe cliplimit tileSize”)

SYNTAXE2 :
status=app.clahe(cliplimit, tileSize)

STATUS :
status[0] = True: exécution ok
status[0] = False: Echec

DESCRIPTION:

Égalise l’histogramme d’une image à l’aide de l’égalisation adaptative de l’histogramme à contraste limité.
o ‘cliplimit’ définit le seuil de limitation du contraste.
o ’tilesize’ définit la taille de la grille pour l’égalisation de l’histogramme.
L’image d’entrée sera divisée en tuiles rectangulaires de taille égale.

NAME : close

SYNTAXE1 :
app.Execute(“close”)

SYNTAXE2 :
status=app.close()

STATUS :
status[0] = True: exécution ok
status[0] = False: Echec

DESCRIPTION:

Ferme correctement l’image ouverte et la séquence ouverte, le cas échéant.

NAME : convert

SYNTAXE1 :
app.Execute(“convert basename [-debayer] [-start=index] [-out=] [-fitseq] [-ser]”)

SYNTAXE2 :
status=app.convert(basename,[debayer=True] [start=index] [out=filename] [fitseq=True] [ser=True])

STATUS :
status[0] = True: exécution ok
status[0] = False: Echec

DESCRIPTION:

Convertit toutes les images dans un format connu en images FITS de Siril.
o L’argument basename est le nom de base de la nouvelle séquence.
Pour les images FITS, Siril va essayer de faire un lien symbolique.
Si ce n’est pas possible, les fichiers seront copiés.
o Les indicateurs ‘-fitseq’ et ‘-ser’ peuvent être utilisés pour spécifier une sortie alternative autre que le FITS par défaut.
o L’option ‘-debayer’ démosaïque les images.
Dans ce cas, aucun lien symbolique n’est fait.
o -start=index définit le numéro d’index de départ
o -out= option convertit les fichiers dans le répertoire out.

NAME : convertraw

SYNTAXE1 :
app.Execute(“convertraw basename [-debayer] [-start=index] [-out=] [-fitseq] [-ser]”)

SYNTAXE2 :
status=app.convertraw(basename,[debayer=True] [start=index] [out=filename] [fitseq=True] [ser=True] )

STATUS :
status[0] = True: exécution ok
status[0] = False: Echec

DESCRIPTION:

Convertit les fichiers RAW (APN) en images FITS de Siril.
o L’argument basename est le nom de base de la nouvelle séquence.
Pour les images FITS, Siril va essayer de faire un lien symbolique.
Si ce n’est pas possible, les fichiers seront copiés.
o Les indicateurs ‘-fitseq’ et ‘-ser’ peuvent être utilisés pour spécifier une sortie alternative autre que le FITS par défaut.
o L’option ‘-debayer’ démosaïque les images.
Dans ce cas, aucun lien symbolique n’est fait.
o -start=index définit le numéro d’index de départ
o -out= option convertit les fichiers dans le répertoire out

NAME : cosme

SYNTAXE1 :
app.Execute(“cosme filename”)

SYNTAXE2 :
status=app.cosme(filename)

STATUS :
status[0] = True: exécution ok
status[0] = False: Echec

DESCRIPTION:

Applique la moyenne locale à un ensemble de pixels sur l’image en mémoire (correction cosmétique). Les coordonnées de ces pixels se trouvent dans un fichier ASCII [fichier .lst]. COSME est adapté pour corriger les pixels chauds et froids résiduels après prétraitement »)

Le type de ligne P x y fixera le pixel aux coordonnées (x, y) est facultatif
caractère (C ou H) spécifiant à Siril si le pixel actuel est froid ou chaud. Ceci
est créée par la commande find_hot mais vous pouvez également ajouter quelques lignes manuellement.
Le type de ligne C x 0 corrigera la colonne incorrecte aux coordonnées x.
Le type de ligne L y 0 corrigera la mauvaise ligne aux coordonnées y.

NAME : cosme_cfa

SYNTAXE1 :
app.Execute(“cosme_cfa filename”)

SYNTAXE2 :
status=app.cosme_cfa(filename)

STATUS :
status[0] = True: exécution ok
status[0] = False: Echec

DESCRIPTION:

Même fonction que COSME mais s’appliquant aux images RAW CFA.

NAME : crop

SYNTAXE1 :
app.Execute(“crop x y width height”)

SYNTAXE2 :
status=app.crop(x, y, width, height)

STATUS :
status[0] = True: exécution ok
status[0] = False: Echec

DESCRIPTION:

Recadre selon la sélection l’image chargée.
Dans l’interface graphique, si une sélection est active, aucun autre argument n’est requis. Sinon, ou dans les scripts, les arguments doivent être donnés, x et y étant les coordonnées du coin supérieur gauche, et la largeur et la hauteur de la taille de la sélection.

NAME : entropy

SYNTAXE1 :
app.Execute(“entropy”)

SYNTAXE2 :
status=app.entropy()

STATUS :
status[0] = True: exécution ok
status[0] = False: Echec
status[1] = valeur de l’entropie

DESCRIPTION:

Calcule l’entropie de l’image ouverte sur le calque affiché, uniquement dans la zone sélectionnée si elle a été sélectionnée ou dans l’ensemble de l’image. L’entropie est une façon de mesurer le bruit ou les détails d’une image.

NAME : exit

SYNTAXE1 :
app.Execute(“exit”)

SYNTAXE2 :
status=app.exit()

STATUS :
status[0] = True: exécution ok
status[0] = False: Echec

DESCRIPTION:

Quitte l’application.

NAME : extract

SYNTAXE1 :
app.Execute(“extract NbPlans”)

SYNTAXE2 :
status=app.extract(NbPlans)

STATUS :
status[0] = True: exécution ok
status[0] = False: Echec

DESCRIPTION:

Extrait les NbPlan plans du filtre Ondelette.

NAME : extract_Ha

SYNTAXE1 :
app.Execute(“extract_Ha”)

SYNTAXE2 :
status=app.extract_Ha()

STATUS :
status[0] = True: exécution ok
status[0] = False: Echec

DESCRIPTION:

Extrait le signal Ha d’une image CFA. Le nom du fichier de sortie commence par le préfixe “Ha_”.

NAME : extract_HaOIII

SYNTAXE1 :
app.Execute(“extract_HaOIII”)

SYNTAXE2 :
status=app.extract_HaOIII()

STATUS :
status[0] = True: exécution ok
status[0] = False: Echec

DESCRIPTION:

Extrait les signaux Ha et OIII d’une image CFA. Le nom du fichier de sortie commence par les préfixes « Ha_ » et « OIII_ ».

NAME : extract_Green

SYNTAXE1 :
app.Execute(“extract_Green”)

SYNTAXE2 :
status=app.extract_Green()

STATUS :
status[0] = True: exécution ok
status[0] = False: Echec

DESCRIPTION:

Extrait le signal vert d’une image CFA. Le nom du fichier de sortie commence par le préfixe « Green_ ».

NAME : fdiv

SYNTAXE1 :
app.Execute(“fdiv filename scalar”)

SYNTAXE2 :
status=app.fdiv(filename, scalar)

STATUS :
status[0] = True: exécution ok
status[0] = False: Echec

DESCRIPTION:

Divise l’image en mémoire par l’image donnée dans l’argument. L’image résultante
est multiplié par la valeur de l’argument scalaire. Voir aussi idiv.

NAME : fftd

SYNTAXE1 :
app.Execute(“fftd modulus phase”)

SYNTAXE2 :
status=app.fftd(modulus, phase)

STATUS :
status[0] = True: exécution ok
status[0] = False: Echec

DESCRIPTION:

Applique une transformation de Fourier rapide à l’image chargée en mémoire. Module et phase données en argument sont enregistrées dans des fichiers FITS.

NAME : ffti

SYNTAXE1 :
app.Execute(“ffti modulus phase”)

SYNTAXE2 :
status=app.ffti(modulus, phase)

STATUS :
status[0] = True: exécution ok
status[0] = False: Echec

DESCRIPTION:

Récupère l’image corrigée en appliquant une transformation inverse.
Le module et la phase utilisés sont les fichiers donnés dans l’argument.

NAME : fill

SYNTAXE1 :
app.Execute(“fill value x y width height”)

SYNTAXE2 :
status=app.fill(value, x, y, width, height)

STATUS :
status[0] = True: exécution ok
status[0] = False: Echec

DESCRIPTION:

Remplit toute l’image (ou la sélection) actuelle avec des pixels ayant la valeur d’intensité exprimé en ADU.

NAME : fill2

SYNTAXE1 :
app.Execute(“fill2 value x y width height”)

SYNTAXE2 :
status=app.fill2(value, x, y, width, height)

STATUS :
status[0] = True: exécution ok
status[0] = False: Echec

DESCRIPTION:

Même commande que FILL mais il s’agit d’un remplissage symétrique d’une région définie par la souris. Utilisé pour traiter une image dans le domaine de Fourier (FFT).

NAME : find_cosme

SYNTAXE1 :
app.Execute(“find_cosme cold_sigma hot_sigma”)

SYNTAXE2 :
status=app.find_cosme(cold_sigma, hot_sigma)

STATUS :
status[0] = True: exécution ok
status[0] = False: Echec

DESCRIPTION:

Applique une détection automatique des pixels froids et chauds suivant les seuils écrit dans les arguments.

NAME : find_cosme_cfa

SYNTAXE1 :
app.Execute(“find_cosme_cfa cold_sigma hot_sigma”)

SYNTAXE2 :
status=app.find_cosme_cfa(cold_sigma, hot_sigma)

STATUS :
status[0] = True: exécution ok
status[0] = False: Echec

DESCRIPTION:

Même commande que FIND_COSME mais pour les images CFA monochromatiques.

NAME : find_hot

SYNTAXE1 :
app.Execute(“find_hot filename cold_sigma hot_sigma”)

SYNTAXE2 :
status=app.find_hot(filename,cold_sigma, hot_sigma)

STATUS :
status[0] = True: exécution ok
status[0] = False: Echec

DESCRIPTION:

Enregistre une liste de fichier ( format texte) dans le répertoire de travail qui contientles coordonnées des pixels qui ont une intensité ‘hot_sigma’ fois plus élevée et ‘cold_sigma’ inférieur à l’écart-type. Nous utilisons généralement cette commande sur un fichier Dark-master.

NAME : fixbanding

SYNTAXE1 :
app.Execute(“fixbanding amount sigma”)

SYNTAXE2 :
status=app.fixbanding(amount,sigma)

STATUS :
status[0] = True: exécution ok
status[0] = False: Echec

DESCRIPTION:

Tentes de supprimer les bandes de APN de type CANON
o l’argument ‘amount’ définit la quantité de correction.
o Sigma définit le niveau de protectionde l’algorithme,
un sigma élevé augment la protection

NAME : fix_xtrans

SYNTAXE1 :
app.Execute(“fix_xtrans”)

SYNTAXE2 :
status=app.fix_xtrans()

STATUS :
status[0] = True: exécution ok
status[0] = False: Echec

DESCRIPTION:

Corrige les pixels fujifilm X-Trans Auto Focus.
En effet, en raison la détection de phase du système de mise au point automatique, les photosites utilisés pour la mise au point automatique ont un peu moins de lumière que les sites photo environnants. La caméra compense cela et augmente les valeurs de ces photosites spécifiques donnant ainsi un carré visible au milieu des images de Dark/Offset.

NAME : fmedian

SYNTAXE1 :
app.Execute(“fmedian ksize modulation”)

SYNTAXE2 :
status=app.fmedian(ksize, modulation)

STATUS :
status[0] = True: exécution ok
status[0] = False: Echec

DESCRIPTION:

Effectue un filtre médian de taille ksize x ksize (ksize DOIT être impair) à la
image originale avec une modulation de paramètre de modulation.
Le pixel de sortie est calculé comme : out=mod x m+(1−mod) x in, où m est la valeur de pixel filtrée médiane. La valeur de 1 d’une modulation n’appliquera aucune modulation.

NAME : fmul

SYNTAXE1 :
app.Execute(“fmul scalar”)

SYNTAXE2 :
status=app.fmul(scalar)

STATUS :
status[0] = True: exécution ok
status[0] = False: Echec

DESCRIPTION:

Multiplie l’image chargée par le scalaire donné en argument.

NAME : gauss

SYNTAXE1 :
app.Execute(“gauss sigma”)

SYNTAXE2 :
status=app.gauss(sigma)

STATUS :
status[0] = True: exécution ok
status[0] = False: Echec

DESCRIPTION:

Effectue un filtre gaussien avec le sigma donné.

NAME : grey_flat

SYNTAXE1 :
app.Execute(“grey_flat”)

SYNTAXE2 :
status=app.grey_flat()

STATUS :
status[0] = True: exécution ok
status[0] = False: Echec

DESCRIPTION:

Égalise l’intensité moyenne des calques RVB dans une image CFA.

NAME : histo

SYNTAXE1 :
app.Execute(“histo layer”)

SYNTAXE2 :
status=app.histo()

STATUS :
status[0] = True: exécution ok
status[0] = False: Echec

DESCRIPTION:

Calcule l’histogramme du canal d’image en mémoire et produit le fichier
histo_[nom du canal].dat dans le répertoire de travail ».

calque = 0, 1 ou 2 avec 0 = rouge, 1 = vert et 2 = bleu.

NAME : iadd

SYNTAXE1 :
app.Execute(“iadd filename”)

SYNTAXE2 :
status=app.iadd(filename)

STATUS :
status[0] = True: exécution ok
status[0] = False: Echec

DESCRIPTION:

Ajoute l’image en mémoire au nom de fichier image donné dans l’argument.

NAME : idiv

SYNTAXE1 :
app.Execute(“idiv filename”)

SYNTAXE2 :
status=app.idiv(filename)

STATUS :
status[0] = True: exécution ok
status[0] = False: Echec

DESCRIPTION:

Divise l’image en mémoire par le nom de fichier image donné dans l’argument. Voir aussi FDIV.

NAME : imul

SYNTAXE1 :
app.Execute(“imul filename”)

SYNTAXE2 :
status=app.imul(filename)

STATUS :
status[0] = True: exécution ok
status[0] = False: Echec

DESCRIPTION:

Multiplie l’image en mémoire par l’image donné dans l’argument.

NAME : isub

SYNTAXE1 :
app.Execute(“isub filename”)

SYNTAXE2 :
status=app.isub(filename)

STATUS :
status[0] = True: exécution ok
status[0] = False: Echec

DESCRIPTION:

Soustrait l’image en mémoire avec l’image donné dans l’argument.

NAME : linear_match

SYNTAXE1 :
app.Execute(“linear_match reference low high”)

SYNTAXE2 :
status=app.linear_match(reference, low, high)

STATUS :
status[0] = True: exécution ok
status[0] = False: Echec

DESCRIPTION:

Calcule une fonction linéaire entre une image de référence et l’image en mémoire. La fonction est ensuite appliquée à l’image actuelle pour la faire correspondre à celle de référence. L’algorithme ignorera tous les pixels de référence dont les valeurs sont en dehors de la plage [basse, haute] ».

NAME : link

SYNTAXE1 :
app.Execute(“link basename [-start=index] [-out=directory]”)

SYNTAXE2 :
status=app.link(basename, [start=index] [out=directory])

STATUS :
status[0] = True: exécution ok
status[0] = False: Echec

DESCRIPTION:

Lie toutes les images FITS du répertoire de travail avec le nom de base indiqué dans l’argument. Si aucun lien symbolique n’a pu être créé, les fichiers sont copiés. Il est possible de convertir dans un autre répertoire avec l’option ‘-out=’.

NAME : load

SYNTAXE1 :
app.Execute(“load filename”)

SYNTAXE2 :
status=app.load(filename)

STATUS :
status[0] = True: exécution ok
status[0] = False: Echec

DESCRIPTION:

Charge l’image donné en argument
Il tente d’abord de charger filename, puis filename.fit, enfin filename.fits
et enfin tous les formats pris en charge, abandonnant si aucun d’entre eux n’est trouvé.
Ce schéma est applicable à toutes les commandes Siril qui impliquent la lecture de fichiers.
S’adapte aux en-têtes MIPS-HI et MIPS-LO sont lus et leurs valeurs données au courant niveaux d’affichage.
L’écriture d’une extension connue .ext à la fin du nom de fichier chargera spécifiquement le image filename.ext : il est utilisé lorsque de nombreux fichiers ont le même nom mais pas la même extension.

Les extensions prises en charge sont :
*.fit, *.fits, *.fts
*.bmp / *.jpg, *.jpeg / *.png / *.tif, *.tiff
*.ppm, *.pgm
*.pic (fichier IRIS)

NAME : log

SYNTAXE1 :
app.Execute(“”)

SYNTAXE2 :
status=app.log()

STATUS :
status[0] = True: exécution ok
status[0] = False: Echec

DESCRIPTION:

Calcule et applique une échelle logarithmique à l’image actuelle.

NAME : merge

SYNTAXE1 :
app.Execute(“merge sequence1 sequence2 [sequence3 …] output_sequence”)

SYNTAXE2 :
status=app.merge(list_seq, new_seq )

STATUS :
status[0] = True: exécution ok
status[0] = False: Echec

DESCRIPTION:

Fusionne plusieurs séquences du même type (images FITS, séquence FITS ou SER) et les mêmes propriétés d’image dans une nouvelle séquence avec le nom de base newseq créé dans le répertoire de travail actuel, avec le même type. Les séquences d’entrée peuvent être dans différents répertoires, peuvent être spécifiées soit en chemin absolu ou relatif, avec le nom exact .seq ou avec seulement le nom de base avec ou sans le ‘_’ de fin.

NAME : mirrorx

SYNTAXE1 :
app.Execute(“mirrorx”)

SYNTAXE2 :
status=app.mirrorx()

STATUS :
status[0] = True: exécution ok
status[0] = False: Echec

DESCRIPTION:

Fait pivoter l’image autour d’un axe vertical.

NAME : mirrory

SYNTAXE1 :
app.Execute(“mirrory”)

SYNTAXE2 :
status=app.mirrory()

STATUS :
status[0] = True: exécution ok
status[0] = False: Echec

DESCRIPTION:

Fait pivoter l’image autour d’un axe horizontal.

NAME : mtf

SYNTAXE1 :
app.Execute(“mtf low midtone high”)

SYNTAXE2 :
status=app.mtf(low, midtone, high)

STATUS :
status[0] = True: exécution ok
status[0] = False: Echec

DESCRIPTION:

Applique la fonction de transfert des tons moyens à l’image courante chargée . Trois paramètres sont nécessaires, les tons bas, moyens et élevés là où les tons moyens s’équilibrent définit un étirement d’histogramme non linéaire dans la plage [0,1].

NAME : neg

SYNTAXE1 :
app.Execute(“neg”)

SYNTAXE2 :
status=app.neg()

STATUS :
status[0] = True: exécution ok
status[0] = False: Echec

DESCRIPTION:

Affiche la vue négative de l’image actuelle.

NAME : nozero

SYNTAXE1 :
app.Execute(“nozero level”)

SYNTAXE2 :
status=app.nozero(level)

STATUS :
status[0] = True: exécution ok
status[0] = False: Echec

DESCRIPTION:

Remplace les valeurs nulles par des valeurs de niveau. Utile avant une opération idiv ou fdiv.

NAME : offset

SYNTAXE1 :
app.Execute(“offset value”)

SYNTAXE2 :
status=app.offset(value)

STATUS :
status[0] = True: exécution ok
status[0] = False: Echec

DESCRIPTION:

Ajoute la valeur constante (spécifiée dans ADU) à l’image actuelle. Cette constante peut prendre une valeur négative. En mode 16 bits, les valeurs des pixels qui se situent en dehors de [0, 65535] sont coupées. En mode 32 bits, aucun écrêtage ne se produit.

NAME : preprocess

SYNTAXE1 :
app.Execute(“preprocess sequencename [-bias=filename] [-dark=filename] [-flat=filename] [-cfa] [-debayer] [-fix_xtrans] [-flip] [-equalize_cfa] [-opt] [-prefix=] [-fitseq]”)

SYNTAXE2 :
status=app.preprocess(sequencename, [bias=filename], [dark=filename], [flat=filename], [cfa], [debayer=True], [fix_xtrans=true], [flip=True], [equalize_cfa=True], [opt=True], [prefix=xxx], [fitseq=True])

STATUS :
status[0] = True: exécution ok
status[0] = False: Echec

DESCRIPTION:

Prétraite le nom de séquence de séquence à l’aide d’un offset, dark et flat donné dans l’argument

o Pour le offset, un niveau uniforme peut être spécifié à la place d’une image, en écrivant un signe ‘=’ puis une expression entre guillemet, tel que -bias=”=256 » ou -bias=”=64*$OFFSET ».

o Il est possible de préciser si les images sont CFA à des fins de correction cosmétique avec l’option ‘-cfa’ et aussi aux images débayrisées à la fin du processus avec ‘-debayer’.

o L’option -fix_xtrans est dédiée aux fichiers X-Trans en appliquant une correction sur les darks et les offsets pour supprimer le motif carré de l’image.

o L’option ‘-equalize_cfa’ égalise l’intensité moyenne des couches RVB du Master Flat CFA

o Il est également possible d’optimiser la soustraction du dark avec ‘-opt’.

o Le nom de la séquence de sortie commence par le préfixe « pp_ », sauf indication contraire avec l’option ‘-prefix=’.

o Si ‘-fitseq’ est fourni, la séquence de sortie sera une séquence FITS (fichier unique).

Notez que seuls les pixels chauds sont corrigés dans le processus de correction cosmétique.

NAME : register

SYNTAXE1 :
app.Execute(“register sequence [-norot] [-drizzle] [-prefix=] [-minpairs=] [-transf=] [-layer=]”)

SYNTAXE2 :
status=app.register(sequence, [norot=True] [drizzle=True] [prefix=xxx])

STATUS :
status[0] = True: exécution ok
status[0] = False: Echec

DESCRIPTION:

Effectue des transformations géométriques sur des images de la séquence donnée dans l’argument de sorte que
ils peuvent être superposés à l’image de référence. Utilisation d’étoiles pour l’enregistrement,
cet algorithme ne fonctionne qu’avec des images de ciel profond.

o Le nom de la séquence de sortie commence par le préfixe « r_ », sauf indication contraire.
avec -prefix= option.

o L’option ‘-drizzle’ active l’empilement des sous-pixels, soit en augmentant la mise à l’échelle de 2 les images créées dans la séquence pivotée ou en définissant un indicateur qui se poursuivra à la mise à l’échelle pendant l’empilement si -norot est passé.

o L’option -transf= spécifie l’utilisation de « shift », « similarity », « affine »
ou transformations « homographiques » respectivement, l’homographie étant la valeur par défaut sauf si ‘-norot’ est passé, ce qui utilise shift par défaut.

o L’option ‘-minpairs’= spécifiera le nombre minimum de paires d’étoiles qu’une image doit avoir avec l’image de référence, sinon le l’image sera rejeté.

o L’alignement se fait sur la couche verte pour les images RVB, sauf indication contraire de ‘-layer= option’ (0, 1 ou 2 pour R, G et B respectivement).

NAME : requires

SYNTAXE1 :
app.Execute(“requires x.y.z”)

SYNTAXE2 :
status=app.resample(“x.y.z”)

STATUS :
status[0] = True: exécution ok
status[0] = False: Echec

DESCRIPTION:

Renvoie une erreur si la version de Siril est antérieure à celle transmise dans l’argument. ie: nécessite 0.99.6

NAME : resample

SYNTAXE1 :
app.Execute(“resample factor”)

SYNTAXE2 :
status=app.resample(factor)

STATUS :
status[0] = True: exécution ok
status[0] = False: Echec

DESCRIPTION:

Rééchantillonne l’image avec un facteur «facteur».

NAME : rgradient

SYNTAXE1 :
app.Execute(“rgradient xc yc dR dalpha”)

SYNTAXE2 :
status=app.rgradient(xc, yc, dR, dalpha)

STATUS :
status[0] = True: exécution ok
status[0] = False: Echec

DESCRIPTION:

Crée deux images, avec un décalage radial (“dR” en pixels) et un décalage de rotation (“dalpha” en degrés) par rapport au point (“xc”, “yc”). Entre ces deux images, les décalages ont la même amplitude, mais un signe opposé. Les deux images sont ensuite ajoutés pour créer l’image finale. Ce processus est également appelé Larson Filtre Sekanina.

NAME : rl

SYNTAXE1 :
app.Execute(“rl threshold sigma corner_radius_boost iterations”)

SYNTAXE2 :
status=app.rl(threshold, sigma, corner_radius_boost, iterations)

STATUS :
status[0] = True: exécution ok
status[0] = False: Echec

DESCRIPTION:

Restaure une image à l’aide de la méthode Richardson-Lucy.

o Sigma est la taille du noyau à appliquer, tandis que corner_radius_boost est un valeur qui est ajoutée au sigma gaussien pour les tuiles dans les coins d’une image.
o Itérations est le nombre d’itérations à effectuer

NAME : rmgreen

SYNTAXE1 :
app.Execute(“rmgreen type”)

SYNTAXE2 :
status=app.rmgreen(type)

STATUS :
status[0] = True: exécution ok
status[0] = False: Echec

DESCRIPTION:

Applique un filtre chromatique de réduction du bruit. Il supprime le bruit vert dans l’image courante. Ce filtre est basé sur l’algorithme SCNR Average Neutral de PixInsight et c’est le même filtre utilisé par le plugin HLVG dans Photoshop.
Type=1 signifie Average Neutral Protection, tandis que type=2 signifie Maximum Protection neutre.

NAME : rotate

SYNTAXE1 :
app.Execute(“rotate degree, [-nocrop]”)

SYNTAXE2 :
status=app.rotate(degree,[nocrop=True])

STATUS :
status[0] = True: exécution ok
status[0] = False: Echec

DESCRIPTION:

Fait pivoter l’image d’un angle en degré. L’option ‘-nocrop’ peut être ajoutée pour éviter le recadrage

NAME : rotatepi

SYNTAXE1 :
app.Execute(“rotatepi”)

SYNTAXE2 :
status=app.rotatepi()

STATUS :
status[0] = True: exécution ok
status[0] = False: Echec

DESCRIPTION:

Fait pivoter l’image d’un angle de 180 ° autour de son centre. Cela équivaut à la commande “ROTATE 180” ou “ROTATE -180”.

NAME : satu

SYNTAXE1 :
app.Execute(“satu coeff”)

SYNTAXE2 :
status=app.satu(coeff)

STATUS :
status[0] = True: exécution ok
status[0] = False: Echec

DESCRIPTION:

Améliore la saturation globale de l’image. Essayez de manière itérative pour obtenir les meilleurs résultats.

NAME : save

SYNTAXE1 :
app.Execute(“save filename”)

SYNTAXE2 :
status=app.save(filename)

STATUS :
status[0] = True: exécution ok
status[0] = False: Echec

DESCRIPTION:

Enregistre l’image actuelle dans filename.fit (ou .fits, selon vos préférences,
voir SETEXT). S’adapte aux en-têtes MIPS-HI et MIPS-LO sont ajoutés avec des valeurs correspondantes
aux niveaux d’affichage actuels.

NAME : savebmp

SYNTAXE1 :
app.Execute(“savebmp filename”)

SYNTAXE2 :
status=app.savebmp(filename)

STATUS :
status[0] = True: exécution ok
status[0] = False: Echec

DESCRIPTION:

Enregistre l’image courante sous la forme d’un fichier bitmap avec 8 bits par canal: filename.bmp (BMP 24 bits).

NAME : savejpg

SYNTAXE1 :
app.Execute(“savejpg filename [quality]”)

SYNTAXE2 :
status=app.savejpg(filename, [quality=100])

STATUS :
status[0] = True: exécution ok
status[0] = False: Echec

DESCRIPTION:

Enregistre l’image actuelle dans un fichier JPG : filename.jpg.

Vous avez la possibilité d’ajuster la qualité de la compression. Une valeur 100 pour le paramètre de qualité offre la meilleure fidélité tandis qu’une valeur faible augmente le taux de compression. Si aucune valeur n’est spécifiée, une valeur par défaut de 100 est appliquée.

NAME : savepng

SYNTAXE1 :
app.Execute(“savepng filename”)

SYNTAXE2 :
status=app.savepng(filename)

STATUS :
status[0] = True: exécution ok
status[0] = False: Echec

DESCRIPTION:

Enregistre l’image actuelle sous forme de fichier PNG.

NAME : savepnm

SYNTAXE1 :
app.Execute(“savepnm filename”)

SYNTAXE2 :
status=app.savepnm(filename)

STATUS :
status[0] = True: exécution ok
status[0] = False: Echec

DESCRIPTION:

Enregistre l’image actuelle sous la forme d’un format de fichier Netpbm avec 16 bits par canal.

L’extension de la sortie sera filename.ppm pour l’image RVB et filename.pgm pour l’image de niveau de gris

Plus de détails sur le format Netpbm sur : http://en.wikipedia.org/wiki/Netpbm_format.

NAME : savetif

SYNTAXE1 :
app.Execute(“savetif filename”)

SYNTAXE2 :
status=app.savetif(filename)

STATUS :
status[0] = True: exécution ok
status[0] = False: Echec

DESCRIPTION:

Saves current image under the form of a uncompressed TIFF file with 16bits per channel.

NAME : savetif32

SYNTAXE1 :
app.Execute(“savetif32 filename”)

SYNTAXE2 :
status=app.savetif32(filename)

STATUS :
status[0] = True: exécution ok
status[0] = False: Echec

DESCRIPTION:

Même commande que SAVE_TIF mais le fichier de sortie est enregistré en 32 bits par canal.

NAME : savetif8

SYNTAXE1 :
app.Execute(“savetif8 filename”)

SYNTAXE2 :
status=app.savetif8(filename)

STATUS :
status[0] = True: exécution ok
status[0] = False: Echec

DESCRIPTION:

Même commande que SAVETIF mais le fichier de sortie est enregistré en 32 bits par canal : filename.tif.

NAME : seqextract_Green

SYNTAXE1 :
app.Execute(“seqextract_Green seqname [-prefix=]”)

SYNTAXE2 :
status=app.seqextract_Green(seqname,[prefix=xxx])

STATUS :
status[0] = True: exécution ok
status[0] = False: Echec

DESCRIPTION:

Même commande que extract_Green sauf pour la séquence « seqname ».
Le nom de la séquence de sortie commence par le préfixe « Green_ », sauf indication contraire
spécifié avec l’option « -prefix= ».

NAME : seqextract_Ha

SYNTAXE1 :
app.Execute(“seqextract_Ha seqname [-prefix=]”)

SYNTAXE2 :
status=app.seqextract_Ha(seqname,[prefix=xxx])

STATUS :
status[0] = True: exécution ok
status[0] = False: Echec

DESCRIPTION:

Même commande que extract_Ha mais pour la séquence “seqname”.
Le nom de la séquence de sortie commence par le préfixe “Ha_” sauf indication contraire spécifié avec l’option “-prefix =”.

NAME : seqextract_HaOIII

SYNTAXE1 :
app.Execute(“seqextract_HaOIII seqname [-prefix=]”)

SYNTAXE2 :
status=app.seqextract_HaOIII(seqname,[prefix=xxx])

STATUS :
status[0] = True: exécution ok
status[0] = False: Echec

DESCRIPTION:

Même commande que EXTRACT_HAOIII mais pour la séquence “seqname”. Le résultat le nom de la séquence commence par le préfixe “Ha_” et “OIII_”.

NAME : seqcosme

SYNTAXE1 :
app.Execute(“seqcosme sequencename [filename].lst [-prefix=]”)

SYNTAXE2 :
status=app.seqcosme(seqname,[filename].lst, [prefix=xxx])

STATUS :
status[0] = True: exécution ok
status[0] = False: Echec

DESCRIPTION:

Même commande que COSME mais pour le nom de séquence de séquence.

Le nom de la séquence de sortie commence par le préfixe « cosme_ », sauf indication contraire. spécifié avec l’option « -prefix= »

NAME : seqcosme_cfa

SYNTAXE1 :
app.Execute(“seqcosme_cfa sequencename [filename].lst [-prefix=]”)

SYNTAXE2 :
status=app.seqcosme_cfa(seqname,[filename].lst, [prefix=xxx])

STATUS :
status[0] = True: exécution ok
status[0] = False: Echec

DESCRIPTION:

Même commande que COSME mais pour le nom de séquence de séquence.

Le nom de la séquence de sortie commence par le préfixe « cosme_ », sauf indication contraire. spécifié avec l’option « -prefix= »

NAME : seqcrop

SYNTAXE1 :
app.Execute(“seqcrop [-prefix=xxx]”)

SYNTAXE2 :
status=app.seqcrop([prefix=xxx])

STATUS :
status[0] = True: exécution ok
status[0] = False: Echec

DESCRIPTION:

Même commande que COSME mais pour le nom de séquence de séquence.
Le nom de la séquence de sortie commence par le préfixe « cosme_ », sauf indication contraire spécifié avec l’option « -prefix= »

NAME : seqfind_cosme

SYNTAXE1 :
app.Execute(“seqfind_cosme cold_sigma hot_sigma [-prefix=xxx]”)

SYNTAXE2 :
status=app.seqfind_cosme(cold_sigma, hot_sigma, [prefix=xxx])

STATUS :
status[0] = True: exécution ok
status[0] = False: Echec

DESCRIPTION:

Même commande que FIND_COSME mais pour une sequence .
Le nom de la séquence de sortie commence par le préfixe « cc_ », sauf indication contraire avec -prefix= option .

NAME : seqfind_cosme_cfa

SYNTAXE1 :
app.Execute(“seqfind_cosme_cfa cold_sigma hot_sigma [-prefix=xxx]”)

SYNTAXE2 :
status=app.seqfind_cosme_cfa(cold_sigma, hot_sigma, -prefix=xxx])

STATUS :
status[0] = True: exécution ok
status[0] = False: Echec

DESCRIPTION:

Même commande que FIND_COSME_CFA mais pour une séquence.
Le nom de la séquence de sortie commence par le préfixe « cc_ », sauf indication contraire avec -prefix= option .

NAME : seqfind_cosme_cfa

SYNTAXE1 :
app.Execute(“seqfind_cosme_cfa cold_sigma hot_sigma [-prefix=xxx]”)

SYNTAXE2 :
status=app.seqfind_cosme_cfa(cold_sigma, hot_sigma, -prefix=xxx])

STATUS :
status[0] = True: exécution ok
status[0] = False: Echec

DESCRIPTION:

Même commande que FIND_COSME_CFA mais pour une séquence.
Le nom de la séquence de sortie commence par le préfixe « cc_ », sauf indication contraire avec -prefix= option .

NAME : seqmtf

SYNTAXE1 :
app.Execute(“seqmtf seqname low midtone high [prefix=xxx]”)

SYNTAXE2 :
status=app.seqmtf()

STATUS :
status[0] = True: exécution ok
status[0] = False: Echec

DESCRIPTION:

Même commande que MTF mais pour la séquence seqname. Le nom de la séquence de sortie commence par le préfixe “mtf_” sauf indication contraire avec l’option “-prefix =”.

NAME : seqsplit_cfa

SYNTAXE1 :
app.Execute(“seqsplit_cfa seqname [-prefix=xxx]”)

SYNTAXE2 :
status=app.seqsplit_cfa(seqname, [prefix=xxx])

STATUS :
status[0] = True: exécution ok
status[0] = False: Echec

DESCRIPTION:

Même commande que SPLIT_CFA mais pour une séquence. Les séquences de sortie les noms commencent par le préfixe « CFA_ », sauf indication contraire avec l’option -prefix=.

NAME : seqstat

SYNTAXE1 :
app.Execute(“seqstat sequencename output [option]”)

SYNTAXE2 :
status=app.seqstat(seqname, output, [option])

STATUS :
status[0] = True: exécution ok
status[0] = False: Echec

DESCRIPTION:

Même commande que STAT mais pour une sequence.
La sortie est enregistrée sous la forme d’un fichier csv donné dans le deuxième argument.
Le paramètre facultatif définit le nombre de valeurs statistiques calculées : basic ou main (plus détaillé mais plus long à calculer).

NAME : seqsubsky

SYNTAXE1 :
app.Execute(“seqsubsky seqname degree [-prefix=xxx]”)

SYNTAXE2 :
status=app.seqsubsky(seqname, degree, [prefix=xxx])

STATUS :
status[0] = True: exécution ok
status[0] = False: Echec

DESCRIPTION:

Même commande que SUBSKY mais pour une séquence. La séquence de sortie nom commence par le préfixe “bkg_” sauf indication contraire avec l’option “-prefix =”.

NAME : set16bits

SYNTAXE1 :
app.Execute(“set16bits”)

SYNTAXE2 :
status=app.set16bits()

STATUS :
status[0] = True: exécution ok
status[0] = False: Echec

DESCRIPTION:

Interdire l’enregistrement des images avec 32 bits par canal lors du traitement, utilisez 16 à la place.

NAME : set32bits

SYNTAXE1 :
app.Execute(“set32bits”)

SYNTAXE2 :
status=app.set32bits()

STATUS :
status[0] = True: exécution ok
status[0] = False: Echec

DESCRIPTION:

Permettre aux images d’être enregistrées avec 32 bits par canal lors du traitement.

NAME : setcompress

SYNTAXE1 :
app.Execute(“setcompress 0/1 [-type=] [q]”)

SYNTAXE2 :
status=app.setcompress(0/1, [type=] [q])

STATUS :
status[0] = True: exécution ok
status[0] = False: Echec

DESCRIPTION:

Définit si les images sont compressées ou non.
0 signifie pas de compression tandis que 1 active la compression.
Si la compression est activée, le type doit être explicitement écrit dans l’option
-type= (« rice», « gzip1 », « gzip2 »).
Associée à la compression, la valeur de quantification doit se situer dans [0, 256] gamme. Par exemple, « setcompress 1 -type=rice 16 » définit la compression rice avec une quantification de 16

NAME : setcpu

SYNTAXE1 :
app.Execute(“setcpu number”)

SYNTAXE2 :
status=app.setcpu(number)

STATUS :
status[0] = True: exécution ok
status[0] = False: Echec

DESCRIPTION:

Définit le nombre de threads de traitement utilisés pour le calcul.

Peut être aussi élevé que le nombre de threads virtuels existants sur le système, qui est le nombre de cœurs de processeur ou deux fois ce nombre si l’hyperthreading (Intel HT) est disponible.

NAME : setext

SYNTAXE1 :
app.Execute(“setext extension”)

SYNTAXE2 :
status=app.setext(extension)

STATUS :
status[0] = True: exécution ok
status[0] = False: Echec

DESCRIPTION:

Définit l’extension utilisée et reconnue par les séquences. L’argument “extension” peut être “fit”, “fts” ou “fits”.

NAME : setfindstar

SYNTAXE1 :
app.Execute(“setfindstar ksigma roundness”)

SYNTAXE2 :
status=app.setfindstar(ksigma, roundness)

STATUS :
status[0] = True: exécution ok
status[0] = False: Echec

DESCRIPTION:

Définit des seuils au-dessus du bruit et de la rondeur des étoiles pour la détection des étoiles avec Commandes FINDSTAR et REGISTER.

Sigma doit être supérieur ou égal à 0,05 et arrondi entre 0 et 0,9

Le seuil de détection d’étoiles est calculé comme la médiane de l’image (qui
représente en général le niveau de fond) plus K.sigma fois sigma, sigma étant l’écart-type de l’image (qui est une bonne indication du bruit
amplitude). Si vous avez beaucoup d’étoiles dans vos images et un bon rapport signal/bruit, il peut être judicieux d’augmenter cette valeur pour accélérer la détection et les faux Positifs.

L’argument de rondeur est le rapport minimal de l’axe court sur l’axe long
de l’étoile gaussienne (voir PSF). Une valeur de 1 ne garderait que parfaitement ronde étoiles, une valeur de 0,5, la valeur par défaut, signifie que les étoiles détectées deux fois plus grandes sur un l’axe comme sur l’autre sera toujours utilisé pour l’enregistrement.

Il est recommandé de tester les valeurs utilisées pour une séquence avec l’interface graphique de Siril, disponible dans la boîte à outils PSF dynamique à partir du menu d’analyse. Il peut s’améliorer qualité d’enregistrement pour augmenter les paramètres, mais il est également important d’être capable de détecter plusieurs dizaines d’étoiles dans chaque image.

NAME : setmem

SYNTAXE1 :
app.Execute(“setmem ratio”)

SYNTAXE2 :
status=app.setmem()

STATUS :
status[0] = True: exécution ok
status[0] = False: Echec

DESCRIPTION:

Définit un nouveau ratio de mémoire libre sur la mémoire utilisée pour l’empilement.
La valeur du ratio devrait être comprise entre 0,05 et 2, selon les autres activités de la machine. Un rapport plus élevé devrait permettre au siril de s’empiler plus rapidement, mais en définissant le rapport de la mémoire utilisée pour l’empilement au-dessus de 1 nécessitera l’utilisation de mémoire sur disque, qui est très lent et non-recommandé.

NAME : setref

SYNTAXE1 :
app.Execute(“setref seqname image”)

SYNTAXE2 :
status=app.setref(seqname, image)

STATUS :
status[0] = True: exécution ok
status[0] = False: Echec

DESCRIPTION:

Définit l’image de référence de la séquence donnée dans le premier argument.

NAME : split

SYNTAXE1 :
app.Execute(“split fileR fileG fileB”)

SYNTAXE2 :
status=app.split(fileR, fileG, fileB)

STATUS :
status[0] = True: exécution ok
status[0] = False: Echec

DESCRIPTION:

Divise l’image couleur en trois fichiers distincts (un pour chaque canal) et
les enregistre dans les fichiers : fileR.fit, fileG.fit and fileB.fit files.

NAME : split_cfa

SYNTAXE1 :
app.Execute(“split_cfa”)

SYNTAXE2 :
status=app.split_cfa()

STATUS :
status[0] = True: exécution ok
status[0] = False: Echec

DESCRIPTION:

Divise l’image CFA en quatre fichiers distincts (un pour chaque canal) et les enregistre dans des fichiers.

NAME : stack

SYNTAXE1 :
app.Execute(“stack seqfilename”)
app.Execute(“stack seqfilename { sum | min | max } [filtering] [-output_norm] [weighted] [-out=filename]”)
app.Execute(“stack seqfilename { med | median } [-nonorm, norm=] [-filter-included] [weighted] [-out=filename]”)
app.Execute(“stack seqfilename { rej | mean } [rejection type] sigma_low sigma_high [-nonorm, norm=] [filtering] [-weighted] [-out=filename]”)

SYNTAXE2 :
status=app.stack(seqfilename)
status=app.stack(seqfilename, type={sum|min|max}, [filtering] [output_norm] [weighted] [out=filename])
status=app.stack(seqfilename, type={med|median}, [norm=no, norm=] [filter-included] [weighted] [out=filename])
status=app.stack(seqfilename, type={rej|mean}, [rejection type], sigma_low, sigma_high, [nonorm,norm=] [filtering] [weighted] [out=filename])

STATUS :
status[0] = True: exécution ok
status[0] = False: Echec

DESCRIPTION:

Avec [filtering] étant l’une d’entre elles, sans ordre ni nombre particulier :
[-filter-fwhm=value[%]] [-filter-wfwhm=value[%]] [-filter-round=value[%]]
[-filter-quality=value[%]] [-filter-included]

Empile la séquence seqfilename, en utilisant les options.
o Type de rejet :
Les types autorisés sont : “sum”, “max”, “min”, “med” (ou “median”).
et “rej” (ou “mean”). Si aucun argument autre que le nom de la séquence n’est est fourni, l’empilement de la somme est supposé.
o Empilage avec rejet :
Les types rej ou mean nécessitent l’utilisation d’arguments supplémentaires pour le rejet
type et valeurs. Le type de rejet est l’un des suivants : {p[ercentile] | s[igma] | m[edian] | m[edian] | m[edian].
| m[edian] | w[insorized] | l[inear] | g[eneralized] | [m]a[d]} pour les types suivants : Percentile, sigma, médiane, winsorisé, ajustement linéaire, extrême généralisé.
Test d’écart studentisé ou écrêtage k-MAD. Si elle est omise, la valeur par défaut (Winsorized) est utilisé. Les paramètres sigma low et sigma high de rejet sont obligatoires.
o Normalisation des images d’entrée :
Pour les types d’empilage med|médian et rej|moyen, différents types de
types de normalisation sont autorisés : -norm=add pour additif, -norm=mul pour multiplicatif. Les options -norm=addscale et -norm=mulscale appliquent les mêmes normalisation mais avec des opérations d’échelle.
“-nonorm” est l’option pour désactiver la normalisation. Sinon, la méthode addtive avec scale est appliquée par défaut.

o Autres options pour l'empilement des rejets :
    "-weighted" est une option qui permet d'ajouter des poids plus importants aux images avec un faible 
    bruit de fond.
    "-output_norm" applique une normalisation à la fin de l'empilement pour 
    pour redimensionner le résultat dans la plage [0, 1].

o Sorties :
    Le nom de l'image du résultat peut être défini avec l'option -out=. Sinon, il sera 
    Sinon, elle sera nommée sequencename_stacked.fit.

Filtrage des images :
    Les images à empiler peuvent être sélectionnées en fonction de certains filtres, comme la sélection manuelle ou le meilleur FWHM, avec certaines options. 
    manuelle ou le meilleur FWHM, avec certaines des options -filter-*.
Voir la référence de la commande pour la documentation complète sur cette commande.
NAME : stackall

SYNTAXE1 :
app.Execute(“stackall”)
app.Execute(“stackall { sum | min | max } [filtering] [-output_norm] [weighted] [-out=filename]”)
app.Execute(“stackall { med | median } [-nonorm, norm=] [-filter-included] [weighted] [-out=filename]”)
app.Execute(“stackall { rej | mean } [rejection type] sigma_low sigma_high [-nonorm, norm=] [filtering] [weighted] [-out=filename]”)

SYNTAXE2 :
status=app.stackall(seqfilename)
status=app.stackall( type={sum|min|max}, [filtering] [output_norm] [weighted] [out=filename])
status=app.stackall( type={med|median}, [norm=no, norm=] [filter-included] [weighted] [out=filename])
status=app.stackall( type={rej|mean}, [rejection type], sigma_low, sigma_high, [nonorm,norm=] [filtering] [weighted] [out=filename])

STATUS :
status[0] = True: exécution ok
status[0] = False: Echec

DESCRIPTION:

Avec [filtering] étant l’une d’entre elles, sans ordre ni nombre particulier :
[-filter-fwhm=value[%]] [-filter-wfwhm=value[%]] [-filter-round=value[%]]
[-filter-quality=value[%]] [-filter-included]

Ouvre toutes les séquences dans le répertoire courant et les empile avec le type d’empilement et le filtrage spécifiés en option ou avec l’empilement de la somme. type d’empilement et le filtrage spécifiés en option ou avec l’empilement par somme. Voir la commande STACK pour
description des options.

Des images empilées pour chaque séquence sont créées avec le suffixe “_stacked” et l’extension de fichier l’extension de fichier FITS configurée.

NAME : stat

SYNTAXE1 :
app.Execute(“stat”)

SYNTAXE2 :
status=app.stat()

STATUS :
status[0] = True: exécution ok
status[0] = False: Echec
status[1] = les statistiques

DESCRIPTION:

Renvoie la statistique globale de l’image actuelle. Si une sélection est effectuée, la commande renvoie une statistique globale dans la sélection.

Ex: B&W layer: Mean: 5458.6, Median: 5568.0, Sigma: 1159.7, AvgDev: 831.5, Min: 1408.0, Max: 65520.0

NAME : subsky

SYNTAXE1 :
app.Execute(“subsky degree”)

SYNTAXE2 :
status=app.subsky(degree)

STATUS :
status[0] = True: exécution ok
status[0] = False: Echec

DESCRIPTION:

Calcule le niveau de l’arrière-plan du ciel local grâce à une fonction polynomiale d’un degré d’ordre et le soustrait de l’image.

NAME : unsharp

SYNTAXE1 :
app.Execute(“unsharp sigma multi”)

SYNTAXE2 :
status=app.unsharp(sigma, multi)

STATUS :
status[0] = True: exécution ok
status[0] = False: Echec

DESCRIPTION:

Applique à l’image de travail un masque flou avec sigma sigma et coefficient multi.

NAME : wavelet

SYNTAXE1 :
app.Execute(“wavelet, plan_number, type”)

SYNTAXE2 :
status=app.wavelet(plan_number, type)

STATUS :
status[0] = True: exécution ok
status[0] = False: Echec

DESCRIPTION:

Calcule la transformée en ondelettes sur les plans “nbr_plan” en utilisant linéaire (type = 1) ou version bspline (type = 2) de l’algorithme ‘a trous’. Le résultat est stocké dans un fichier sous forme de structure contenant les plans, prêt pour la reconstruction pondérée
avec WRECONS.

NAME : wrecons

SYNTAXE1 :
app.Execute(“wrecons c1 c2 … cn”)

SYNTAXE2 :
status=app.wrecons(list_coef)

STATUS :
status[0] = True: exécution ok
status[0] = False: Echec

DESCRIPTION:

Reconstruit l’image actuelle à partir des plans précédemment calculés avec des ondelettes et pondéré avec les coefficients c1, c2, …, cn en fonction du nombre de plans utilisé pour la transformation en ondelettes.