¿Alisar / reinterpolar ráster con GDAL?

15

Corto:
quiero cambiar la resolución de un ráster y suavizar la rampa gris como se muestra en las imágenes a continuación. La preferencia es usar GDAL, PIL o Numpy.

Descripción:
estoy formando puntos en rásteres con una resolución de salida de 20 metros con la Biblioteca geoestadística de alto rendimiento . No quiero cambiar la resolución de salida porque el tiempo de interpolación aumenta exponencialmente.
Con esta resolución, la imagen de salida es fea (pixelada y con alias). No sé si es conceptualmente correcto, pero quiero que la imagen sea más suave como en el siguiente ejemplo. Es algo así como 'reinterpolar' la imagen en una mejor resolución. Estoy usando Python, así que mis preferencias son GDAL, Python Imaging Library o Numpy. La respuesta podría ser teórica, como señalar el nombre del algoritmo o el concepto de este tipo de operación.

Fuente:
ingrese la descripción de la imagen aquí

Destino:
ingrese la descripción de la imagen aquí

EDITAR resultados con spline cúbico gdalwarp:
ingrese la descripción de la imagen aquí

Pablo
fuente
No obtengo resultados tan buenos como la imagen 'después' que publicaste con gdalwarp. ¿Puedes publicar el comando exacto que usaste?
Grant Humphries

Respuestas:

5

Use GDALReprojectImage , que se expone en Python:

from osgeo import gdal
help(gdal.ReprojectImage)

Para una interpolación suave, use métodos bilineales o cúbicos. Esta función es incómoda, ya que no toma argumentos de palabras clave, por lo tanto, necesita encontrar la posición:

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

Probablemente, la parte difícil es la configuración dst_ds, que necesita tener una geotransformada similar src_ds, pero con tamaños de celda modificados.

Mike T
fuente
+1. No estoy seguro de cuál es su método "cúbico". Si es una spline cúbica, probablemente sería más suave que bilineal; pero si es una convolución cúbica, será menos suave que la bilineal. Una spline cúbica sería ideal.
whuber
1
@whuber cierto, hay dos opciones de algoritmos "cúbicos" : GRA_CubicSpline(intente esto primero) vs. GRA_Cubic(convolución).
Mike T
0

Para suavizar las variaciones, necesita un filtro de paso bajo. Podrías escribir el tuyo usando GDAL, o hay uno usando GRASS. No lo he probado, pero aquí hay una guía http://wiki.awf.forst.uni-goettingen.de/wiki/index.php/Exercise_31

Es posible que desee muestrear su ráster primero antes de aplicar el filtro de paso bajo para obtener una mejor resolución de salida.

pensamientos espaciales
fuente
1
No creo que el OP quiera suavizar las variaciones: de lo contrario, ¿por qué hacer el esfuerzo de kriging en primer lugar? Todos sus beneficios se perderían. En cambio, como sugieren las imágenes, la pregunta requiere un procedimiento de muestreo suave para crear una versión de mayor resolución de los resultados ya obtenidos (que es una forma inteligente y eficiente de acelerar el kriging).
whuber
-1

puede usar un filtro de rango / mediana con radio = 5, es decir, tamaño de núcleo = 11, (para cada canal rgb).

yildirim
fuente