La jungle des formats

La base du traitement en astrophotographie :

La capture : qui se fait soit sous la forme d’image (fixe), soit de video, et pour laquelle on va obtenir une “information brute” (mélange de signal et de bruit, dont on espère que le premier surpasse le deuxième).

Le pré-traitement : qui vise à soit convertir un format propriétaire vers un format “ouvert” pour le traitement réel, soit à appliquer des corrections (dark, flat, calibrage, filtrage, etc..) pour optimiser le rapport signal sur bruit. Et parfois : les deux 🙂

Le traitement : on va traiter une ou une série d’images (correction, empilement, alignement, etc…) pour gagner en signal utile par diverses techniques (principalement des mathématiques et de la théorie du traitement du signal…).

Le post-traitement : soit scientifique, dans le sens où on ne touche pas (ou peu) aux informations obtenues et on en extrait des données pertinentes, soit il est totalement d’ordre esthétique et tout est permis !
Généralement, les deux opérations précédentes fournissent les informations scientifiques correctes (et les modifier enlèverait tout l’intérêt), mais si on veut “faire” joli (avoir la consécration de passer dans la presse spécialisée avec son image), on va modifier quasi tous les éléments de l’image sur une base purement subjective…

En finale la différence est flagrante…

Au dessus : les images “scientifiques” (dans des longueurs d’ondes différentes),
En bas : un “visuel” (artificiel, car même si on était en face, nos yeux d’humain ne verraient jamais cela…).
Mais c’est joli, on ne peut pas le nier… 🙂

Résumons cela graphiquement :

Comme on l’imagine, tout dépendra des outils que l’on sélectionnera pour chacune des tâches. Parmi toutes les possibilités, on détecte tout de même des “standards” qui s’imposent, tant via les outils utilisés que par leurs capacités intrinsèques.

Les formats “sans perte” : dans les formats issus nativement des capteurs, on peut déterminer trois catégories :

  • Les propriétaires : qui deviennent rares, excepté dans le domaine des APN ou le format “RAW” règne en maître et se décline quasi avec autant de variation que marques d’appareils photo (et encore…)
    Ex : les RAW de Canon se déclinent déjà selon plusieurs normes ( ex : .cr2, .crw, etc…)
  • Les “ouverts” : la capture finit dans un format qui est documenté et accessible aux divers outils disponibles (ex : .ser, .avi+codex, ..)
  • Les “universels” : généralement des formats anciens mais remis au goût du jour (TIFF, JPEG2000, PNG, DNG)
  • Les spécialisés : des formats spécialement crées pour un usage et dans le cas de l’astronomie, incontournable : FITS

Les formats “avec perte” : on utilise une compression destructrice (tel le très célèbre JPEG), mais aussi la multitude d’autres formats qui font gagner de la place au stockage… Donc, à chaque sauvetage, on dégrade l’image un peu plus…

Un exemple (parmi d’autres…) https://cloudinary.com/blog/why_jpeg_is_like_a_photocopier

Voici l’exemple fort connu du résultat d’avoir effectué 1000 lectures/sauvetages successifs de la même image avec différents formats “destructifs”…
Donc : à proscrire de tout traitement d’image sérieux, sauf : pour la présentation finale du résultat et sa diffusion via plusieurs media (web, écrans, papier, message, etc…).

Revenons sur chaque catégorie

Les formats “propriétaire” : conçu (en théorie) pour contenir les informations tel que le capteur l’a perçu, avec le moins d’interprétation possible. C’est clairement le format préféré pour l’astrophoto via APN.

Les formats de “travail” : ils doivent pouvoir stocker le maximum de signal issu du capteur, et occasionner le moins de pertes à chaque ouverture/écriture.
On dispose principalement de : FITS (ou Flexible Image Transport System, un standard de la NASA et de IAU), TIFF (Tag(ged) Image File Format) et parfois PNG (Portable Network Graphics) qui seront quasi accepté partout à l’entrée et la sortie.

Les formats de “présentation” : ici, on veut trouver un équilibre entre taille de l’image et qualité. Cela ne peut se faire qu’avec une compression plus ou moins présente (= perte de définition) et adaptée au support de publication (pour le Web, Ecran TV ou papier).

Parmi ceux-ci JPEG (le plus destructeur au niveau des détails), JPEG2000 (ou JP2, bien meilleur et pouvant même être utilisé pour travailler, mais peu supporté), GIF (historique… Pour les animations), etc…

En Python, il faudra faire appel à des librairies spécialisées pour les lire, les interpréter et les sauver. J’ai donc effectué ma sélection et ai choisi une série d’outils :

RAW : sera supporté par l’utilisation de rawpy, utilisant libraw (successeur du DCRAW fort connu) qui offrira le support de plus de 1000 formats (= appareils) propriétaires.

TIFF, JPEG, JPEG2000, PNG, AVI : seront supportés via l’utilisation de OpenCV , mais aussi de imageio (voir ci-dessous)

FITS : sera supporté via l’utilisation de pyfits et imageio

SER : ce format “simple image sequence format, “similar to uncompressed films” est plus particulier… Si on regarde la documentation, on s’aperçoit quelle tient quasi sur 2 pages… Mais je n’ai pas trouvé à ce stade de librairie qui explique pouvoir directement le supporter. Il faudra encore chercher un brin plus tard (ou écrire la fonction de lecture soi-même).

WEBP : un format d’image récent (2010), ce format “Web Picture” est un format d’image matricielle développé et mis à disposition du public par Google. Il peut être exploité sans pertes, ou avec un algorithme de compression à pertes “prédictif”. Il combine l’usage du format VP8 (qui est le codec vidéo du format WebM, son équivalent multimedia) et d’un conteneur léger et extensible nommé RIFF. Combinant des capacités du format GIF (animation) et de PNG ou TIFF, il n’est pas à négliger pour les présentations. Mais il exigera une librairie spécifique (webp).

Librairie imageio

Pour lire et sauver des images, autant faire aussi appel en cas de besoin aux fonctions d’une autre librairie : imageio qui offre quelques fonctions très utiles, surtout pour de nombreux formats et les “séries” de traitement (ou conversion). Et cela pour une liste conséquente de formats

Même s’il existe de nombreuses (autres) librairies, inutile de se disperser, maîtriser ces quatre là prendra déjà du temps…

Comment installer des librairies (package) ?

Trois solutions :

  • soit la librairie est déjà dans Anaconda : rien à faire
  • soit la librairie n’est pas dans Anaconda, mais supportée par le package : utiliser les fonctions incluses (ou commande “conda install”)
  • soit elle n’est pas là, n’est pas supportée et il faut l’installer…
    Et tout se règle (quand tou va bien)… Via une seule commande : “pip install” a exécuter dans la console de votre environnement Anaconda

Tout est expliqué ici : https://docs.conda.io/projects/conda/en/latest/user-guide/tasks/manage-pkgs.html

Dans le cas des librairies indiquées dans ce site, j’ai (évidemment) vérifié qu’elles sont disponibles et opérationnelles…