TLB Astro

Pré-traitement OSC avec Siril 1.4 — méthode script Python

TLB Astro — Guide de traitement générique — TLB_ASTRO-OSC_Preprocessing.py v1.5.0

Ce tutoriel explique comment prétraiter et empiler une cible unique (pas une mosaïque) prise avec une caméra couleur (OSC), en utilisant le script Python TLB_ASTRO-OSC_Preprocessing.py. Il automatise, via une interface graphique, la conversion, la calibration (bias/dark/flat, chacun optionnel), l'alignement et l'empilement dans Siril 1.4 — y compris quand la cible a été capturée sur plusieurs nuits différentes.

Le script s'adapte à ce que tu lui fournis : calibration avec ou sans bias/dark/flat, une seule session ou plusieurs, drizzle activable avec un calcul automatique de l'échelle recommandée, et un empilement par lots qui contourne une limite technique de Windows sur les très grands nombres de brutes.

À savoir

Pour assembler une mosaïque (plusieurs panneaux du ciel), utilise plutôt TLB_ASTRO-OSC_mosaique.py et son propre tutoriel. Ce script-ci traite un seul champ du ciel, éventuellement réparti sur plusieurs nuits.

Script en évolution

Le script est amené à évoluer (nouveaux capteurs, options supplémentaires...). Ce tutoriel correspond à la version 1.5.0 — le numéro de version est visible dans l'en-tête de la fenêtre du script et via son bouton À propos. Depuis la 1.5.0, le menu déroulant Capteur propose une sélection de caméras Player One, ZWO et QHY courantes, ainsi qu'une entrée Autre pour saisir directement une taille de pixel (section 4.5).

1. Prérequis

2. Logique générale du script

3. Installer le script dans Siril

1Récupère TLB_ASTRO-OSC_Preprocessing.py et place-le dans le même dossier que tes scripts .ssf habituels (celui configuré dans Préférences → Scripts).
2Redémarre Siril (ou utilise Scripts → Actualiser) pour qu'il apparaisse dans la liste des scripts. Aucune édition du fichier n'est nécessaire : tout se configure dans l'interface graphique au lancement.
Scripting Python : encore expérimental

Teste d'abord sur un petit jeu de brutes avant de lancer un traitement complet, et garde en tête que l'API peut encore évoluer d'une version à l'autre de Siril.

4. Étape 1 — Configurer et lancer le script

Lance le script depuis le menu Scripts (comme un .ssf). Une fenêtre TLB Astro — Configuration pré-traitement OSC s'ouvre avant toute chose — Siril reste en attente tant qu'elle est ouverte. Le bandeau du haut affiche le logo, le nom et la version du script, ainsi qu'un bouton À propos.

4.1 — Répertoire de traitement

En haut de la fenêtre, le champ Répertoire de traitement est pré-rempli avec le répertoire de travail actuel de Siril. Change-le si besoin via Parcourir…. C'est ce dossier qui recevra le sous-dossier process/ (fichiers intermédiaires) et le fichier résultat final — il peut être différent des dossiers où se trouvent tes brutes.

4.2 — Bias et dark partagés

Deux champs optionnels, Bias partagé et Dark partagé, se pré-remplissent automatiquement avec <répertoire de traitement>/biases et /darks, et continuent à suivre le répertoire de traitement si tu le changes. Dès que tu modifies l'un de ces deux champs toi-même (saisie, Parcourir… ou Effacer), il cesse de suivre automatiquement.

Ces dossiers servent de bias/dark par défaut pour toutes les sessions qui ne définissent pas leur propre surcharge (section 8). Laisse-les vides si tu préfères tout renseigner session par session, ou si tu n'as pas de bias/dark du tout.

4.3 — Sessions

Une seule ligne de session est présente par défaut — le cas courant d'une cible prise en une seule nuit. Chaque ligne comporte :

Utilise + Ajouter une session pour traiter une cible reprise sur plusieurs nuits, et Supprimer cette session pour retirer une ligne. Voir la section 8 pour la logique complète de partage bias/dark et le comportement avec plusieurs sessions.

Pourquoi le flat n'est jamais partagé

Une caméra démontée puis remontée entre deux nuits (ou un rotateur de champ qui a bougé) change la position des poussières sur le capteur : un flat d'une nuit ne corrige plus correctement une autre nuit. Le flat reste donc systématiquement un réglage par session.

4.4 — Drizzle (Bayer Drizzle)

Coche Utiliser le drizzle pour faire apparaître deux champs supplémentaires :

Le script affiche alors l'échantillonnage réel de ta configuration et calcule une Échelle à utiliser recommandée (voir section 6 pour le détail du calcul). Ce champ reste modifiable : si tu changes la focale ou le seeing, l'échelle se recalcule automatiquement tant que tu ne l'as pas toi-même modifiée à la main — après quoi elle reste figée à ta valeur, même si tu retouches la focale ou le seeing ensuite.

4.5 — Capteur et seuil de découpage

Le menu Capteur propose une sélection de caméras courantes, regroupées par capteur réel (plusieurs marques vendent parfois des caméras autour du même capteur Sony, avec exactement la même taille de pixel) :

CamérasCapteurPixel
Player One Artemis-C Pro / ZWO ASI294MC Pro / QHY294C ProSony IMX2944,63 µm
Player One Uranus-C / ZWO ASI585MC ProSony IMX5852,90 µm
ZWO ASI183MC Pro / QHY183CSony IMX1832,40 µm
Player One Neptune-C II / ZWO ASI662MC / iOptron iCam 464CSony IMX4642,90 µm
ZWO ASI533MC Pro / Player One Saturn-C / QHY533CSony IMX5333,76 µm
ZWO ASI2600MC Pro / QHY268CSony IMX5713,76 µm
ZWO ASI6200MC Pro / QHY600CSony IMX4553,76 µm

Ta caméra n'est pas dans la liste (autre marque, autre capteur) ? Choisis Autre (taille de pixel personnalisée) : un champ Taille de pixel (µm) apparaît alors, à renseigner toi-même — la fiche technique de ta caméra ou de son capteur indique cette valeur.

Astuce

Le choix du capteur n'a d'effet que si le drizzle est coché (section 4.4) : c'est la seule étape du script qui utilise la taille de pixel, pour calculer l'échelle recommandée. Sans drizzle, ce menu n'a aucune influence sur le traitement.

Le champ Seuil de découpage par lot (2000 par défaut, modifiable jusqu'à 2048) contrôle le mécanisme décrit en section 9.

4.6 — Lancer le traitement

1Une fois tout renseigné, clique sur Go. Le bouton Annuler ferme la fenêtre sans rien lancer, à n'importe quel moment.
À savoir

Au clic sur Go, le script vérifie le répertoire de traitement, les dossiers renseignés (partagés et par session), l'unicité des noms de session, le seuil de découpage, et — si le drizzle est coché — que la focale, le seeing et l'échelle sont des nombres positifs. Une fenêtre d'erreur s'affiche sinon et te laisse corriger sans tout refermer.

5. Ce que fait le script ensuite

Une fois validé, la fenêtre se ferme et le script traite, pour chacune des sessions configurées :

1Suis la progression dans la console Siril : elle affiche le capteur, l'état du drizzle (avec ses paramètres calculés), le seuil de lot, la liste des sessions, puis l'avancement session par session.
2À la fin, le message de la console indique le nom exact du fichier résultat, à la racine du répertoire de traitement.

6. Le drizzle dans ce script

Le drizzle sert ici à deux choses : éviter les artefacts de dématriçage classique (fond de ciel plus propre) et, si ton système est réellement sous-échantillonné, récupérer un peu de résolution. Le script calcule une échelle recommandée à partir de trois valeurs :

Le calcul compare ton échantillonnage réel (secondes d'arc par pixel, déduit de la focale et de la taille de pixel) à un échantillonnage jugé idéal (la moitié du seeing, critère de Nyquist usuel). Si les deux sont proches, l'échelle recommandée reste à 1.0 (le drizzle n'améliore alors que la propreté du fond de ciel, pas la résolution). Si ton système est nettement sous-échantillonné par rapport au seeing, l'échelle recommandée monte au-dessus de 1.0 (plafonnée à 3.0).

Astuce

Tu peux toujours modifier l'échelle proposée à la main si tu as une raison précise de vouloir une valeur différente — le script ne l'impose pas, il propose un point de départ raisonnable.

Techniquement, quand le drizzle est activé, le script conserve le motif de Bayer intact à la calibration (pas de démosaïçage classique) et utilise l'alignement en Bayer Drizzle avec un noyau carré (le plus robuste). Sans drizzle, le démosaïçage classique a lieu normalement à la calibration.

7. Nom du fichier résultat

Le nom est construit par le script lui-même, à partir des informations lues directement dans l'en-tête FITS des brutes d'origine (mots-clés OBJECT et EXPTIME) — pas par les tokens automatiques de Siril, qui ne resteraient pas fiables une fois que des stacks déjà empilés sont eux-mêmes combinés entre eux (voir section 9). Deux formats possibles :

Le temps total d'intégration est toujours calculé précisément (somme, pour chaque session, du nombre de poses × leur temps de pose), quel que soit le format retenu pour le reste du nom.

Si l'entête FITS est incomplet

Si une session n'a pas de mot-clé OBJECT ou EXPTIME exploitable, le script continue mais te prévient dans la console : le nom de fichier basculera alors sur le format « poses/sessions », et le temps total sera sous-estimé pour la ou les sessions concernées.

8. Sessions multiples : pourquoi et comment

Reprendre une cible sur plusieurs nuits change certaines choses : la température (donc le dark, surtout sans capteur refroidi), l'état des poussières sur le capteur si la caméra a été démontée (donc le flat), et la qualité du ciel (turbulence, lune).

8.1 — Règle de partage bias/dark

Une session utilise son propre bias/dark s'il est renseigné ; sinon, elle utilise le bias/dark partagé défini en haut de la fenêtre (section 4.2) ; sinon, aucun. Deux cas de figure typiques :

Le bias varie généralement peu d'une nuit à l'autre ; le partager est donc l'usage le plus courant, mais la même logique de surcharge par session reste disponible si besoin.

8.2 — Ce qui se passe ensuite

Chaque session est calibrée séparément avec son bias/dark/flat effectif, puis toutes les sessions calibrées sont fusionnées en une seule séquence pour un alignement et un étalonnage global (section 5) — le résultat final est une seule image, pas une par session.

9. Limite Windows et découpage par lots

Sous Windows, un programme ne peut pas garder plus de 2048 fichiers ouverts simultanément (limite du runtime C, absolue — aucun réglage ne permet de la dépasser). Cette limite touche spécifiquement l'empilement : pour calculer un rejet de pixels (sigma clipping) à chaque position de pixel, Siril doit garder l'ensemble des fichiers de la séquence accessibles pendant toute la durée du calcul. La conversion et l'alignement, eux, traitent les images une par une et ne sont pas concernés.

9.1 — Ce que fait le script

9.2 — Le compromis à connaître

Empiler par lots revient à faire le rejet de pixels en deux temps (une fois par lot, une fois sur les stacks partiels) plutôt qu'en une seule passe globale. C'est légèrement moins efficace pour repérer un événement isolé (satellite, avion) qui ne toucherait qu'une seule brute au milieu de plusieurs milliers — mais c'est la seule façon de dépasser la limite Windows sans sacrifier de brutes. Avec une seule session sous le seuil, ce compromis ne s'applique pas : l'empilement reste direct et global.

10. Considérations selon ton matériel

Newton 150/750 et Artemis-C Pro

La valeur par défaut de 750 mm dans les champs drizzle correspond à ce tube. Si tu ajoutes un réducteur de focale ou changes de tube, pense à ajuster la longueur focale renseignée — c'est elle qui détermine l'échantillonnage réel et donc l'échelle de drizzle recommandée.

Capteur refroidi ou non

Voir section 8.1 : c'est ce qui détermine si tu as intérêt à partager le dark entre sessions ou à en définir un par session.

Rotateur de champ (ZWO CAA)

Si l'angle du rotateur change entre deux sessions, le flat n'est plus valable d'une session à l'autre : renseigne un flat propre à chaque session concernée (le flat n'est de toute façon jamais partagé, voir encadré section 4.3).

Nombre de brutes par session

Quel que soit ce nombre, le rejet Winsorized Sigma Clipping utilisé par le script élimine bruit résiduel et artefacts (avions, satellites) à chaque empilement — y compris à l'étape de consolidation finale quand plusieurs lots sont utilisés (section 9).

11. En cas de souci

12. Checklist résumée