LE FORMAT
DE FICHIERS FITS
Une petite note par lerautal
1. FORMAT ?
Ce terme est familier à certains.
Pour d'autres c'est un mot qui recouvre une réalité qu'ils ne comprennent
pas.
Par contre le plus grand nombre de ceux qui pratiquent l'informatique -
par choix ou sous la contrainte - s'est un jour retrouvé avec un "fichier"
dont il ne savait que faire.
Le "machin" était inexploitable. Et le destinataire, les bras ballants,
frustré...
Exemple typique : sur mon vieux Pécé,
j'ai XXX 97 et on m'a remis un fichier créé par un XXX 2013 (cela existe
???).
Bouffée de colère : pas moyen de le lire.
Et les "moins ignorants" à qui on pose la question qui répondent :
"C'est à cause du format de fichier".
Ah ! Voilà une réponse qui m'aide beaucoup.
Ou alors :
"A cause de l'évolution technologique,
le format a changé de XXX 97 à XXX 2013".
Encore mieux : deux mots à la noix... Technologie (tarte à la crème) et
Format (et je ne sais toujours pas ce que cela veux dire...).
2. UN EXEMPLE FAÇON CLUB DES CINQ...
Pour correspondre "en secret" les membres d'une société secrète utilisent
un code.
Jusque là, normal.
Voyons un exemple qui transmet le prénom d'une personne et le montant de
son compte en banque :
2NYSJ*1DBDEAXAB*...
Réponse :
Le signe * est un séparateur entre les informations. Au début de chaque
paquet d'information, on trouve une valeur numérique.
Si c'est
1, on
remplace chaque lettre par un chiffre avec l'équivalence suivante : A=1,
B=2, C=3,...X=la virgule.
Sinon cela désigne le décalage de chaque lettre par rapport à l'alphabet.
2NYSJ ->
on décale N de deux crans (N,O,P) cela donne P, on décale Y de deux crans
(Y,Z,A), on décale S de deux crans (S,T,U), on décale J de deux crans
(J,K,L) -> PAUL.
1DBDEAXAB
-> On remplace les lettres par des chiffres (et X par une virgule) D=3,
B=2, D=3, E=4, A=1, A=1, B=2 -> 32341,12
Autrement dit : on avait un paquet de chiffres et de lettres , mais sans
les règles de rangement de l'information, on était bien embarrassés pour
en tirer quelque chose.
Ces règles définissent un mode de structuration des données.
Appelons cela
format.
Et passons à la suite.
3. FAIRE PAYER ENCORE ET TOUJOURS
Au moment où l'informatique s'est diffusée dans les pays développés,
les premiers industriels du logiciel ont défini des formats pour
enregistrer les données générées par leurs logiciels.
Ils n'ont pas expliqué comment les données étaient organisées dans les
fichiers (ils ont caché le format) et pris des brevets pour tenter
d'empêcher le décodage.
Résultat ? Quand on voulait accéder à l'information contenue dans les
fichiers, il fallait acheter le logiciel.
Pire, à chaque nouvelle version majeure du logiciel, ils modifiaient le
format de façon à ce qu'on ne puisse exploiter les fichiers avec les
anciennes versions.
Par réaction, des personnes qui refusaient cette marchandisation de
l'information (et du savoir) ont inventé des formats équivalents, diffusé
leur description et incité les gens à les utiliser.
Quelques exemples de formats décrits (et donc accessibles sans
forcément payer des logiciels) : JPEG (créé par des photographes, HTML (le
format des pages Web), PNG (format d'image non compressé), PDF (pour la
transmission de documents non modifiables), TEXTE (pour tout le monde)...
4. LE CAS DES ASTRONOMES PROFESSIONNELS : FITS
Un(e) astronome, c'est quelqu'un qui a bénéficié d'une formation de haut
niveau dans des domaines des sciences ainsi que des mathématiques.
C'est quelqu'un qui doit être capable d'imaginer des "expériences" ainsi
que leur exploitation, et tout ceci de façon à bénéficier d'horaires sur
les instruments ainsi que des crédits pour du matériel, des déplacements,
des colloques avec d'autres chercheurs.
Echange, exploitation des données,
publication, argent.
Les données sont maintenant numériques. Il est utile donc d'avoir la
compétence pour traiter ses propres données (ou celles des autres).
L'argent est rare : on ne va pas payer des licences de logiciels alors
qu'on en a toujours un meilleur usage.
Conséquence : les astronomes programment (tous ? je ne sais pas).
Echange : il faut que les données soient dans un format ouvert, clairement
décrit, et suffis
amment
polymorphe pour s'adapter à tous les "métiers" de l'astronomie : visuelle,
X, gamma, spectroscopie....
Ce format s'appelle
FITS : Flexible
Image Transport System.
https://fr.wikipedia.org/wiki/Flexible_Image_Transport_System
Suite
à la mise en ligne de la première version de cette page,
Jean-Louis Bétoule dont chacun à l'AAI connaît les attaches,
m'a fait les remarques suivantes (reproduites avec son
accord).
Je
peux te renseigner un peu : Tous les astronomes programment
ou du moins savent le faire, et savent donner les
instructions adéquates à leurs ingénieurs.
Pour une bonne raison : c'est que les traitements de données
ne peuvent pas être achetés, vus que c'est eux qui les
mettent au point. Et je ne vois pas trop dans quelle
discipline il n'y aurait pas de données, sauf peut-être les
purs théoriciens.
Ce qui est parfois acheté ce sont des langages de
programmation adaptés tel que IDL par exemple ( voir
wikipedia). Mais ça, ça vient de la formation des gens. Ou
de leurs intérêts financiers. (On voit couramment des
logiciels achetés très cher et jamais utilisés) . Pour IDL
par exemple, Il y a des équivalents libres tels que GDL.
Mais depuis, il y a Python ! Et c'est la révolution..
|
5. UN PAS EN AVANT
L'image suivante est au format FITS. Je devrais écrire "dans un des
formats FITS"
: Un extrait des
Pleiades
Il est probable que vous ne pourrez pas l'afficher : comme il ne s'agit
pas d'un format "grand public" peu de gens ont un logiciel permettant
d'afficher l'image. Mais ce n'est pas vraiment grave dans l'immédiat.
Par contre, si vous essayez d'ouvir le fichier dans le "Bloc-Notes" de
Windows (ou tout autre éditeur de texte - pas un traitement de texte SVP),
vous afficherez ceci :
Deux zones dans cette visualisation :
- En haut, des informations textuelles qui sont faciles à lire sans
outil spécialisé (la preuve).
Ces informations sont comparables au code de la société secrète
imaginée plus haut.
Par exemple NAXIS1 = 252 signifie que la largeur de l'image est de 252
pixels.
NAXIS2 =180 signifie que la hauteur de l'image est de 180 pixels.
NAXIS = 3 veut dire que l'information est stockée dans trois paquets
distincts (ici un par couleur fondamentale).
BITPIX = 16 veut dire que pour coder la couleur on utilise 16 bits par
pixel (16 pour le rouge, 16 pour le vert, 16 pour le bleu).
Cette partie du fichier s'appelle l'en-tête
et les information qu'il contient s'appellent les métadonnées.
- En bas (sous forme illisible par le bloc-note) les données
numériques qui constituent l'image.
6. AUTRE REPRÉSENTATION DU FORMAT
Certains sont "lecture et imagination", d'autres sont "visuels".
L'illustration ci-dessous exprime dans un autre langage ce qui est rédigé
plus haut.
Vous remarquerez que tous les pixels contenant l'information sur le rouge,
sont dans un même paquet.
Chacune des couleurs a son propre "paquet".
En fait, FITS est très flexible et ce qui est décrit ici est le CAS
PARTICULIER des fichiers FITS créés par SIRIL.
On pourrait avoir EN PLUS d'autres paquets de données contenant des images
en rayon X, en onde radio... et tout ceci serait rangé dans un seul
fichier FITS.
On pourrait aussi n'avoir qu'un seul paquet de données : le vert par
exemple.
Mais dans ce cas, l'en-tête doit renseigner le destinataire de
l'information.
7. ACCEDER AUX FICHIERS FITS AVEC UN LOGICIEL
C'est à dire les lire, les modifier, les enregistrer... en gros faire des
choses utiles avec.
Quelques logiciels : IRIS, SIRIL, GS9, la version expérimentale de Gimp,
pour parler d'outils gratuits.
Exemple avec GS9 :
8. ACCEDER AUX FICHIERS FITS AVEC UN LANGAGE DE PROGRAMMATION
Historiquement, le langage de programmation des scientifiques était le
FORTRAN (TRANsformation de FORmules : le nom est limpide).
D'autres langages très puissants sont apparus également C et C++ qui
donnent des programmes performants (mais difficiles à coder), JAVA (plus
lent) et, actuellement PYTHON.
Ce langage est apprécié pour au moins trois raisons :
- Il est gratuit et s'apprend rapidement.
- Il simplifie la vie du programmeur (par rapport aux précédents).
- Par son intermédiaire, on peut utiliser une multitude de "boîtes à
outils" bien testées et codées dans des langages très rapides.
Sous réserve de ne pas être trop maladroit on a accès
à
la fois à la facilité ET à l'efficacité.
9. ILLUSTRATION PAR UN EXEMPLE
Pour terminer, je vais donner un exemple de code PYTHON simple accompagné
de commentaires allégés.
Objectif du programme :
Lire le contenu du fichier cité plus haut et :
- lister le contenu de l'en-tête,
- sauvegarder les données au format JPEG de façon à pouvoir l'afficher
facilement.
(les commentaires sont précédés du signe
#
et sont écrits en bleu).
# Ouvrir un fichier FITS
# lire l'en tête et les données
# lister l'en-tête.
# sauvegarder les données au format JPEG
# zone où l'on demande l'accès à deux boîtes à outils
# pyfits permet d'agir sur les fichiers FITS. Le "manche de l'outil"
sera désigné par "pf"
# scipy.misc (et son outil imsave) permet de sauvegarder les données
dans un autre format.
import
pyfits as pf
from scipy.misc import imsave
# On ouvre le fichier et l'on déclare que
"fic" est le nom symbolique qui permettra d'agir sur lui.
# pour cela on utilise l'outil "pf" dans sa
fonctionnalité "ouverture" (open en anglais)
fic =
pf.open('ALCYONE_HIP17702_n_TAU.fit')
# On charge le contenu de l'en-tête (désigné
par le mot anglais header) dans "en_tete" qui est le nom symbolique
permettant d'agir dessus
en_tete =fic[0].header
# ayant ce nom symbolique on peut l'invoquer
avec la fonction "print" qui permet de lister le contenu.
print en_tete
# Maintenant on récupère les informations
sur les pixels en les associant au nom symbolique "donnees" (le mot
anglais data signifie "données").
donnees = fic[0].data
# Il ne reste plus qu'à transformer les données FITS en JPEG et à écrire
le résultat dans le fichier "alcyone_en_jpeg.jpg".
imsave('alcyone_en_jpeg.jpg',donnees)
# Il faut penser à fermer le fichier FITS :
pas bon de laisser une porte ouverte.
fic.close()
Voilà. C'est tout.
Si vous effacez mentalement mes commentaires, vous pourrez constater qu'en
très peu de lignes de code Python, on fait un travail formidable. Des
logiciels aussi gros et réputés que Word ou Excel n'en sont pas capables.
Voici l'image qui résulte du programme :
Voici le listage de l'en-tête :
# résultat d'affichage header
#SIMPLE = T / file does conform to FITS standard
#BITPIX = 16 / number of bits per data pixel
#NAXIS = 3 / number of data axes
#NAXIS1 = 1000 / length of data axis 1
#NAXIS2 = 700 / length of data axis 2
#NAXIS3 = 3 / length of data axis 3
#EXTEND = T / FITS dataset may contain extensions
#COMMENT FITS (Flexible Image Transport System) format is
defined in 'Astronomy
#COMMENT and Astrophysics', volume 376, page 359; bibcode:
2001A&A...376..359H
#BZERO = 32768 / offset data range to that of
unsigned short
#BSCALE = 1 / default scaling factor
#MIPS-HI = 145 / Upper visualization cutoff
#MIPS-LO = 0 / Lower visualization cutoff
#INSTRUME= 'NIKON D3200' /
instrument
name
#DATE = '2015-09-01T21:54:15' / UTC date that FITS
file was
created
#XBINNING= 1 / Camera binning mode
#YBINNING= 1 / Camera binning mode
#EXPTIME = 10. / Exposure time [s]
#ISOSPEED= 200. / ISO camera setting
#PROGRAM = 'Siril v0.9.0rc1' / Software that created
this HDU
#END