Roch

Petite expérience amusante et instructive avec un capteur imx290

Messages recommandés

Bonjour à tous :)

Bon alors voilà, ce matin je cherchais une information cruciale sur le capteur que j'utilise : le temps de lecture entre le haut et le bas de l'image.
En effet, mon capteur étant un "rolling shutter", cela signifie que le champ utile n'est pas "lu" simultanément, mais progressivement de haut en bas. Cela peut engendrer des problèmes si on image avec une cadence élevée, le problème est bien connu des vidéastes.

Peut être que cette info est disponible sur le net quelque part, mais j'ai pas trouvé, et du coup j'ai mis en place une petite expérience rapide afin de mesurer moi même ce temps de lecture ;)

 

Etant musicien de profession, j'ai eu l'idée de capturer l'image d'une corde en vibration avec le temps de pose le plus bref possible. Si l'image est capturée instantanément sur tout le champ, la corde apparaîtra rectiligne ; par contre si l'image est capturée à des instants différents selon la position, on verra apparaître une sinusoïdale ; la corde sera positionnée à droite où à gauche selon le moment d'acquisition.
L'avantage d'utiliser une corde est qu'on peut retrouver facilement la fréquence, à l'oreille ou avec un accordeur... dans mon cas elle est de 220Hz, soit 4.55ms/période environ

Voici l'image de la corde "au repos"

 

5e4ea81ff1984_Cordedroite.jpg.6ea66c93f271ba2070ad859a2587c5d5.jpg


Puis l'image "en vibration" en mode d'acquisition 8 bits

 

5e4ea82d23bdf_8bits.jpg.2574ca3400728b5677007abcc4baaaae.jpg

Et enfin en mode 12 bits

 

5e4ea82746242_16bits.jpg.0824bf33b41868a7b774f7528b422df4.jpg


Les acquisitions sont réalisées à définition maximale, soit 1920x1080 pixels

Je compte environ 16 périodes pour le mode 8 bits. cela nous donne donc 16 x 4.55 soit à peu près 73ms pour une lecture de haut en bas, ou encore 67µs de temps de lecture par pixel.
Pour le mode 16 bits, on compte environ 27 périodes, ce qui donne 122ms pour la lecture totale, ou encore 113µs de temps de lecture par pixel.


Concrètement ça signifie quoi ?

Edit : la suite est fausse, puisque j'ai remarqué avec d'autres tests ( voir plus bas ) que le temps de lecture dépendait de la bande passante de la connectique ( USB2 / USB3, réglage USB Traffic ) ; dans tous les cas il ne pourra jamais durer plus longtemps que le temps de pose maximum pour une cadence donnée ( par exemple, 5ms pour une cadence à 200fps )

 

Donc pas de soucis à se faire en définitive ;)

Si on image une planète avec un framerate important, il pourrait y avoir un décalage temporel assez conséquent entre le haut et le bas de la planète. Le haut pourrait même être décalé de plusieurs frames avec le bas...
Un exemple : on image Jupiter qui mesure 300 pixels de haut sur notre image. Si on est en mode  8 bits, il y a donc un décalage de 20ms environ entre le haut et le bas. Si on est à 50 images/seconde, ça signifie que le haut du globe est en réalité enregistré sur un fichier image en même temps que le bas du globe sur le fichier image suivant !
L'effet peut être encore bien pire avec des cadences atteignant parfois 200ips, ou des grandissements plus importants.

Du coup, si on imagine un "trou" de turbulence qui durerait 1/100s, il faudrait récupérer le haut du globe sur une image et le bas sur la suivante pour avoir la résolution optimale... pas génial génial :D


 


Bon, moi, mon rayon c'est plutôt le ciel profond poses courtes. On reste pour le moment sur des cadences supérieures à 100ms, donc pas de problème à priori, cependant ça pourrait changer... prudence donc.

Et j'avais fait un petit test il y a quelques temps pour essayer de déterminer l'angle d'isoplanétisme... je me rends compte que tout ceci pourrait fausser complètement mes mesures puisque j'avais imagé à 100fps sur tout le champ. Bref, à suivre ;)


Bons cieux !

Romain

Modifié par Roch
  • J'aime 3
  • Merci 1

Partager ce message


Lien à poster
Partager sur d’autres sites

Houla  je n'y aurais jamais pensé à celle la:D.

 

il y a 57 minutes, Roch a dit :

Je compte environ 16 périodes pour le mode 8 bits. cela nous donne donc 16 x 4.55 soit à peu près 73ms pour une lecture de haut en bas, ou encore 67µs de temps de lecture par pixel.

Il faudrait plutôt faire (73ms-temps de pose)/nombre de ligne

 

Pour estimer le readout time tu peux faire : 1/(cadence d'image maxi * nombre de ligne de ton capteur)

 

Si on fait ça pour l'IMX 290 on est vers 11µs 

 

Une autre solution  consiste à filmer le clignotement d'une LED dont tu connais le temps d'allumage. En utilisant le temps de pose mini de ta caméra tu va avoir quelque chose comme ça.

         

5e4eb7a45a426_2msbin210.jpg.756ec15a3778bfce1836d3af940b8d32.jpg

 

Tu compte le nombre de ligne de pixels illuminées et tu en déduit le temps de lecture par ligne.

 

Exemple 100 lignes illuminées pour un temps d'allumage LED de 1 ms donne 10µs

 

Lionel

  • J'aime 1

Partager ce message


Lien à poster
Partager sur d’autres sites
Il y a 1 heure, astroluma a dit :

Il faudrait plutôt faire (73ms-temps de pose)/nombre de ligne

 

Pour estimer le readout time tu peux faire : 1/(cadence d'image maxi * nombre de ligne de ton capteur)

 

Si on fait ça pour l'IMX 290 on est vers 11µs 

 

Ben oui, mais du coup c'est pas du tout conforme à mes valeurs. Pourtant je suis 100% sûr de moi concernant la fréquence de vibration.

 

Le temps de pose était minimal dans pon cas, donc négligeable.

 

Comment connaître le temps d'allumage d'une led ? je peux toujours refaire l'expérience...

 

EDIT : Ah en fait je crois comprendre... le fait que je sois en usb2 y change quelque chose du coup ! J'étais en effet limité à 13fps en 8 bits, donc tout est logique. Je vais retester en usb3 pour voir ;)

 

 

Romain

 

Modifié par Roch

Partager ce message


Lien à poster
Partager sur d’autres sites
il y a 24 minutes, Roch a dit :

Comment connaître le temps d'allumage d'une led ?

Comment faire en partant de rien je ne sais pas te dire.

J'ai une timebox (boitier utilisé pour la mise à l'heure PC pour le suivi d'occultation d'étoile) qui est équipée d'une led que l'on peut faire clignoter avec une durée d'allumage réglable.

 

il y a 32 minutes, Roch a dit :

Je vais retester en usb3 pour voir

Je suis curieux de connaitre le résultat final, je n'aurais jamais pensé à tester ça de cette manière si ça marche c'est beau!

 

Lionel

Partager ce message


Lien à poster
Partager sur d’autres sites

Ben ça marche c'est bon ;)

Voilà l'image 8bits en USB3 :
5e4ee850cd5c4_8bitsUSB3.jpg.e32a23a6bb31292d1d4c94fcaf20aa03.jpg

On observe environ 2.6 périodes, soit un temps total de 4.55x2.6 = 11.8ms au total, ou 10.95µs/pixel
 

Image 16Bit sen USB3 :

5e4ee8a6768b4_16bitsUSB3.jpg.2d81a2adfcbbfb13ac587f9372529ecb.jpg

Environ 8.4 périodes, soit 38.2ms au total, ou 35.4µs/pixel ( cohérent pour un framerate maxi aux alentours de 25fps )

Bon ceci dit je trouve ça débile qu'une vitesse de transmission réduite amplifie ainsi le phénomène de rolling shutter.. vous allez me dire c'est logique, m'enfin puisque le machin "sait" lire les pixels à une certaine vitesse, pourquoi ne pas utiliser toujours la vitesse maximale, sachant qu'on a de toute manière un buffer dans nos caméras ? enfin bref.

Bon du coup j'édite mon premier message... ce n'est pas réellement possible d'avoir un "décalage temporel" dans les images vu que le temps de lecture sera toujours inférieur au framerate.

Romain

Modifié par Roch

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 John deuxsource
      En ce moment je retraite mes photos en me peaufinant sur siril. Voici une photo que j'ai prise cet hiver. Jai stack en live 3500 *500ms sur sharpcap pour la luminance et et après j'ai fait 10min de ha. Une rotation et demi de table équatoriale et au lit ! J'adore le livestack 
       
      Asi533 , paracorr 2 , Dobson508mm arp83 , table Eq deux axes.
       
    • Par John deuxsource
      En ce moment je retraite mes photos en me peaufinant sur siril. Voici une photo que j'ai pris en août dernier. Jai stack en live 5000 *500mssur sharpcap pour la luminance et et après j'ai fait 5 min de couleur par canal. Ça manque un peu de signal en couleur mais les détails sont quand même la
       
      Asi533 , paracorr 2 , Dobson508 arp83 , table Eq deux axes.

    • 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 sebseacteam
      Hello,
       
      Voici un exercice que je voulais faire depuis longtemps: du CP en poses courtes (déjà fait avec caméra couleur uniquement) avec 2 capteurs mono/couleur.
       
      Newton 150/750
      Couleur: QHY5III715c avec 513 x 3s
       

       
      Mono: QHY5III678m avec 6293 x 1s
       

       
      On obtient alors:
       

       
      A refaire avec des poses plus longues en couleur, genre 5s voir 10s pour plus de signal. Et garder comme ça en mono.
       
       
    • Par dubedat thierry
      bonjour les amis je me lance en poses courtes ciel profondet c est super sympa  bon c est le debut et je suis nul en traitement  donc pas de miracle surtout avec une mise en station sommaire et donc un suivi pas top et en pleine ville( merci les lampadaires) d ou des etoiles un peu empateeset bien sur m42 et cet ete m 27(250 ms x600 brutes compositees  pour m42 soit150 secondeset 500msx 100 brutes pour m27 soit 50 secondes)  siril et astrosurface  doctelescope 460 f 4.2 asi 533 mc  merci de vos avis c est sur 20 minutes de poses seraiient   necessaires on verra plus tard




  • Évènements à venir