Lissage / réinterpolation de raster avec GDAL?

15

Courte:
je veux changer la résolution d'un raster et lisser la rampe grise comme indiqué dans les images ci-dessous. La préférence est d'utiliser GDAL, PIL ou Numpy.

Description:
Je krige des points dans des rasters avec une résolution de sortie de 20 mètres avec la bibliothèque géostatistique haute performance . Je ne veux pas changer la résolution de sortie car le temps d'interpolation augmente de façon exponentielle.
Avec cette résolution, l'image de sortie est moche (pixelisée et aliasée). Je ne sais pas si elle est conceptuellement correcte mais je veux que l'image soit plus lisse comme dans l'exemple ci-dessous. C'est quelque chose comme «réinterpoler» l'image en une meilleure résolution. J'utilise python donc mes préférences sont GDAL, Python Imaging Library ou Numpy. La réponse pourrait être théorique, comme indiquer le nom de l'algorithme ou le concept de ce type d'opération.

La source:
entrez la description de l'image ici

Destination:
entrez la description de l'image ici

MODIFIER les résultats avec la spline cubique gdalwarp:
entrez la description de l'image ici

Pablo
la source
Je n'obtiens pas de résultats aussi bons que l'image «après» que vous avez publiée avec gdalwarp. Pouvez-vous publier la commande exacte que vous avez utilisée?
Grant Humphries

Réponses:

5

Utilisez GDALReprojectImage , qui est exposé en Python:

from osgeo import gdal
help(gdal.ReprojectImage)

Pour l'interpolation lisse, utilisez des méthodes bilinéaires ou cubiques. Cette fonction est maladroite, car elle ne prend pas d'arguments de mots clés, vous devez donc trouver la position:

gdal.ReprojectImage(src_ds, dst_ds, None, None, gdal.GRA_Bilinear)

La partie la plus délicate est probablement la mise en place dst_ds, qui doit avoir une géotransformation similaire à src_ds, mais avec des tailles de cellule modifiées.

Mike T
la source
+1. Je ne sais pas quelle est sa méthode "cubique". S'il s'agit d'une spline cubique, elle serait probablement plus lisse que bilinéaire; mais s'il s'agit d'une convolution cubique, elle sera moins lisse que bilinéaire. Une spline cubique serait à peu près idéale.
whuber
1
@whuber true, il existe deux options d' algorithmes "cubiques" : GRA_CubicSpline(essayez d'abord) vs GRA_Cubic(convolution).
Mike T
0

Pour atténuer les variations, vous avez besoin d'un filtre passe-bas. Vous pouvez écrire le vôtre en utilisant GDAL, ou il y en a un avec GRASS. Je ne l'ai pas essayé, mais voici un guide http://wiki.awf.forst.uni-goettingen.de/wiki/index.php/Exercise_31

Vous voudrez peut-être suréchantillonner votre raster avant d'appliquer le filtre passe-bas pour obtenir une meilleure résolution de sortie.

pensées spatiales
la source
1
Je ne pense pas que l'OP veuille atténuer les variations: sinon, pourquoi faire l'effort de krigeage en premier lieu? Tous ses avantages seraient perdus. Au lieu de cela, comme les images le suggèrent, la question demande une procédure de rééchantillonnage fluide pour créer une version à plus haute résolution des résultats déjà obtenus (ce qui est un moyen intelligent et efficace d'accélérer le krigeage).
whuber
-1

vous pouvez utiliser un filtre de rang / médiane avec radius = 5, c'est-à-dire la taille du noyau = 11, (pour chaque canal rgb).

yildirim
la source