Nicolas Brodu     
          
            S U P E R R E S
Nicolas
Brodu
S U P E R R E S

Delta de l'Eyre, se jettant dans le bassin d'Archachon. Première image: données d'origine (Sentinel-2 bande 1, violet 443 nm, 60m/pixel). Seconde image: super-résolution à 10m/pixel, inférant les détails des autres bandes tout en préservant la réflectance.

Première image: données d'origine (Sentinel-2 bande 9, infrarouge 945 nm, 60m/pixel). Seconde image: super-résolution à 10m/pixel, obtenue avec le même algorithme.

De quoi s'agit-t'il ? (avec contexte et sans trop de termes techniques)

Il s'agit d'une méthode pour améliorer des images satellites. Ces images sont fournies avec une résolution (i.e. taille de pixel au sol) qui dépend de nombreux compromis techniques. Imaginez prendre une photo de nuit. Deux possibilités s'offrent à vous : attendre qu'assez de lumière arrive (temps d'exposition plus long), ou laisser le capteur prendre l'image avec trop peu de lumière (valeur ISO élevée). Le premier choix rend flou les objets en mouvement, le second choix génère du bruit et une image de mauvaise qualité. Les satellites se déplacent sur leur orbite : il leur est difficile d'attendre très longtemps. Et des images de qualité médiocre ne sont tout simplement pas acceptables. Certains fabriquants de satellites recourent à une autre astuce : Ils prennent la lumière en provenance de toutes les couleurs en même temps, afin de produire une image en noir et blanc. En n'ayant pas à filtrer chaque couleur séparément, plus de lumière atteind donc le capteur. Évidemment, cette option n'est pas envisageable quand le but est, par exemple, de surveiller l'évolution de la végétation verte par rapport à un sol marron. Dans ce cas, des couleurs précisent sont nécessaires. Malheureusement, plus on filtre spécifiquement une couleur, et moins de lumière atteind le capteur. Dans ce cas, un autre choix assez courant est de réduire la résolution de l'image. Si, à la place de pixels de taille 10m×10m, on en prend des 20m×20m, alors on capture 4 fois plus de lumière. C'est un choix qui diminue la précision des détails mais, au moins, on peut avoir confiance dans des mesures qui ne sont pas corrompues par un bruit de capteur. Ainsi, il est assez courant de trouver des images satellites où la taille des pixels dépend de la couleur mesurée (e.g. rouge, vert, bleu, infrarouge..). C'est le cas pour les images des satellites Sentinel-2, qui présentent les deux cas : des pixels plus fins avec des couleurs moins précises, et des pixels plus grossiers avec des couleurs plus précises.
La méthode qui est présentée dans l'article indique comment récupérer les détails des pixels de plus haute résolution, afin de les propager sur toutes les couleurs. On obtient ainsi des images où des couleurs précises (i.e. "bandes spectrales") sont disponibles à la plus haute résolution de pixels.

Résumé et article

Cette méthode de super-résolution cible des images multispectrales et multirésolution, telles que celles en provenance des satellites Sentinel-2 (mais pas seulement). En partant des bandes de plus haute résolution, l'information qui dépend de la bande spectrale (réflectance) est séparée de l'information commune à toutes les bandes (géométrie des éléments de la scène). Ce modèle est ensuite appliqué pour démixer les bandes de plus faible résolution, préservant leur réflectance tout en propageant l'information commune afin de préserver les détails.

L'article a été publié dans le journal TGRS. La version preprint de l'article est disponible ici ainsi que sur ArXiv.org. La version preprint est en fait plus détaillée que la version de l'éditeur, en raison de contraintes de taille, et elle est donc la référence recommandée à lire.

Logiciel, avec application à Sentinel-2

NOUVEAU: Téléchargez et essayez le plugin pour SNAP, l'application de l'ESA, version 5 ou plus. Il fonctionne pour Linux, Win64 and Win32. Pour l'installer, ouvrez le menu "tools/plugins", puis l'onglet "downloaded", et enfin sélectionnez le fichier que vous venez de télécharger puis installez-le. SNAP doit être redémarré pour une prise en compte correcte du plugin. Le code source est disponible ici.

L'algorithme est assez gourmand en temps de calcul. Merci de commencer d'abord par une petite région d'intérêt, puis d'augmenter la taille de la région en fonction de vos besoin et de votre capacité de calcul disponible. Le "graph processing framework" de SNAP est utilisable pour une utilisation hors-ligne. Vous pouvez aussi faire exécuter le code sur un cluster a l'aide d'un script Python qui utilise GDAL pour charger les images. L'avantage étant de ne pas avoir à installer SNAP, par exemple pour un usage sur des clusters de calcul.

Cet algorithme de super-résolution est écrit en C++ et utilisable directement comme une bibliothèque C++. Il est aussi utilisable via un module Python, ou encore accessible par une interface Java JNI (utilisée par le plugin ci-dessus).

Le code (dont le script Python pour traiter les images Sentinel-2 hors SNAP) est développpé et n'est maintenu que pour Linux (Debian testing/unstable, g++). Les DLLs Win32/64 du plugin ont été obtenues par compilation croisée depuis Linux. Si vous écrivez un portage pour votre compilateur/système favori, n'hésitez pas à me l'indiquer. Je pourrais alors inclure un lien vers votre portage ici, ou l'inclure dans une future version (avec remerciements adéquats). Vous pouvez télécharger la dernière version.

Cet algorithme de super-resolution est un logiciel Libre, selon la LGPL v2.1 ou plus récent ou, à votre convenance, selon la licence CeCILL-C. Le code source est maintenu dans mon dépôt de sources, à consulter pour des mises à jour éventuelles.

Style:
      R E C H E R C H E 
S
U
P
E
R
R
E
S
S
U
P
E
R
R
E
S