retour aux mémos     retour au modèle     back to SimMasto home page   retour à la page d'accueil

Changement de résolution d'un raster


Objectif : Modifier la résolution d'une image raster (on va simplifier une image et réduire le nombre de pixels utilisés pour la définir).
Entrée : Un raster (géoréférencé)
Sortie : Un raster simplifié
Outils: QGIS, GRASS

Présentation du problème

Lorsque l'on souhaite travailler avec des rasters, on se trouve parfois confronté à des problèmes de  dimensions. Si l'on travaille avec des rasters contenant des données géographiques, on peut rapidement atteindre des dimensions de plusieurs milliers de pixels.

Dans le cadre d'une simulation, une telle précision n'est pas toujours nécessaire, car la gestion d'un tel raster suppose la gestion de millions de cases.

Pour optimiser la rapidité d'exécution de la simulation, on va réduire la résolution de ce  fichier raster.

Pour réduire la résolution d'un raster la logique consiste à représenter un ensemble de pixel dans un seul pixel.

  

Exemple : à un groupe de  4 pixels on associe  1 pixel

Choix de l’algorithme

Pour effectuer cette simplification, il y a plusieurs algorithmes possibles. Une des méthodes consiste à prendre comme valeur du pixel de sortie la moyenne des valeurs des autres pixels.

Cette méthode pose cependant un problème, dans le cas où on travaille avec des valeurs discrètes significatives (1 signifie herbe, 3 signifie arbre, ...) si on effectue la moyenne on peut récupérer des valeurs qui ne correspondent à rien.

L'algorithme de la fonction que nous allons utiliser renvoie au pixel de sortie la valeur du pixel proche du centre de la grille qui contient les pixels que l'on va regrouper.

La valeur du pixel de sortie sera « 5 ».

Cet algorithme est surtout efficace dans le cas où on travaille sur des valeur continues, mais il pose problème dans certains cas ; par exemple dans le cas suivant :

 

La valeur renvoyée pour le pixel est 9, ce qui n'est pas représentatif des valeurs voisines, la perte de précision est grande.

Pour pallier à ce problème, avant de faire appel à la méthode de changement de résolution, nous allons rendre notre image plus floue en harmonisant les valeurs voisines.

On va utiliser une grille plus ou moins fine, que nous allons faire passer sur chaque pixel du raster pour attribuer à chaque pixel la valeur majoritaire des cellules avoisinantes. Ainsi la grille précédente est transformée en celle-ci :

“floutage” de l’image par attribution de la valeur majoritaire

Après cette transformation, les valeurs sont unies, on peut donc prendre comme valeur du pixel de sortie, une valeur située vers le milieu de la grille, l'erreur sera réduite.

Changement de la résolution avec GRASS.

  1. Ouvrir QGIS.
  2. Si vous n'avez pas de jeu de donnée GRASS, vous devez en créer un.

G        La procédure pour créer un nouveau jeu de données est détaillée dans la procédure pour vectoriser un raster p.Erreur ! Signet non défini..

  1. Avant de commencer le traitement, importez votre raster dans GRASS. Il faut toujours faire attention à ce que votre jeu de données soit cohérent avec votre image (vérifier le CRS, voir module Modification du système de coordonnées, p.2). Nous allons nous servir de QGIS pour la visualisation, il faut donc que celui ci soit aussi dans le bon CRS.

G        Pour importer votre raster, ouvrez les outils GRASS et dans l'onglet Arborescence des modules choisissez «File->Import->Import Raster-> r.in.gdal»Vous devez ensuite importer votre raster et préciser quel sera son nom dans le jeu de données GRASS. Si GRASS détecte correctement le raster, il crée une couche unique, si il s'agit d'une seule image,il va créer quatre couches contenants chacune les composantes RGB de l'image.

  1. Vous pouvez vérifier que l'import c'est bien passé en ouvrant le raster depuis QGIS avec l'option « ajouter une couche raster GRASS » dans les options de GRASS.

G        Pour la suite de la procédure, nous allons utiliser un raster exemple dont la représentation est la suivante:

 

  1. Nous allons utiliser la console GRASS. Dans l'arborescence des modules, ouvrez la console GRASS (le premier module, « shell. grass shell »).
  2. Il faut commencer par configurer les paramètres de la région de travail, entrez la ligne de commande:

g.region rast= « nom du raster importé dans le plan de travail »

G        Cette commande va associer les paramètres du raster comme paramètre de travail par défaut (coordonnées, résolution...)

G        Il est possible de visualiser les attributs d'une région en utilisant l'option -p, ce qui donne g.region -p

  1. On va ensuite rendre l'image floue pour que le changement de résolution produise moins d'erreur. Dans la console, entez :

r.neighbors input= « le nom du raster importé » output=« nom de la nouvelle carte » method=mode size=21

G        Dans cette ligne de commande, on a choisi comme méthode « mode » qui consiste a prendre la valeur la  plus fréquente.

G        L'attribut size lui correspond au nombre de pixel utilisé pour la grille. Cette valeur correspond au coté de la grille. Pour qu'on puisse la centrer sur une case il faut donc que cette valeur soit impaire. Pour ne pas rendre le calcul trop lourd, la valeur maximum de size est 25. Cependant il est possible d'appliquer plusieurs fois la méthode si nécessaire.

 

Il faut faire attention à ce que la valeur choisie pour rendre les pixels voisins homogènes entre eux soit cohérente avec le facteur de changement de résolution. Il n'est pas nécessaire de choisir une grille trop grande si le changement de résolution est faible. Au contraire si on rend l'image trop floue on risque de perdre en précision.

 

Pour mettre en évidence la transformation effectuée, on a exagéré la transformation sur l'exemple: il a maintenant cet aspect :

Résultat du floutage - On s'aperçoit que si la taille de la grille choisie pour rendre le raster flou est trop grande, on risque de perdre des informations (ici le fleuve en bas à gauche était trop fin, il  a été écrasé par les pixels environnants qui sont majoritaires).

 

  1. A partir de cette image, on va pouvoir effectuer le changement de résolution. Dans la console GRASS, il faut changer la résolution de travail par la commande

g.region res= « un entier correspondant à la nouvelle résolution »

  1. On peut ensuite procéder à la transformation de l'image en utilisant la commande

r.resample in= « nom de l'image rendue floue » out= « nom de l'image de sortie ».

  1. Vous pouvez alors importer l'image à la nouvelle résolution dans QGIS et vérifier la cohérence:

Résultat du changement de résolution : L'image en sortie possède beaucoup moins de pixels, elle conserve cependant un certain équilibre dans la répartition des  types de zones.

 


Mémo 13 - Auteur Q.Baduel, MAJ  07.01.13 par jlefur

retour aux mémos     retour au modèle     back to SimMasto home page   retour à la page d'accueil