Améliorer la résolution des images aériennes avec ESRGAN : quand l’IA redonne vie aux vieux clichés

Les images aériennes sont une mine d’or : relevés anciens, inventaires forestiers, suivis littoraux, plans cadastraux numérisés…
Mais elles souffrent souvent d’un problème majeur : la faible résolution. Flou, pixellisation, textures écrasées, perte de détails… autant de limites qui compliquent l’analyse spatiale.

Depuis quelques années, une technologie issue du Deep Learning change totalement la donne : ESRGAN (Enhanced Super Resolution Generative Adversarial Network).
Développé initialement pour améliorer la qualité des images dans les jeux vidéo, ESRGAN est devenu un outil précieux en télédétection, photogrammétrie et géomatique.



Dans cet article, nous allons explorer comment ESRGAN permet d’améliorer la résolution d’anciennes images aériennes, quels sont ses avantages, ses limites, et comment l’utiliser dans une chaîne de traitement compatible QGIS.


Pourquoi ESRGAN pour les images aériennes ?

Contrairement aux algorithmes classiques de ré-échantillonnage (bicubique, bilinéaire), ESRGAN ne se contente pas d’agrandir l’image.
Il reconstruit les détails manquants en s’appuyant sur un apprentissage profond à partir de milliers d’images haute résolution.

ESRGAN peut :

  • reconstituer les textures des toits, routes, champs, littoraux
  • affiner les lignes (berges, bâtiments, limites agricoles)
  • rendre lisibles de petites structures autrement invisibles
  • améliorer la qualité des orthophotos anciennes numérisées
  • préparer des images pour la segmentation ou la classification automatique

Pour les géomaticiens, c’est un changement d’échelle :
on peut enfin tirer parti d’images aériennes anciennes dont la qualité était jusqu’ici un frein.


Comment fonctionne ESRGAN ? (en version simple)

ESRGAN repose sur deux réseaux neuronaux :

  • Un générateur qui tente de produire une version haute résolution réaliste.
  • Un discriminateur qui essaie de distinguer les images générées des images réelles haute résolution.

Les deux s’améliorent mutuellement, jusqu’à produire une image détaillée, nette et cohérente.

ESRGAN est particulièrement intéressant pour les photographies aériennes car :

  • il apprend des textures naturelles (sols, toitures, végétation)
  • il gère bien le bruit
  • il limite les artefacts propres aux anciens scannages (grain, halos)


Exemple : super-résolution x4 sur une photo aérienne (générique)

Nous partons d’une image aérienne numérisée en 512×512 px.

  • Résolution d’origine : floue, détails effacés
  • ESRGAN ×4 → sortie en 2048×2048 px
  • Améliorations observées :

    • meilleure lecture des parcelles
    • contours des toits plus nets
    • routes et pistes clairement visibles
    • textures du sol mieux reconstituées

Image de 1960

Image de 1948


Utiliser Real-ESRGAN-ncnn-vulkan sous Windows

Nous allons voir :

  1. téléchargement & dossier
  2. commande de base et paramètres utiles
  3. pipeline « image géoréférencée → SR → GeoTIFF » (automatique)
  4. script batch Windows prêt à coller
  5. conseils / pièges à éviter et options avancées
  6. option : enchaîner GFPGAN (restauration visages/détails)


1) Téléchargement & préparation (rapide)

  • Télécharger l’archive realesrgan-ncnn-vulkan depuis la page Releases du projet (fichier realesrgan-ncnn-vulkan-*-windows.zip).
  • Dézipper dans C:\SR\realesrgan-ncnn-vulkan-20220424-windows par exemple.
  • Mettre les images d’entrée dans C:\SR\input\ (formats PNG/JPG/TIF).
  • Créer C:\SR\output\ pour les résultats.


2) Commande de base et paramètres (expliqués)

Commande minimale (x4, modèle realesrgan-x4plus):

.\realesrgan-ncnn-vulkan.exe -i C:\SR\input\image.png -o C:\SR\output\image_x4.png -n realesrgan-x4plus

Paramètres utiles :

  • -i <chemin> : image d’entrée
  • -o <chemin> : image de sortie
  • -n <nom_modele> : modèle (realesrgan-x4plus, realesrnet-x4plus, realesrgan-x4plus-anime, etc.)
  • -s <scale> : facteur d’agrandissement (parfois géré par le modèle; garde -s 4 pour x4)
  • -tile <N> : taille de tuile (ex. -tile 200) — réduit l’utilisation mémoire GPU/CPU, utile pour grandes images
  • -t <N> : threads CPU (optionnel)
  • -g <index> : index GPU (si plusieurs)
  • --help : affiche toutes les options

Conseil : si votre machine n’est pas très puissante, passez -tile 150 ou -tile 100.


3) Pipeline pour images géoréférencées (méthode simple et fiable)

Principe : on effectue l’upscale sur l’image raster (PNG/TIF) puis on recrée un GeoTIFF en réappliquant l’enveloppe géographique (bounds) de l’image source, ce qui conserve la géométrie spatiale et ajuste la résolution au facteur d’agrandissement.

Étapes (manuelles)

  1. Récupérer l’enveloppe (bounds) et la CRS de l’original : gdalinfo -json C:\SR\input\image.tif > info.json ou directement lire Upper Left (ulx, uly) et Lower Right (lrx, lry) depuis gdalinfo image.tif.
  2. Lancer Real-ESRGAN sur l’image (image_non_geo.png ou convertie) : .\realesrgan-ncnn-vulkan.exe -i C:\SR\input\image.png -o C:\SR\output\image_x4.png -n realesrgan-x4plus -tile 150
  3. Recréer un GeoTIFF avec la même enveloppe mais nouvelle taille :
    Si l’enveloppe d’origine est (ulx, uly, lrx, lry), réutilise-la. Exemple : gdal_translate -of GTiff -a_srs EPSG:XXXXX -a_ullr ulx uly lrx lry C:\SR\output\image_x4.png C:\SR\output\image_x4_georef.tif

    • -a_srs EPSG:XXXXX : la CRS de l’original (ex. EPSG:4326 ou EPSG:3857)
    • -a_ullr ulx uly lrx lry : coins en coordonnées spatiales (Upper Left X,Y ; Lower Right X,Y)

Pourquoi ça marche : on applique l’enveloppe géographique d’origine à l’image super-résolue. La nouvelle taille en pixels/px correspondra automatiquement à une nouvelle résolution spatiale (pixel size = original_pixel_size / scale).

Remarque : si vous voulez être extrêmement précis sur le header geo-transform plutôt que -a_ullr, on peut calculer et appliquer la nouvelle geotransform via gdal_edit.py -a_ullr ou en utilisant un script Python GDAL, mais gdal_translate -a_ullr est simple et robuste.


4) Script batch Windows (automatique pour tout un dossier)

Collez le fichier suivant dans C:\SR\run_sr_georef.bat, modifiez les chemins et la projection utilisée, puis exécutez.

run_sr_georef.bat

@echo off
setlocal enabledelayedexpansion

set OUTDIR=output
if not exist %OUTDIR% mkdir %OUTDIR%

REM === Boucle sur tous les tif de input ===
for %%F in (input\*.tif) do (
    echo -------------------------------
    echo Traitement de : %%F

    set BASENAME=%%~nF

    REM === Extraction coordonnées ===
    for /f "tokens=2,3,4,5 delims=(,)" %%a in ('gdalinfo "%%F" ^| find "Upper Left"') do (
        set ULX=%%a
        set ULY=%%b
    )

    for /f "tokens=2,3,4,5 delims=(,)" %%a in ('gdalinfo "%%F" ^| find "Lower Right"') do (
        set LRX=%%a
        set LRY=%%b
    )

    echo ULX=!ULX!
    echo ULY=!ULY!
    echo LRX=!LRX!
    echo LRY=!LRY!

    REM === 1. Extraction PNG temporaire ===
    gdal_translate -of PNG "%%F" temp.png

    REM === 2. Super-résolution ===
    C:\SR\realesrgan-ncnn-vulkan-20220424-windows\realesrgan-ncnn-vulkan.exe -i temp.png -o temp_sr.png -s 4

    REM === 3. Conversion en TIF géoréférencé ===
    gdal_translate temp_sr.png "%OUTDIR%\!BASENAME!_sr.tif" -a_ullr !ULX! !ULY! !LRX! !LRY! -a_srs EPSG:2154

    echo Resultat : %OUTDIR%\!BASENAME!_sr.tif
    echo DONE
)

REM === Suppression fichiers temporaires ===
del temp.png
del temp_sr.png


Remarques :

  • Ce script suppose que gdalinfo.exe et gdal_translate.exe sont trouvables (ajoutez les chemins si besoin).
  • Le script convertit d’abord en PNG pour éviter certains TIF avec compressions exotiques qui feraient échouer l’exécutable.
  • -a_ullr reprend les bounds exacts. Si l’original avait un geotransform légèrement non-axial (rotation), -a_ullr perdrait la rotation ; cas rare en orthophoto : si rotation, il faudra script GDAL Python plus avancé.


5) Conseils & pièges à éviter

  • Conserver l’original : ne travaillez jamais sur l’original — gardez une copie.
  • Mauvaise compression / TIF exotiques : convertir en PNG est souvent plus sûr.
  • Rotation / shearing : -a_ullr suppose pas de rotation. Pour images géoréférées avec rotation, il faut plutôt réécrire la geotransform complète → script Python GDAL pour appliquer SetGeoTransform. Dis-moi si tu as ce cas.
  • Hallucinations : ES(R)GAN peut inventer des détails non réels — vérifier visuellement et documenter le traitement.
  • Taille énorme : pour images très grandes (>10000 px), utilisez -tile petit (50–150) et assez de RAM/temp disk.
  • Métadonnées : le GeoTIFF final n’inclut pas automatiquement les métadonnées EXIF de l’image ; si besoin, utilisez gdal_copy ou gdal_translate -co pour ajouter infos.


6) Ajouter GFPGAN (facultatif)

Si la photo contient personnes / façades abîmées et vous voulez améliorer localement les visages/détails après SR :

  1. Installer GFPGAN (ou télécharger l’exécutable si dispo).
  2. Lancer GFPGAN sur la sortie SR :

gfpgan.exe -i image_x4.png -o image_x4_gfpgan.png --upscale 1


Intégration dans QGIS

Il existe trois méthodes simples pour exploiter ESRGAN dans QGIS :

1. Via le traitement Python (Processing Toolbox)

Créer un script Python qui :

  • prend un raster en entrée
  • lance ESRGAN
  • recharge automatiquement l’image améliorée dans QGIS

2. Via un plugin externe

Créer un plugin personnel basé sur :

  • un bouton “Super-résolution ESRGAN”
  • une interface simple : modèle, facteur ×2/×4, fichier d’entrée

3. Via un workflow R/W d’images

Utiliser ESRGAN en pré-traitement avant d’importer les images dans QGIS
→ idéal pour les orthophotos anciennes.


Avantages

✔ Donne une nouvelle vie aux archives aériennes
✔ Permet une analyse plus fine en télédétection
✔ Utile pour extraire les objets (bâtiments, plages, ravines…)
✔ Fonctionne avec des images très dégradées
✔ Écosystème 100% open source


Limites

⚠ ESRGAN ne devine pas la réalité :
il reconstruit des détails plausibles, pas garantis exacts.

⚠ Risque d’artefacts sur :

  • les bords très contrastés
  • les zones urbaines hétérogènes
  • les ombres profondes

⚠ À éviter pour :

  • la cartographie réglementaire
  • les analyses censées refléter la réalité au pixel près

Mais pour la cartographie exploratoire, la préparation de données ou le travail patrimonial, c’est un outil extrêmement puissant.


Vers un ESRGAN spécialisé “images aériennes” ?

Une piste de recherche passionnante : entraîner un ESRGAN spécifiquement sur :

  • orthophotos haute résolution
  • images aériennes actuelles (10–20 cm/pixel)
  • textures naturelles tropicales, côtières, ou agricoles

Cela donnerait un modèle parfaitement adapté aux scan d’archives des années 1960–1990.


Conclusion

ESRGAN transforme littéralement notre capacité à exploiter les images aériennes.
Pour la première fois, il est possible de redonner des détails à des données anciennes et d’en faire des sources utilisables pour la géomatique moderne.

L’accès à des modèles open source et à PyTorch ouvre la voie à un nouvel écosystème d’outils libres… au service de l’histoire, de l’environnement et de la cartographie.


Si cet article vous a intéressé et que vous pensez qu'il pourrait bénéficier à d'autres personnes, n'hésitez pas à le partager sur vos réseaux sociaux en utilisant les boutons ci-dessous. Votre partage est apprécié !

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *