Question

Bonjour à tous,

 

Petit nouveau sur le forum, je ne fais pas d'astro mais je suis concerné par les mêmes problématiques que vous pour le processing des images.

Je cherche à imager un objet 2D par transmission avec une caméra CMOS, avant et après noircissement. Je soustrairai ensuite les 2 images pour avoir le signal "vrai" en ADU, permettant de remonter à l'information que je souhaite.

Je corrige avec un flat où je suis la fameuse règle du 50-70% de saturation max de mon capteur 16 bits, soit une valeur comprise entre 30000 et 45000 (je me pose encore la question si le dark est nécessaire car ma caméra est refroidie, j'ai un fort éclairement et mon temps d'expo est très court, de l'ordre de 15ms, mais c'est une autre question).

Pour un réglage de temps d'exposition donnant un flat de 45000, mon objet avant noircissement à une valeur d'ADU de 25000 environ. Si je divise pixel à pixel, je me retrouve  avec une valeur <1, ce qui réduit très fortement la dynamique. D'autant plus qu'après je dois soustraire par la même chose pour mon objet noirci.

 

Comment gérez-vous les flats? Vous le normalisez par rapport à une valeur moyenne ou médiane pour ensuite diviser votre image raw par ce mapping, afin de conserver une bonne dynamique?

Que me conseillez-vous dans mon cas?

 

Merci d'avance !

 

 

Partager ce message


Lien à poster
Partager sur d’autres sites

9 réponses à cette question

Messages recommandés

  • 0

Bonjour,

je ne comprends pas tout.... Si on divise un petit nombre par un grand, des deux étant positifs, on obtient une très petite valeur...positive, jamais négative.

 

Sinon, sur les logiciels astro peu automatisés, comme Iris (excellent ! :x), pour chaque image brute, après division par le flat il y a multiplication par une constante que l'on choisit, en général dans l'ordre de grandeur de la moyenne des valeurs du flat, pour rehausser l'histogramme vers ses valeurs d'origine sur l'image brute.  Sur les logiciels très automatisés où l'on a pas accès à cette constante le soft doit certainement la déterminer lui-même.

Bref, ceci permet, après division par le flat, de conserver la dynamique de l'image d'origine :).

 

MM

Partager ce message


Lien à poster
Partager sur d’autres sites
  • 0

Bonjour et merci de votre réponse.

 

Oui effectivement c'est bien ce que je dis, on obtient une valeur <1 (sous-entendue petite et positive ! :))

 

Donc il y a bien une histoire de moyenne du flat qui intervient... Pourquoi moyenne et pas médiane par exemple?

Et pourquoi ne pas prendre directement la moyenne/médiane du flat dont on fait la division pixel à pixel par notre image brute? C'est uniquement par commodité logicielle en remultipliant par une constante derrière ?

 

Je dois recaler mes 2 objets avant et après noircissement, de ce fait je travaille entièrement sous Python qui permet de le faire facilement.

Me conseillerez-vous donc de diviser directement l'image brute par la moyenne ou médiane du flat dans ce cas?

 

Merci d'avance !

 

 

Partager ce message


Lien à poster
Partager sur d’autres sites
  • 0

Ben oui..., pourquoi j'ai interprété <0 moi ???? :$, l'âge sans doute....:D

 

Il y a 10 heures, Julien JURCZAK a dit :

Et pourquoi ne pas prendre directement la moyenne/médiane du flat dont on fait la division pixel à pixel par notre image brute?

Hé bien si on divise les valeurs de tous les pixels par une même valeur l'opération n'aurait aucun effet de correction...

 

Pour corriger le vignetage via un flat (le raisonnement est le même pour les poussières), les valeurs des pixels en bord de capteur des images brutes , affaiblies par ledit vignetage, sont divisées par les valeurs des pixels correspondants du flat maître, où elles sont aussi affaiblies par le vignetage, on divise donc une valeur "faible" par une autre valeur "faible".

Au centre du capteur, zone non soumise au vignetage, on divise une valeur "forte" par une autre valeur "forte".

Au final les valeurs aux bords et au centre se retrouvent dans les mêmes ordres de grandeur, mais faibles... On multiplie alors tous les pixels par une valeur  approximativement de l'ordre de grandeur des valeurs du flat pour rehausser l'image à peu près à son niveau de luminosité d'origine. Toutes les brutes étant divisées par le même flat maître puis multipliées par la même constante (c'est un pléonasme ça...:D), l'ensemble des brutes corrigées est cohérent.

 

MM

Partager ce message


Lien à poster
Partager sur d’autres sites
  • 0

Je me suis peut-être mal exprimé alors xD
Considérons notre flat. On détermine sa valeur moyenne, une valeur unique donc.

Puis on divise pixel à pixel notre flat par cette valeur moyenne. On se retrouve donc avec un « mapping » du flat avec des valeurs pixels à pixels proches de 1.

 

Et on divise notre image brute par cette dernière image.

 

J’espère avoir été plus clair cette fois :)

Partager ce message


Lien à poster
Partager sur d’autres sites
  • 0

 

Il y a 8 heures, Julien JURCZAK a dit :

Considérons notre flat. On détermine sa valeur moyenne, une valeur unique donc.

Puis on divise pixel à pixel notre flat par cette valeur moyenne.

 

La correction d'une image brute par un flat, opération qui vise à corriger l'image brute des "défauts" d'éclairement du capteur, ne se passe pas comme ça.

 

Voici comment nous (ou les logiciels automatisés) procédons globalement pour nos images astro de ciel profond, tu en retireras ce qui te paraît utile pour ta manip :

- prise des images brutes.

- sans toucher à la mise au point ni à l'orientation du capteur par rapport à l'optique, prise de X flats (PLU) sur une source lumineuse uniforme, temps de pose réglé pour obtenir un histogramme calé vers les 2/3 de la dynamique.

- prise des darks (noirs), avec des paramètres "caméra" identiques à celles des brutes, température incluse, mais dans le noir complet bien sûr.

- prise des offsets (bias) avec des paramètres "caméras" inchangés sauf le temps de pose réglé au mini possible, et là aussi dans le noir.

Puis

- réalisation d'un offset maître, en général par médiane (si on a fait N offsets, chaque pixel de l'offset maître prendra alors la valeur médiane des N pixels situés au même endroit, de mêmes coordonnées sur le capteur si tu préfères).

- réalisation d'un flat maître, d'abord en soustrayant l'offset maître à chaque image flat, puis en  faisant un flat maître par médiane de ces flats corrigés de l'offset. Comme pour les offsets, le pixel 1-1, par exemple, du flat maître aura alors la valeur médiane des X pixels 1-1 des flats corrigés par l'offset.

- réalisation d'un dark maître, même procédure que pour les flats.

Puis

- soustraction de l'offset maître de toutes les images brutes.

- soustraction du dark maître de toutes les brutes précédemment corrigées.

- division de chaque brute (corrigées de l'offset et du dark) par le flat maître (là on réduit furieusement la dynamique).

- multiplication de chaque image corrigée du flat par une constante d'une valeur voisine de la moyenne des valeurs des pixels du flat maître (là on remonte la dynamique aux environs de son niveau d'origine).

Puis

- alignement des images corrigées

- empilement des images alignées

- post-traitement de l'image obtenue.

 

Voilà... :)

 

MM

Partager ce message


Lien à poster
Partager sur d’autres sites
  • 0

Très bien merci pour toutes ces infos :)

 

Une dernière question et je vous laisse tranquille !

 

Comme je vous disais, je dois photographier mon objet avant et après noircissement à 2 temps t distincts (24-48h). Je vais donc réaliser 2 flat également à la suite pour avoir à chaque fois une image corrigée.

Est-ce qu'en faisant cela, 

1- Je vais bien m'affranchir des fluctuations de l'intensité de la source lumineuse entre les 2 expositions non noircie et noicie réalisées à des moments différents ?

2- Je vais m'affranchir, en plus de mes poussière, sensibilité intrinsèque des photosites... De ma source lumineuse qui n'est pas parfaitement uniforme? 

Partager ce message


Lien à poster
Partager sur d’autres sites
  • 0

Bonjour,

 

Le flat ne corrige QUE les hétérogénéités de luminosité sur l'image dues au train optique (de l'instrument de prise de vue pour faire simple), écarts causés par des éléments mécaniques, optiques, poussières, salissures. Çà répond à tes deux questions...

 

Bonnes manips ! :)

 

MM

Partager ce message


Lien à poster
Partager sur d’autres sites
  • 0

Merci beaucoup !

 

Par contre, j'ai beau tourner les choses dans tous les sens, je n'arrive pas à comprendre pourquoi ces 2 points ne sont pas vrais...

Partager ce message


Lien à poster
Partager sur d’autres sites
  • 0

Tu n'as pas encore bien compris ce qu'est un flat...

 

Le 19/02/2020 à 15:16, Julien JURCZAK a dit :

1- Je vais bien m'affranchir des fluctuations de l'intensité de la source lumineuse entre les 2 expositions non noircie et noicie réalisées à des moments différents ?

Un flat ne corrige pas les écarts de luminosité d'une séance à l'autre mais les hétérogénéités de luminosité dans UNE image. En bref il ne travaille pas dans le temps mais dans un espace 2D.

 

Le 19/02/2020 à 15:16, Julien JURCZAK a dit :

2- Je vais m'affranchir, en plus de mes poussière, sensibilité intrinsèque des photosites... De ma source lumineuse qui n'est pas parfaitement uniforme? 

Un flat, normalement obligatoirement réalisé  sur une "surface" de luminosité homogène, va corriger les défauts d'homogénéité de luminosité qui sont présents dans lui-même ET dans l'image à corriger. Les hétérogénéités de luminosité qui ne sont QUE dans l'image à corriger et pas dans le flat resteront intacts, et tant mieux car il s'agit du ou des sujet(s) photographié(s) :).

Cependant, si tu poses tes objets à photographier juste devant un fond clair et que tu images "avec" et "sans" les objets, l'image "sans" (donc juste le fond) peut te servir de flat car elle contiendra, comme les images "avec", les hétérogénéités d'éclairage de ta source, mais que pour la séance en cours. Si tu fais plusieurs séances il faudra faire un flat à chaque fois car rien ne garantit que les hétérogénéités d'éclairement, les poussières, etc..., seront les mêmes et au même endroit d'une sénace à l'autre.

 

As-tu songé à placer (si c'est possible, je ne connais pas ta manip), juste contre l'objet qui va varier de pouvoir réfléchissant d'une séance à l'autre (tu veux mesurer cette variation si j'ai bien compris), un "témoin" qui lui ne variera pas ?... En mesurant, sur tes images, la luminosité du témoin puis celle de l'objet d'étude, puis en réduisant tes données pour ramener à 1 (ou 100%) la "luminosité" du témoin tu obtiendras l'évolution de "luminosité" (de la "noirceur" dans ta manip) de l'objet d'étude, et cela corrigera automatiquement les éventuelles variations d'éclairage dues à ta source d'une séance à l'autre.

 

Sur ce, bonnes manips et bon courage ! :)

MM

Partager ce message


Lien à poster
Partager sur d’autres sites

Créer un compte ou se connecter pour commenter

Vous devez être membre afin de pouvoir déposer un commentaire

Créer un compte

Créez un compte sur notre communauté. C’est facile !

Créer un nouveau compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant



  • Contenu similaire

    • Par Sauveur
      Salut
       
      Depuis le Pic comme j'avais vue Jean Luc avec ce petit engin ca ma donné envie de l'acquérir , J'ai attendue une occas et voila 
       
       Le premier Jour il m'a étonné en pointant précisément le soleil avec un posé shooté 
       

       
       

       
       
      c'est les fichier téléchargé automatiquement sur le Telephone et qu'il faut laissé a proximité et allumer
       
       
      Hi hi hi Juju en gros plan 
       

       
       

       
      Comme il m'est les brutes dans son disque dur on peut traité apres tranquillement
       
      premier essais pas beaucoup de poses
       

       

       
       

       
       

       
       
       

       
       
       

       
       
       

       
       

       
       
       

       

       
       
      Bon il y a peu de pose et un traitement un peu a la vas vite car suis plutot Juju quand même et j'en ai au four encore
       
       
    • Par Sauveur
      Oui fait au smartphone et la star aventure pour la lulu et intervallomètre DiY mais je pourrais avoir Nina pour l'astrometrie mais faudrait le défiltré et c'est assez dure mon premiere essais a été un echec
       
      21 poses de 30 secondes
       
      bon j'ai des soucis d'étalonnage des couleur du a la matrice de bayer bien différentes RYB oui oui Rouge jaune Bleu
       
      L'extrem Lulu phone au foyer sans lentilles
       

       
       

       
      NGC 884 et NGC 869_stacked 42 poses de 30 secondes
       

       
      M45_stacked 15 poses de 30 secondes
       
       
       

       
       
      J'ai retenter bon toujours pas de mes aux oignon je shootai Juju a coté
       

       
      sur le canarie pas pu faire correctement la mes j'aivais prêté mon eq6 a un copain 
       
      Bon cette matrice RYB c'est un peu con pour l'étalonnage faut que je cherche
       

       
      m13
       

       
      M51 peu de poses et le dithering bein y a pas
       

       
       
       
      @MCJC
       
      bonne journée
    • Par Gilles Pascal
      Bonjour,
       
      en 2023 j'ai réalisé une série de prises de vue de Jupiter pendant une nuit.
      Ensuite je les ai assemblées (avec PIPP) pour en faire une animation.
       
      Le résultat me plaît mais à présent je voudrais aller plus loin. L'idée serait de pouvoir superposer à chaque vue, une image tirée de la simulation de STELLARIUM.
       
      Chaque image de l'animation serait au final donc un assemblage de deux images :
      - Dans la moitié supérieure de l'image on verrait un bandeau horizontal issu de STELLARIUM
      - Dans la moitié inférieure, on verrait un bandeau réalisé à partir de l'image prise par la caméra.
       
      Le souci c'est la rotation de champ dans STELLARIUM.
       
      Pendant pas mal de temps je me suis noué le cerveau pour tenter de trouver l'angle qu'il faudrait appliquer pour réaliser la dé-rotation.
       
      Et aujourd'hui je viens de trouver une solution totalement simple et déconcertante : il suffit de mettre à "true" le booléen qui indique le mode equatorial dans STELLARIUM.
      Encore faut-il trouver la syntaxe. Qu'à cela ne tienne, une recherche rapide dans les nombreux scripts stockés dans le sous-répertoire idoine (C:\Program Files\Stellarium\scripts) permet avec Notepad++ de trouver les séquences qui contiennent la partie de texte "quatorial" (ben oui, ne sachant pas si le mot commence par un 'é' ou un 'e'...).
       
      Alors comme cela m'a pris du temps, et que ça pourrait servir à des astram, je vous livre le code complet de mon script.
      Le contenu est à enregistrer dans un fichier dont l'extension devra être .ssc
      Il suffit ensuite de double-cliquer sur le fichier, et Stellarium se lancera automatiquement en exécutant le script.
       
      La localisation est placée à la terrasse de Meudon. Mais pour vos besoins, vous changez les valeurs par celles de votre site.
       
      Bon ciel,
      Gilles
       
       
       
       
       
      include("common_objects.inc");
      // var MonDIR = "C:/Users/gpasc/Pictures/Stellarium";
      // var MonDIR = core.getEnv("STEL_SKYBOX_DIR");
      // Not finding this environment variable sets DIR to empty string to make storage into default image dir, i.e., "C:/Users/YOU/Pictures/Stellarium"
      // For technical reasons, on Linux you MUST set this variable before running the script.
      DIR=core.getEnv("STEL_SKYBOX_DIR");
      // Base name for the tile textures. Defaults to Unity, can be overridden by setting environment variable STEL_SKYBOX_BASENAME
      BASENAME=core.getEnv("STEL_SKYBOX_BASENAME");
      if (BASENAME.length == 0)
          BASENAME="Unity";
      // Output data file name. Defaults to unityData.txt, but can be overridden by setting environment variable STEL_SKYBOX_DATA
      DATANAME=core.getEnv("STEL_SKYBOX_DATA");
      if (DATANAME.length == 0)
          DATANAME="unityData.txt"
      OUTPUT_DATA=DIR + "/" + DATANAME;
      core.output("Writing images to " + DIR);
      core.output("Writing data to " + OUTPUT_DATA);
      // The following wait times (seconds) are required to arrive at scene before screenshot. Configure for your machine.
      // This must likely allow 2 frames to be drawn before screenshot is valid.
      MOVE_WAIT=0.05;
      SHOT_WAIT=0.15;
      core.setDate(
         '2023-08-21T02:27:59',
         'local'              , // or 'utc' or 'local'
          true                  // enable Delta T correction
      );
      core.setObserverLocation(
          2 + 13/60 + 59/60/60, // core.dmsToRad(2, 13, 59), // longitude
         48 + 48/60 + 19/60/60, // core.dmsToRad(48, 48, 19), // latitude
         151,                       // Altitude
         0,                       // Time to travel
         "",                       // or "Terrasse de Meudon",
         "Earth"                   // This parameter seems necessary
      );
      core.selectObjectByName("Jupiter", false);
      PData = core.getObjectInfo("Jupiter");
      StelMovementMgr.setFlagTracking(true);
      GridLinesMgr.setFlagAzimuthalGrid(false);
      StelMovementMgr.zoomTo(0.07, 1);
      core.setGuiVisible(true);
       
       
      // On force le mode equatorial pour empecher la rotation de champ :
      StelMovementMgr.setEquatorialMount(true);
       
       
      // Lister ici les instants correspondants aux prises de vues
      // Format à respecter :
      //
      //                  "AAAA-MM-JJTHH:MM:SS"
      //
      // L'ensemble des données est stocké dans le tableau ci-dessous
      // C'est le nombre d'éléments, contenus intrinsèquement dans le tableau
      // qui fournira la limite haute de la boucle parcourue plus bas dans ce script.
      //
      var Horaire_Positions = new Array("2023-08-21T02:27:59",
                                      "2023-08-21T02:33:27",
                                      "2023-08-21T02:38:56",
                                      "2023-08-21T02:44:24",
                                      "2023-08-21T02:49:53",
                                      "2023-08-21T02:55:22",
                                      "2023-08-21T03:00:51",
                                      "2023-08-21T03:06:19",
                                      "2023-08-21T03:11:48",
                                      "2023-08-21T03:17:16",
                                      "2023-08-21T03:22:45",
                                      "2023-08-21T03:27:50",
                                      "2023-08-21T03:33:18",
                                      "2023-08-21T03:38:46",
                                      "2023-08-21T03:44:15",
                                      "2023-08-21T03:49:44",
                                      "2023-08-21T03:55:12",
                                      "2023-08-21T04:00:41",
                                      "2023-08-21T04:06:09",
                                      "2023-08-21T04:11:38",
                                      "2023-08-21T04:17:07",
                                      "2023-08-21T04:22:35",
                                      "2023-08-21T04:28:03",
                                      "2023-08-21T04:33:32",
                                      "2023-08-21T04:39:00",
                                      "2023-08-21T04:44:29",
                                      "2023-08-21T04:49:57",
                                      "2023-08-21T04:55:25",
                                      "2023-08-21T05:07:56",
                                      "2023-08-21T05:13:25",
                                      "2023-08-21T05:18:53",
                                      "2023-08-21T05:24:21",
                                      "2023-08-21T05:29:50",
                                      "2023-08-21T05:35:19",
                                      "2023-08-21T05:40:47",
                                      "2023-08-21T05:46:15",
                                      "2023-08-21T05:51:44",
                                      "2023-08-21T05:57:12",
                                      "2023-08-21T06:02:40",
                                      "2023-08-21T06:08:09",
                                      "2023-08-21T06:13:37",
                                      "2023-08-21T06:19:04",
                                      "2023-08-21T06:24:32",
                                      "2023-08-21T06:30:01",
                                      "2023-08-21T06:35:29",
                                      "2023-08-21T06:40:58",
                                      "2023-08-21T06:43:35",
                                      "2023-08-21T06:52:02",
                                      "2023-08-21T06:57:30",
                                      "2023-08-21T07:02:59",
                                      "2023-08-21T07:08:27",
                                      "2023-08-21T07:13:55",
                                      "2023-08-21T07:19:23");
      // The following wait times (seconds) are required to arrive at scene before screenshot. Configure for your machine.
      // This must likely allow 2 frames to be drawn before screenshot is valid.
       
      MOVE_WAIT=0.05;
      SHOT_WAIT=0.15;
      core.setGuiVisible(false);
       
       
      // On stabilise la première position avant de lancer la boucle
      core.setDate(
                  Horaire_Positions[0],
                  'local'              , // or 'utc' or 'local'
                  true                  // enable Delta T correction
                  );
      core.output(Horaire_Positions[0] );
      // on attend 3 secondes pour bien stabiliser la première position
      core.wait(3);
      for (i=0; i<Horaire_Positions.length; i++)
      {
      core.setDate(
                  Horaire_Positions,
                  'local'              , // or 'utc' or 'local'
                  true                  // enable Delta T correction
                  );
      // Régler STELLARIUM à l'horaire pointé dans le tableau :
      core.output(Horaire_Positions );
      // Tempo pour attente de stabilisation :
      core.wait(MOVE_WAIT);
       
       
      // Capture d'écran et sauvegarde dans le repertoire BASENAME + i :
      core.screenshot(BASENAME + i, false, DIR, true);
      core.wait(SHOT_WAIT);
      }
      core.setGuiVisible(true);
      //EOF
    • Par Cyril Richard
      Bonsoir tout le monde.
      Certains le savent peut-être, mais la future grosse mise à jour de Siril contient l'étalonnage des couleurs par Spectrophotométrie. C'est une avancée majeure dans le développement et rendra obsolète l'ancien module d'étalonnage des couleurs par photométrie.
      Pour ceux qui souhaitent en savoir plus sur ce module, voici un lien sur la doc de la version en développement.
       
      Dans l'esprit du logiciel opensource, et du partage de données (philosophie prônée par Siril depuis ses débuts) nous avons mis en place une base de données des filtres et capteurs utilisée par l'algorithme. Plus cette base de données sera complète, et plus l'outil sera puissant. Et c'est là où la communauté est importante. Si vous avez envie d'aider Siril à devenir plus performant et que vous possédez des courbes de filtres, ou de capteur non pris en charge, alors c'est pour vous.
       
      La base de données se trouve ici : https://gitlab.com/free-astro/siril-spcc-database et le README (en anglais) explique comment ajouter des données. Cependant, n'hésitez pas à me contacter
       

       

    • Par FrancoisGAP
      Merveilleuse cette comète. Pas évident à traiter mais le résultat est sympa 
       
      Détail et full visible sur mon site Web : https://planetediy.fr/index.php/2024/03/14/la-fascinante-comete-12p-pons-brooks-un-veritable-spectacle/
       

       
      Détail du matériel utilisé :
      TS-ONTC HYPERGRAPH 10″ 254/1000 (Fd4)
      Correcteur Réducteur 0,85×3″ soit 863mm (Fd3,4)
      EQ8R-Pro sur Pilier Acier DIY
      ZWO ASI2600MC DUO + Optolong Clear 2″ + Optolong LExtreme 2″
      ZWO EAF
      ZWO EFW 5 positions 2″
      (25)x60s Gain=100 (-30°C)
      40 Darks Gain=100
      40 Darks Flat Gain=100
      40 Flats Gain=100
      Traitement Pixinsight
  • Évènements à venir