Aller au contenu

StarlinkSweeper : script PixInsight qui trouve les brutes traversées par des satellites


Messages recommandés

Posté

StarlinkSweeper : script PixInsight qui trouve les brutes traversées par des satellites

Le sigma-clipping vire le cœur d'une traînée de satellite, pas ses ailes : à quelques pixels du centre, elle n'est plus qu'à 1 ou 2 σ au-dessus du bruit, sous n'importe quel kappa raisonnable. Quand on n'a pas assez de brutes pour les noyer, il reste dans le master une bande rectiligne faible, invisible en linéaire, flagrante après un gros stretch. Et le score qualité du prétraitement ne voit rien : une traînée ne change ni le nombre d'étoiles, ni la FWHM, ni la rondeur.

StarlinkSweeper scanne un dossier de brutes (FITS / XISF, sous-dossiers compris, flats et darks ignorés d'après IMAGETYP), détecte les lignes droites par projection de Radon + test de continuité, et liste les brutes touchées avec un score en σ, indépendant du temps de pose, du gain et de la caméra. Un train Starlink ressort comme plusieurs lignes parallèles au même angle.

  • Aperçu de chaque brute avec la traînée tracée en rouge, pour valider à l'œil.
  • Quarantaine dans un dossier créé à côté de l'arborescence scannée : le logiciel d'empilement ne les revoit jamais. Effacement définitif sur confirmation. Export CSV.
  • Deux moteurs : le script PixInsight seul (mono-cœur, aucune dépendance), ou en option la version Python livrée avec, qui scanne en parallèle sur tous les cœurs, curseur de workers borné par le CPU et la RAM de la machine.

Installation : Resources > Updates > Manage Repositories, ajouter https://jps-34.github.io/StarlinkSweeper/ (dépôt non signé pour l'instant : cocher « Allow unsigned update repositories »), puis Check for Updates.

Sources, README FR / EN et ligne de commande : github.com/jps-34/StarlinkSweeper. Licence MIT.

Code écrit avec Claude, sous ma direction, testé sur mes propres données. Retours bienvenus, en particulier sur des champs à filaments brillants et très rectilignes (Dentelles), le seul cas qui peut s'approcher du seuil.

Screenshot_20261018_190807.png

Posté (modifié)

Hello et bravo pour ton script.

 

Je l'ai testé et il identifie plutôt bien les traînées dans mes images. Cependant, le problème que je rencontre avec les satellites n’est pas tant lié aux Starlink (car j’ai généralement suffisamment d’images pour les gérer), mais plutôt aux satellites géostationnaires, qui sont présents dans toutes mes images lorsque je vise une zone concernée.

 

Du coup, je ne sais pas à quel point c'est difficile mais je me demandais si une alternative à la mise en quarantaine des images ne serait pas de de remplacer la traînée par une bande complètement noir ($T=0) qui recouvrirait complètement cette dernière (avec sans doute une largeur proportionnelle à l'intensité de la traînée). Cela permettrait de conserver la contribution de l'essentiel des images à l'empilement et devrait régler les soucis d’apparitions des traînées dans le masterlight (si l'option clip low range d'ImageIntegration est bien activée).

 

Nico

Modifié par nico1038
Posté
Il y a 3 heures, nico1038 a dit :

Du coup, je ne sais pas à quel point c'est difficile mais je me demandais si une alternative à la mise en quarantaine des images ne serait pas de de remplacer la traînée par une bande complètement noir ($T=0) qui recouvrirait complètement cette dernière (avec sans doute une largeur proportionnelle à l'intensité de la traînée).

Il y a un outil de Seti Astro qui fait ça mais à base d'IA si je ne m'abuse. J'avais testé et ça marche plutôt bien, l'outil en question remplace la trace par du noir mais ça se voit quand même. J'avais essayer de remplacer par la médiane de l'image et le résultat était parfait.

Un outil comme le tiens qui fait ça de façon algorithmique, donc logiquement plus rapidement, pourrait être très intéressant !

Posté (modifié)

J'ai mené un petit test sur un dossier contenant une cinquantaine d'images, ça semble très bien fonctionner ! Par contre j'ai un doute sur la lecture du résultat, dans le cas présent il y a avait 2 images (seulement !) avec des traces de satellites et sur l'une des deux je ne sais pas trop si la ligne quasi horizontale est bien compté. Si je me fie aux indication sous l'image j'ai 5 lignes en groupe de 3 et 2 quasiment à 90° d'écart, ce que l'image semble confirmer. Le problème ce sont les traits rouges en surimpression qui ne reprennent qu'une partie. Qu'est-ce qui est bon ?

image.thumb.jpeg.4ea299d49000853bb0064b11ea1ecdf8.jpeg

Modifié par Tromat
Posté (modifié)
Le 19/10/2026 à 20:15, Tromat a dit :

J'ai mené un petit test sur un dossier contenant une cinquantaine d'images, ça semble très bien fonctionner ! Par contre j'ai un doute sur la lecture du résultat, dans le cas présent il y a avait 2 images (seulement !) avec des traces de satellites et sur l'une des deux je ne sais pas trop si la ligne quasi horizontale est bien compté. Si je me fie aux indication sous l'image j'ai 5 lignes en groupe de 3 et 2 quasiment à 90° d'écart, ce que l'image semble confirmer. Le problème ce sont les traits rouges en surimpression qui ne reprennent qu'une partie. Qu'est-ce qui est bon ?

image.thumb.jpeg.4ea299d49000853bb0064b11ea1ecdf8.jpeg

Salut Tromat,

 

Désolé pour ne revenir vers toi et nico que maintenant, j'avais oublié de mettre le post en suivi...

 

Pour commencer, un grand merci pour le retour et content que le script vous plaise
je n'ai que le mérite des instructions données à Claude :) ce qui est dingue c'est que je lui fait adopter une approche Ingénieur et ca déboîte vraiment :)

Ce Claude est une révélation divine dans mon cas, ca faisait pas mal de temps que j'avais pas mal d'idées de projet mais j'étais incapable d'adresser avec mon faible niveau en coding pur

Alors, à propos de ton image, le mieux serait que tu me passes la brute en question pour que je le mette dans la moulinette. Il faut comprendre qu'avec le réglage du seuil le script ne te soumet que les cas les plus graves. Apres, tout n'est question que d'appréciation, ici par exemple le trait horizontal est clairement faible, il y a donc des chances qu'il disparaisse à la phase d'intégration même avec 25 brutes ? (à tester). mais ça n'est pas le cas de la trace verticale (angle 0.6°).


Donc on est bon à priori

Le 19/10/2026 à 16:23, nico1038 a dit :

Hello et bravo pour ton script.

 

Je l'ai testé et il identifie plutôt bien les traînées dans mes images. Cependant, le problème que je rencontre avec les satellites n’est pas tant lié aux Starlink (car j’ai généralement suffisamment d’images pour les gérer), mais plutôt aux satellites géostationnaires, qui sont présents dans toutes mes images lorsque je vise une zone concernée.

 

Du coup, je ne sais pas à quel point c'est difficile mais je me demandais si une alternative à la mise en quarantaine des images ne serait pas de de remplacer la traînée par une bande complètement noir ($T=0) qui recouvrirait complètement cette dernière (avec sans doute une largeur proportionnelle à l'intensité de la traînée). Cela permettrait de conserver la contribution de l'essentiel des images à l'empilement et devrait régler les soucis d’apparitions des traînées dans le masterlight (si l'option clip low range d'ImageIntegration est bien activée).

 

Nico

Salut Nico,

tout comme pour Tromat, désolé pour le miss, j'avais pas mis le post en suivi...
j'avoue ne pas avoir pensé aux cas des géo-stationnaires.
je pensais naïvement qu'ils disparaissaient à l'intégration

Tu aurais un set d'images brute (FITS 32 bit mini) 2 ou 3 successives pour que je me fasse une idée.
Si il n'existe pas de script actuel, je tenterai bien d'en faire un spécifique pour cet usage

Jacques

Modifié par jpsc01
Posté
il y a 7 minutes, jpsc01 a dit :

Alors, à propos de ton image, le mieux serait que tu me passes la brute en question pour que je le mette dans la moulinette. Il faut comprendre qu'avec le réglage du seuil le script ne te soumet que les cas les plus graves. Apres, tout n'est question que d'appréciation, ici par exemple le trait horizontal est clairement faible, il y a donc des chances qu'il disparaisse à la phase d'intégration même avec 25 brutes ? (à tester). mais ça n'est pas le cas de la trace verticale (angle 0.6°).

Le lien est ici (dispo 3 jours) :https://www.swisstransfer.com/dl/01a17269-2449-710f-8a3c-6f536563a210

  • J'aime 1
Posté (modifié)
Le 19/10/2026 à 16:23, nico1038 a dit :

Hello et bravo pour ton script.

 

Je l'ai testé et il identifie plutôt bien les traînées dans mes images. Cependant, le problème que je rencontre avec les satellites n’est pas tant lié aux Starlink (car j’ai généralement suffisamment d’images pour les gérer), mais plutôt aux satellites géostationnaires, qui sont présents dans toutes mes images lorsque je vise une zone concernée.

 

Du coup, je ne sais pas à quel point c'est difficile mais je me demandais si une alternative à la mise en quarantaine des images ne serait pas de de remplacer la traînée par une bande complètement noir ($T=0) qui recouvrirait complètement cette dernière (avec sans doute une largeur proportionnelle à l'intensité de la traînée). Cela permettrait de conserver la contribution de l'essentiel des images à l'empilement et devrait régler les soucis d’apparitions des traînées dans le masterlight (si l'option clip low range d'ImageIntegration est bien activée).

 

Nico

 

Pour les géostationnaires, c’est un autre problème que celui que vise le script. Un satellite de la ceinture reste à déclinaison fixe : une fois les brutes alignées, toutes les traînées retombent sur la même bande de pixels, dithering ou pas. Si la majorité des brutes est touchée au même endroit, le rejet statistique ne peut plus rien, et écarter des brutes n’a plus de sens. StarlinkSweeper est un outil de tri (il repère la brute, on la sort), pas de réparation, et je préfère le garder simple et sûr.

Sur le fond, ta piste est la bonne, à condition de remplacer la traînée par « pas de donnée » plutôt que par une valeur :

  • masquer la traînée à 0 dans chaque brute calibrée, idéalement après alignement, sinon l’interpolation bave sur les bords du masque ;
  • empiler avec Clip low range activé dans ImageIntegration, pour que les zéros soient exclus et non moyennés.

C’est aussi le choix de SetiAstro : dans SetiAstro Suite Pro, la suppression des traînées du module d’empilement remplace désormais la traînée par des NaN, autrement dit par une absence de donnée (notes de version 1.21.6 : https://github.com/setiastro/setiastrosuitepro/releases).

Si le noir se voyait quand même chez toi, mon hypothèse : les zéros n’étaient pas exclus à l’empilement (un 0 moyenné laisse une bande sombre), ou le masque ne couvrait pas les ailes de la traînée.

Attention au remplacement par la médiane : sur le fond de ciel le résultat est parfait, puisque c’est la bonne valeur, mais sur une nébuleuse tu remplaces du signal par du fond. Le master s’assombrit à cet endroit, d’autant plus que beaucoup de brutes sont réparées au même pixel, ce qui est justement le cas des géostationnaires.

Je note l’idée d’un outil algorithmique de masquage, séparé de StarlinkSweeper, si d’autres en ont l’usage.

Réponse co-rédigée avec Claude, relue et vérifiée par moi.

PS: je reste dubitatif sur les résultats qui sont obtenus
:)

Modifié par jpsc01
Posté
il y a 43 minutes, Tromat a dit :

hello Tromat
Les 5 lignes sont une seule et même traînée : la verticale.
Une traînée brillante laisse des « échos » dans la détection, c’est-à-dire des lignes secondaires à quelques degrés près. Les angles 179,35° et 179,45° ne sont pas à 90° des autres : une ligne n’a pas de sens de parcours, donc 179,4° équivaut à −0,6°, soit la même direction que 0,6°. Les 5 lignes sont donc toutes quasi verticales, collées les unes aux autres.

Les traits rouges partiels : chaque ligne n’est tracée que sur la portion où elle a été détectée (colonne Length : 100 %, 50 %, 25 %...). La ligne à 100 % est la bonne, les autres sont des morceaux de la même traînée.

La traînée horizontale faible n’apparaît pas pour deux raisons :

  • le script affine un nombre limité de candidats par brute, et les échos de la verticale ont pris toutes les places ;
  • même analysée à part, elle sort à environ 17, sous le niveau de liste fixe de 20. Elle traverse bien tout le champ, mais elle est faible.

Ce qui compte, c’est le score de la brute : 55, porté par la verticale. C’est le bon verdict, cette brute est à écarter, que la faible soit listée ou non. Le script juge une brute sur sa pire traînée, pas sur l’inventaire complet.

Le dédoublement en échos est cosmétique. Je le garde en tête pour une prochaine version : détection itérative, une ligne à la fois, ce qui éliminerait les doublons et laisserait la place aux traînées secondaires.

Réponse co-rédigée avec Claude, relue et vérifiée par moi.

Screenshot_20261025_110933.png

Posté
Il y a 11 heures, jpsc01 a dit :

Salut Nico,

tout comme pour Tromat, désolé pour le miss, j'avais pas mis le post en suivi...
j'avoue ne pas avoir pensé aux cas des géo-stationnaires.
je pensais naïvement qu'ils disparaissaient à l'intégration

Tu aurais un set d'images brute (FITS 32 bit mini) 2 ou 3 successives pour que je me fasse une idée.
Si il n'existe pas de script actuel, je tenterai bien d'en faire un spécifique pour cet usage

 

Oui: les  géostationnaires sont vraiment  qu'il y a de pire niveau réjection des satellites sur nos images. 

Voici un lien vers une série de 50 images brutes directement concernées par le problème (elles sont en 16 bits, je ne connais pas de caméras astro avec un adc en 32 bits!)

 

https://kdrive.infomaniak.com/app/share/1883582/8e879cc1-62e2-4dda-bf08-4fed8750ae44

 

Il y a 10 heures, jpsc01 a dit :

 

Pour les géostationnaires, c’est un autre problème que celui que vise le script. Un satellite de la ceinture reste à déclinaison fixe : une fois les brutes alignées, toutes les traînées retombent sur la même bande de pixels, dithering ou pas. Si la majorité des brutes est touchée au même endroit, le rejet statistique ne peut plus rien, et écarter des brutes n’a plus de sens. StarlinkSweeper est un outil de tri (il repère la brute, on la sort), pas de réparation, et je préfère le garder simple et sûr.

Sur le fond, ta piste est la bonne, à condition de remplacer la traînée par « pas de donnée » plutôt que par une valeur :

  • masquer la traînée à 0 dans chaque brute calibrée, idéalement après alignement, sinon l’interpolation bave sur les bords du masque ;
  • empiler avec Clip low range activé dans ImageIntegration, pour que les zéros soient exclus et non moyennés.

C’est aussi le choix de SetiAstro : dans SetiAstro Suite Pro, la suppression des traînées du module d’empilement remplace désormais la traînée par des NaN, autrement dit par une absence de donnée (notes de version 1.21.6 : https://github.com/setiastro/setiastrosuitepro/releases).

Si le noir se voyait quand même chez toi, mon hypothèse : les zéros n’étaient pas exclus à l’empilement (un 0 moyenné laisse une bande sombre), ou le masque ne couvrait pas les ailes de la traînée.

Attention au remplacement par la médiane : sur le fond de ciel le résultat est parfait, puisque c’est la bonne valeur, mais sur une nébuleuse tu remplaces du signal par du fond. Le master s’assombrit à cet endroit, d’autant plus que beaucoup de brutes sont réparées au même pixel, ce qui est justement le cas des géostationnaires.

Je note l’idée d’un outil algorithmique de masquage, séparé de StarlinkSweeper, si d’autres en ont l’usage.

Réponse co-rédigée avec Claude, relue et vérifiée par moi.

PS: je reste dubitatif sur les résultats qui sont obtenus
:)

 Bon j'admire Claude pour sa capacité à créer des scripts mais pas pour cette réponse qui me semble à coté de la plaque...

Rejoignez la conversation !

Vous pouvez répondre maintenant et vous inscrire plus tard. Si vous avez un compte, connectez-vous pour poster avec votre compte.

Invité
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

  • En ligne récemment   0 membre est en ligne

    • Aucun utilisateur enregistré regarde cette page.
×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer.