Association Astronomique de l’Indre
Slogan du site

Le site officiel de l’Association Astronomique de l’Indre.
Association loi 1901 , dont le but est la promotion de la culture et de la réflexion scientifique, en particulier dans les domaines liés à l’astronomie et aux sciences de l’espace.

Recherche de la comète C/2016 R2 : utilisation d’Astrometry

Astrometry est installé en local.

Article mis en ligne le 13 février 2018
dernière modification le 1er novembre 2022

Et l’on va utiliser un script en Python pour éviter les fautes de frappe.

1. Rendre la recherche moins aléatoire ou fastidieuse

L’article précédent faisait appel à des comparaisons visuelles entre une carte générée par Stellarium et la photographie obtenue.
Sans dénigrer cette méthode, on peut dire qu’elle nécessite du temps et de la chance.
En plus, les personnes dont la vue est fatiguée risquent de renoncer.
Et, par voie de conséquence renoncer à ce genre de recherche photographique.
Commentaires du genre :
"C’est sympa ce que tu fais, mais la comète est petite, je ne la retrouverai jamais sur mes photos... donc je reste au chaud et, quand il fera beau, je ferai M31. Au moins on la voit bien.
 Et tu n’en as pas marre de M31 ?
 Un peu, si, je fais cela depuis XX années."

2. Astrometry en local : avantages et limites

Dans le principe, on soumet une image au logiciel (en local ou en ligne) et on récupère ses coordonnées et la localisation de quelques objets : grosses étoiles, objets Messier... mais pas la position d’une comète ou d’un astéroïde de passage.
Ceci étant, une grosse image telle que celle-ci (4000 x 3000 pixels) est trop lourde et contient beaucoup trop d’information. Il faut imaginer des moyens pour « aider le logiciel » de façon à aboutir.
Avantage d’Astrometry en local : le logiciel est fourni avec quelques compléments et il génère des fichiers annexes contenant les coordonnées calculées. Et ceci va être très utile.

Pré-recherche dans une petite découpe de l’image
Principe : faire une découpe au centre de l’image d’une zone de 400x400 pixels et la traiter avec Astrometry -> coordonnées du centre de l’’image

Recherche dans la grosse image en limitant le nombre d’étoiles qui seront utilisées.
Cela suppose l’utilisation du paramètre « use-sextractor » :

--use-sextractor --ra 59.6 -d 1-10

Ce qui signifie :

 --ra 59.6 : l'ascension droite en centrée sur 59,6 degrés
  -d 1-10 : seules les dix étoiles les plus lumineuses seront concernées.

Rappel : on utilise aussi un paramètre pour définir l’angle couvert par un pixel du capteur :

--scale-unit arcsecperpix --scale-low  4 --scale-high 5

... ceci pour présenter un exemple.

3. « Mais au bout de tous tes calculs, cela donne quoi ? »

J’ai failli oublier que les détails techniques n’intéressent plus grand monde.
Pour les curieux de codage, le script Python, très brouillon, est joint en fin d’article.
Vous pouvez aussi lire les articles de la rubrique « Astrometry » sur le site :
http://lerautal.lautre.net/journal/spip/

Capture de l’écran affichant les résultats de la recherche :

(les coordonnées du point à rechercher sont encadrées. Il s’agit de la position en X et Y d’un pixel).

Positionner des repères sur l’image

  1. Les lignes pointillées bleues, légèrement décalées vers la droite et le bas ont été positionnées d’après les valeurs notées plus haut.
  2. La démarche a fonctionné et l’on peut espérer la réutiliser par la suite si l’on a de nombreuses photos de comètes ou astéroïdes.
  3. Les lignes vertes ont été tracées par programme, elles correspondent à des intervalles de 30 minutes d’arc.

4. Le code Python

C’est du « modifié puis remodifié puis corrigé... ».
Du bâclé qui marche, quoi.

# -*- coding:Utf-8 -*-
"""
        Rechercher les informations utiles dans une grosse image
        Récupérer l'angle de rotation dans le fichier texte de résultats
        Tracer les coordonnées équatoriales sur une image comportant des repères
        Faire tourner l'image de l'angle récupéré
        lerautal - janvier 2018
"""
from __future__ import print_function
import time
import os

#~ -  -  -  -   -  - -  -  -  -fonctions-  -  -  - -  -  - - - -  -  -
def angleRot():
        """
        Lecture du fichier contenant entre autre l'angle dont il faut faire tourner
        l'image pour qu'elle soit alignée sur les coordonnées équatoriales
        """
        ang = faux
        fichier = open("resul.txt", "r")
        contenu = fichier.readlines()
        for ligne in contenu:
                if ligne.find("rotation") > 0:
                        ang = ligne[27:36]
        return float(ang)

def hms2ra(t):
        """ Convertit l'ascension droite en degré et décimales
        """
        h, m, s  = t[0], t[1], t[2]
        return 15. * (h + (m + s/60.)/60.)
       
def dms2dec(t):
        """ Convertit la déclinaison en degrés et décimales
        """
        sign, d, m, s = t[0], t[1], t[2],  t[3]
        return sign * (d + (m + s/60.)/60.)
               
#~ -  -   -   - -   -   Zone des variables d'initialisation  -   -   -   -   -  

debut = time.time()

reptravail         = os.getcwd()+"/"        # répertoire de travail
repannex                = reptravail + "generes/"
image                 =         'comete2'        # nom du fichier
copie                         =         image
redressee        =        image+"_redressee"       
#~ seuiller                 = "convert "+image+".jpg  -threshold "+seuil+copie+".jpg"
chaine200         ="solve-field  --scale-unit arcsecperpix --scale-low  4 --scale-high 5    --use-sextractor --ra 59.6 -d 1-10  "+reptravail+ copie +".jpg   --dir generes --out "+copie+" --overwrite > resul.txt"

griller                        = "pngtopnm "+ repannex+copie+"-ngc.png | plot-constellations -w "+ repannex+copie+".wcs  -o "+copie+"_grille.png -i - -N -C -g 0.2:0.5:0.2 -G 60"
faux                         = 999999.


#~ -  -   -   - -   -  Partie principale ~ -  -   -   - -   -
#~ Application d'un seuil sur l'image et sauvegarde de l'image modifiée dans une copie
#~ os.system(seuiller)

#~ Recherche des informations dans l'image seuillée
os.system(chaine200)

AscC2000 = [3, 58, 18.1]
Decl2000 = [+1, 26,14,40.3]
AD = hms2ra(AscC2000)
DEC =dms2dec(Decl2000)
# on fait appel au programme wcs-rd2xy
chaineGeo ="wcs-rd2xy -w "+repannex+copie+".wcs -r "+str(AD)+" -d "+str(DEC)       
os.system(chaineGeo)


#~ pngtopnm com-ngc.png | plot-constellations -w cible.wcs -o com_grille.png -i - -N -C -g 0.2:0.5:0.2 -G 30
os.system(griller)

#~ Récupération de l'angle de rotation
angle = angleRot()
if angle < faux:
        print("L'angle restitué est : ",angle)
        anglestr =str(-1 * (180. +angle))
        rotation ="convert -rotate "+anglestr+" "+image+".jpg "+redressee+".jpg"
        os.system(rotation)

        rotation ="convert -rotate "+anglestr+" "+copie+"_grille.png "+redressee+"_grille.jpg"
        os.system(rotation)
else:
        print("angle : ",angle)
        print("Erreur de lecture de l'angle")

fin = time.time()
print("temps écoulé en minutes : ", (fin - debut)/ 60)
print("soit : ",(fin - debut),"  secondes")

Plan du site Mentions légales Espace privé RSS

2009-2023 © Association Astronomique de l’Indre - Tous droits réservés
Haut de page
Réalisé sous SPIP
Habillage ESCAL 5.0.12