GDAL COG

2025-04-04

Introduction

Objet : Création d’un COG à partir d’images d’observation de la Terre

Outil : GDAL, QGIS, GeoServer

Qu’ est-ce qu’ un COG ?

COG = Cloud Optimized GeoTIFF

  1. Un COG est un type particulier de GeoTIFF
  2. C’est un standard de plus en plus implémenté
  3. Le contenu d’un COG est pyramidé : il est tuilé selon plusieurs résolutions
  4. Il est indexé, autorisant la lecture de portions d’images

… pour permettre un accès optimisé via des requêtes HTTP.

Avantages :

  • images géolocalisées exploitables sans serveur web cartographique
  • un simple serveur de fichiers HTTP suffit
  • avec des performances très très élevées

Caractéristiques d’une image

Principales caractéristiques auxquelles faire attention :

  • projection
  • dimensions (nombre de pixels en largeur et hauteur)
  • résolution (taille du pixel projeté sur le terrain)
  • nombre de canaux / bandes
  • transparence
  • compression
  • aperçus en résolution dégradées

Comment trouver ces informations ?

  1. Avec GDAL (gdalinfo) :
gdalinfo mon_fichier.tif
  1. Avec QGIS :
    Menu Raster > Divers > Information raster…
Driver: GTiff/GeoTIFF
Files: 973-2021-0110-0565-U22N-0M20-E080.jp2.tif
Size is 25000, 25000
Coordinate System is:
PROJCRS["RGFG95 / UTM zone 22N",
    BASEGEOGCRS["RGFG95",
...
Band 1 Block=256x256 Type=Byte, ColorInterp=Red
  Description = Red
  Min=15.000 Max=255.000
  Overviews: 1563x1563, 391x391, 98x98, 25x25
...

Nombre de canaux

En général, chaque pixel est codé sur 3 canaux : Rouge, Vert et Bleu.

Ce sont les mêmes canaux utilisés par la plupart des écrans.

Quelques exceptions :

  • les images monochromes : 1 seul canal.
  • images qui utilisent une LUT (look up table) : 1 seul canal contenant l’indice d’une couleur dans une palette de couleurs prédéfinie.
  • images adaptées à l’impression en quadrichromie : 4 canaux (cyan, magenta, jaune et noir). Pas utilisé en SIG.
  • images multispectrales : 1 canal par bande spectrale.
  • images pour lesquelles on a besoin de nuancer la transparence/opacité de chaque pixel. Une bande spécifique peut stocker la valeur de l’opacité de chaque pixel.

Gérer la transparence

La gestion de la transparence peut être nécessaire lorsque l’on veut superposer des images en évitant que les zones sans données masquent ce qui est affiché en-dessous.

Trois solutions sont possibles :

  • encoder la valeur des pixels sans données avec une valeur prédéterminée. Il faut ensuite indiquer à son outil SIG quelle couleur doit être traitée comme entièrement transparente. Cette méthode n’est pas adaptée aux images utilisant une compression avec perte car les zones sans données ne peuvent pas être totalement homogènes
  • intégrer à l’image un canal de transparence (opacité en réalité). Ce canal est souvent appeler canal alpha. Une image RVB à laquelle on ajoute un tel canal est souvent étiquettée RVBA.
  • intégrer un masque binaire à l’image. Ce masque indique pour chaque pixel s’il est totalement transparent ou binaire. Ce masque est plus économe en espace disque qu’un canal alpha mais ne peut pas gérer des cas de transparence partielle ou progressive.

Retravailler la transparence

Comment retravailler une zone sans données ?

3 solutions sont possibles :

  • Redécouper l’image à partir d’une forme stockée issue une base de données vecteur
  • Utiliser un outil prêt à l’emploi pour le détourage des images géographiques. Exemple : GDAL nearblack
  • Utiliser un outil permettant de manipuler les valeurs des pixels via des formules mathématiques. Exemple : gdal_calc

Compressions d’images

La compression consiste à encoder les valeurs des pixels d’une manière à économiser de la place à l’aide de fonctions mathématiques.

Deux grandes familles de compressions :

  • Compression sans perte : L’information n’est pas dégradée.
    L’encodage est parfaitement réversible.
  • Compression avec perte : L’information est dégradée.
    Le décodage ne permet pas de retrouver les valeurs initiales exactes.

Compressions sans perte

Les compressions sans perte sont plus efficaces lorsque des séquences sont reproduites de nombreuses fois dans les images.

Très efficace lorsque les valeurs des pixels sont peu nombreuses et bien organisées visuellement (pour des rasters dérivés de données vecteurs par exemple).

Exemples :

  • Packbits
  • Deflate
  • LZW
  • ZSTD

Compressions avec perte

Les compressions avec perte sont plus économes en espace disque que les compressions sans perte.

Exemples :

  • JPEG
  • WebP

Processus de création d’un COG

  1. Conversion des images d’origine en fichiers GeoTIFF, avec une compression, si possible, sans perte
  2. Création d’un VRT pour gérer toute la couverture raster en une seule passe
  3. Conversion du VRT en une image unique au format COG

Cas particuliers peuvant faire varier ce processus ou nécessiter une attention particulière

  • Données sources composées d’une seule image
  • Données sources déjà disponibles au format GeoTIFF
  • Zones sans données opaques et besoin de les rendre transparentes
  • Modèle numérique de terrain (altitude au lieu de couleurs)

Conversion d’une image d’origine

Sous Windows dans le terminal :

gdal_translate -of GTiff -co TILED=YES -co BLOCKXSIZE=512 -co BLOCKYSIZE=512 
  -co NUM_THREADS=12 -co COMPRESS=ZSTD -co PREDICTOR=2  
  .\input\mon-image.jp2 .\output\mon-image.tif

Paramètres utilisés

-of GTiff : format du fichier en sortie
-co BLOCKXSIZE=512 -co BLOCKYSIZE=512 : dimensions des tuiles internes
-co NUM_THREADS=12 : nombre de processus système utilisés pour le traitement
-co COMPRESS=ZSTD -co PREDICTOR=2 : comrpession utilisée et paramètre associé

Conversion d’un lot d’images

Sous Windows dans le terminal :

FOR %F IN (C:\ortho\jp2\*.jp2) DO 
  gdal_translate.exe -of GTiff -co TILED=YES -co BLOCKXSIZE=512 -co BLOCKYSIZE=512 
  -co NUM_THREADS=12 -co COMPRESS=ZSTD -co PREDICTOR=2
  %F C:\ortho\tif\%~nxF.tif 

Sous Windows dans un script .bat :

FOR %%F IN (C:\ortho\jp2\*.jp2) DO 
  gdal_translate.exe -of GTiff -co TILED=YES -co BLOCKXSIZE=512 -co BLOCKYSIZE=512 
  -co NUM_THREADS=12 -co COMPRESS=ZSTD -co PREDICTOR=2 
  %%F C:\ortho\tif\%%~nxF.tif 

Attention à la syntaxe des scripts .bat

Le signe % doit être doublé dans les scripts .bat.

Création d’un VRT

Sous Windows dans le terminal :

gdalbuildvrt.exe C:\ortho\ortho.vrt C:\ortho\tif\*.tif -addalpha -hidenodata

Paramètres utilisés

-addalpha : ajout de la transparence
-hidenodata : masque les zones en-dehors des images sources

Conversion en COG

Sous Windows dans le terminal :

gdal_translate.exe C:\ortho\ortho.vrt C:\ortho\cog.tif 
  -of COG -co BIGTIFF=YES -co BLOCKSIZE=512 -co OVERVIEW_RESAMPLING=BILINEAR
  -co COMPRESS=JPEG -co QUALITY=90 -co NUM_THREADS=12 

Paramètres utilisés

-of COG : format du fichier en sortie
-co BIGTIFF=YES : permet de gérer les images dont le poids est supérieur à 4 Go
-co BLOCKSIZE=512 : dimensions des tuiles internes
-co NUM_THREADS=12 : nombre de processus système utilisés pour le traitement
-co COMPRESS=JPEG -co QUALITY=90 : compression utilisée et paramètre associé -co OVERVIEW_RESAMPLING=BILINEAR : méthode d’échantillonnage pour les résolutions dégradées

Choix de la compression

Pour des photographies aériennes : la compression JPEG introduit des dégradations peu visibles.

Pour les cartes qui utilisent de grandes plages de couleurs uniformes : utiliser une compression sans perte (LZW, ZSTD).

Pour les images contenant un canal alpha, ne pas utiliser la compression JPEG.

Pour les plus affutés…

Avec le format COG, il est possible d’utiliser une compression différente pour la résolution nominale et une autre pour les aperçus aux résolutions dégradées (voir paramètre OVERVIEW_COMPRESS).

Ainsi, on peut :

  • utiliser une comrpession sans perte pour la résolution nominal
  • utiliser une compression avec perte pour les autres résolutions

Exploiter un COG

Dans QGIS :

  • Fichier local : Gestionnaire de données > Raster > Fichier
  • Fichier distant : Gestionnaire de données > Raster > Protocle HTTP

Dans GeoServer :

  • Option “COG” disponible pour le type d’entrepôt GeoTIFF

Ressources utiles

Médadonnées

  • Auteur : Benjamin Chartier
  • Date : 04/04/2025
  • Version : 1.0
  • Licence : CC BY 4.0
  • Polices : Alegreya Sans(2013, Juan Pablo del Peral), Fira Code