Raster mit GDAL glätten / reinterpolieren?

15

Kurz:
Ich möchte die Auflösung eines Rasters ändern und die graue Rampe wie im Bild unten gezeigt glätten. Bevorzugt werden GDAL, PIL oder Numpy verwendet.

Beschreibung:
Mit der High Performance Geostatistical Library kann ich Punkte in Raster mit einer Ausgabeauflösung von 20 Metern kriggen . Ich möchte die Ausgabeauflösung nicht ändern, da die Interpolationszeit exponentiell ansteigt.
Bei dieser Auflösung ist das Ausgabebild unschön (pixelig und mit Alias). Ich weiß nicht, ob es konzeptionell korrekt ist, aber ich möchte, dass das Bild glatter ist als im folgenden Beispiel. Es ist so etwas wie "Neuinterpolieren" des Bildes in eine bessere Auflösung. Ich verwende Python, daher sind meine Einstellungen GDAL, Python Imaging Library oder Numpy. Die Antwort könnte theoretisch sein, wie das Hervorheben des Algorithmusnamens oder des Konzepts dieser Art von Operation.

Quelle:
Bildbeschreibung hier eingeben

Ziel:
Bildbeschreibung hier eingeben

Ergebnisse mit GDALWARP Cubic Spline bearbeiten:
Bildbeschreibung hier eingeben

Pablo
quelle
Ich erhalte keine so guten Ergebnisse für das mit gdalwarp gepostete Nachher-Bild. Können Sie den genauen Befehl posten, den Sie verwendet haben?
Grant Humphries

Antworten:

5

Verwenden Sie GDALReprojectImage , das in Python verfügbar gemacht wird:

from osgeo import gdal
help(gdal.ReprojectImage)

Verwenden Sie für die glatte Interpolation bilineare oder kubische Methoden. Diese Funktion ist umständlich, da sie keine Schlüsselwortargumente benötigt. Daher müssen Sie die Position finden:

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

Wahrscheinlich ist der schwierige Teil die Einrichtung dst_ds, für die eine ähnliche Geotransformation erforderlich ist src_ds, jedoch mit geänderten Zellgrößen.

Mike T
quelle
+1. Ich bin nicht sicher, was seine "kubische" Methode ist. Wenn es sich um einen kubischen Spline handelt, ist er wahrscheinlich glatter als bilinear. Wenn es sich jedoch um eine kubische Faltung handelt, ist sie weniger glatt als bilinear. Ein kubischer Spline wäre etwa ideal.
whuber
1
@whuber wahr, es gibt zwei "kubische" Algorithmen- Optionen: GRA_CubicSpline(versuchen Sie dies zuerst) vs. GRA_Cubic(Faltung).
Mike T
0

Um die Schwankungen auszugleichen, benötigen Sie einen Tiefpassfilter. Sie können Ihre eigenen mit GDAL schreiben oder es gibt eine mit GRASS. Ich habe es nicht ausprobiert, aber hier ist eine Anleitung http://wiki.awf.forst.uni-goettingen.de/wiki/index.php/Exercise_31

Möglicherweise möchten Sie Ihr Raster zuerst aufrüsten, bevor Sie den Tiefpassfilter anwenden, um eine Ausgabe mit besserer Auflösung zu erhalten.

räumliche Gedanken
quelle
1
Ich glaube nicht, dass das OP die Unterschiede ausgleichen will. Warum sollte man sich sonst überhaupt bemühen, Kriging zu betreiben? Alle seine Vorteile würden verloren gehen. Stattdessen wird, wie auf den Bildern zu sehen ist, nach einem reibungslosen Resampling-Verfahren gefragt, um eine höher auflösende Version der bereits erzielten Ergebnisse zu erstellen (eine intelligente und effiziente Methode, um das Kriging zu beschleunigen).
Whuber
-1

Sie können einen Rang- / Medianfilter mit einem Radius von 5, dh einer Kernelgröße von 11 (für jeden RGB-Kanal) verwenden.

yildirim
quelle