CARICATURER LES IMAGES "ASTRO"- 01

Une petite note par lerautal

1. POURQUOI CETTE FORMULATION ?

Nous allons maintenant commencer à effectuer des traitements sur une véritable image astronomique. Mais qui dit traitement dit moyen de constater le résultat.
Dans une première étape, où l'on doit "montrer ce qui se passe" le  procédé d'affichage du résultat va exagérer les choses, un peu comme un caricaturiste qui exagère certains traits.

Un schéma qui résume ce que l'on va faire :

manip.svg

2. UN EXEMPLE

L'image suivante est un petit détail de la photo d'Alcyone qui sert de fil conducteur de ces chroniques. Elle ne comprend qu'une seule étoile... mais aussi du bruit.
Elle a été largement agrandie  :

une étoile seule

La manipulation informatique qui va lui être appliquée est la suivante :

1. Le seuil est égal à 20000.

N'apparaissent que les pixels dont la valeur dépasse ce nombre.
Seul le centre de l'étoile apparaît.

le seuil est à 20000
2. Le seuil est égal à 5000.

On voit la forme globale de l'étoile mais aussi des pixels dont on se demande ce qu'ils représentent.

seuil égal à 5000

3. Le seuil est égale à 3000.

Le bruit de fond est en train d'envahir l'image.

seuil égale 3000

3. CONCLUSION PROVISOIRE

Nous venons de montrer un premier mode de traitement sur les images astro : l'élimination de certains pixels... à partir de l'hypothèse qu'ils ne contiennent que du bruit.

L'étape suivante consiste à expliquer la structure et le code du programme qui génère ces images.

4. LES BIBLIOTHÈQUES D'EXTENSION UTILISÉES

Bibliothèque pyfits :
Ouvre les fichiers au format FITS et charge les données sous forme de tableaux numpy.  (prononcer paille  fitse)


Bibliothèque numpy :
Bibliothèque numérique apportant le support efficace de larges tableaux multidimensionnels, et de routines mathématiques de haut niveau (fonctions spéciales, algèbre linéaire, statistiques, etc.).
(prononcer num' paille)


Bibliothèque matplotlib :
Ensemble de fonctions pour tracer et visualiser des données. S'associe à numpy.

5. STRUCTURE DU PROGRAMME QUI CRÉE LES IMAGES



sequence programme

6. CODE DU PROGRAMME QUI CRÉE LES IMAGES

Le code suivant n'exploite pas toute la subtilité du langage Python.
Mais il est d'une relecture assez simple.

0 # -*- coding:Utf-8 -*- définit l'alphabet "universel"
1 # Nom : num_plot1.py
# Auteur : Lerautal - septembre 2015
# Ouvrir un fichier FITS
# Sélectionner les pixels dont la valeur est supérieure au seuil
# Créer une fonction pour charger les données
# Utilisation de matplotlib
remarques
2 import pyfits as pf
import numpy as np
import matplotlib.pyplot as plt
bibliothèques d'extension
3 # ---- constantes ----
Kseuil      =  5800.0
# ---- variables ----
provis   =  [ ]                   # initialisation d'une liste vide 
index       = 0                  # index des pixels dans provis
coordonnees =  [ ]  


  # initialisation d'une liste vide
   # index des pixels dans provis
4 # ---- zone des fonctions ----
def ouvre_et_recup_vert(nfic) :
   "Ouvre et ferme le fichier FITS récupère les dimensions
         ainsi que les données pour le vert"
   fic            = pf.open(nfic)
   donnees        = fic[0].data
   tailles        = [ ]
   tailles        = donnees.shape 
   global largeur_image
   global hauteur_image
   largeur_image   = tailles[2]   
   hauteur_image   = tailles[1]    
   fic.close( )
   return donnees[1]               


commentaire

ouvre les fichier
récupère les données




on récupère les dimensions


le tableau pour le vert est transmis
5 vert = ouvre_et_recup_vert('etoile_seule.fit') on appelle la fonction
6 provis   = vert[vert > Kseuil]  
lim_boucle  =  provis.size  

print "nombre de pixels : ",lim_boucle

print 'Largeur :  %s  Hauteur : %s ' % (largeur_image,hauteur_image)

plt.axis([0,largeur_image,0,hauteur_image])

while index < lim_boucle :          # on positionne les points
   coordonnees = np.where(vert==provis[index])
   plt.plot(coordonnees[1],coordonnees[0],'bo')
   index = index +1
provis = pixels > que le seuil
leur nombre

on affiche ce nombre

on affiche les dimensions de l'image


on crée la page pour afficher les points

on positionne les points dans l'image
7 plt.show( )  on affiche l'image

7. QUELQUES REMARQUES SUR LE CODE

Plutôt que de tout expliquer, ce qui ne satisfera personnes, voici quelques points jugés importants.

Comment mettre en relation le code du programme et les bibliothèque ?

import pyfits as pf
Le mot import exprime le fait que la bibliothèque pyfits devient accessible (on a repéré la boîte outils et on l'a ouverte).
Le mot as exprime le fait que le mot qui suit (pf) servira à désigner la boîte à outil dans ce programme.
De façon approximative et imagée, pf est devenu le manche de tous les outils de cette boîte.
Dans une page précédente,  la clé associée à une lampe était désignée comme un objet-outil.
Il était également dit que cet objet-outil pouvait être clôné.
Application :
fic   = pf.open(nfic)
le "clone" pf dispose de l'outil open qui ouvre le fichier FITS et l'associe à un nom symbolique (une sorte d'étiquette mettant permettant de récupérer le contenu du fichier).

Ne garder que le tableau de données qui contient la couleur verte
Le fichier contient trois tableaux à deux dimensions (hauteur et largeur). Ces tableaux sont numérotés de 0 à 2 (cf le chef Algol d'une des pages du site).
Le tableau 1 contient le vert.
En Python : return donnees[1]    

Ne garder que certains pixels du fichier
Ces pixels vont être mémorisés dans un tableau de nom symbolique provis.
Tous les pixels sont contenus dans le tableau  vert[ ]
provis contient tous les pixels de vert[ pour lesquels vert est supérieur au seuil ]
(par exemple si le seuil est de 5000 : un pixel valant 4000 sera écarté, un autre valant 7000 sera retenu)
En Python avec numpy : provis   = vert[vert > Kseuil]  
Je trouve cette syntaxe très astucieuse.