Suavização / reinterpolação de varredura com GDAL?

15

Breve:
Quero alterar a resolução de uma varredura e suavizar a rampa cinza, como mostrado nas imagens abaixo. A preferência é usar GDAL, PIL ou Numpy.

Descrição:
estou transformando pontos em rasters com uma resolução de saída de 20 metros na Biblioteca Geoestatística de Alto Desempenho . Não quero alterar a resolução de saída porque o tempo de interpolação aumenta exponencialmente.
Com esta resolução, a imagem de saída é feia (pixelizada e com alias). Não sei se está conceitualmente correto, mas quero que a imagem seja mais suave, como no exemplo abaixo. É algo como 'reinterpolar' a imagem para uma melhor resolução. Estou usando python, então minhas preferências são GDAL, Python Imaging Library ou Numpy. A resposta pode ser teórica, como apontar o nome do algoritmo ou o conceito desse tipo de operação.

Fonte:
insira a descrição da imagem aqui

Destino:
insira a descrição da imagem aqui

Resultados de edição com spline cúbico gdalwarp:
insira a descrição da imagem aqui

Pablo
fonte
Não estou obtendo resultados tão bons quanto a imagem 'pós' que você postou com gdalwarp. Você pode postar o comando exato que você usou?
Grant Humphries

Respostas:

7

1) Da maneira mais difícil: com um pouco de codificação, é (relativamente) fácil implementar a interpolação bilinear para obter uma nova amostragem decente.

2) O caminho mais fácil: use o GDAL conforme explicado neste post anterior do GISSE , mas ao contrário (diminuindo o tamanho do pixel).

WolfOdrade
fonte
2
Funcionou. Os melhores resultados foram com spline cúbico. Eu publiquei os resultados acima. Obrigado.
Pablo
5

Use GDALReprojectImage , que é exposto no Python:

from osgeo import gdal
help(gdal.ReprojectImage)

Para uma interpolação suave, use métodos bilineares ou cúbicos. Essa função é incômoda, pois não aceita argumentos de palavras-chave; portanto, você precisa encontrar a posição:

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

Provavelmente a parte complicada é a configuração dst_ds, que precisa ter uma geotransformação semelhante src_ds, mas com tamanhos de célula modificados.

Mike T
fonte
+1. Não sei ao certo qual é o método "cúbico". Se for um spline cúbico, provavelmente seria mais suave do que bilinear; mas se for convolução cúbica, será menos suave que bilinear. Um spline cúbico seria o ideal.
whuber
1
@whuber verdade, existem duas opções de algoritmos "cúbicos" : GRA_CubicSpline(tente isso primeiro) vs. GRA_Cubic(convolução).
Mike T
0

Para suavizar as variações, você precisa de um filtro passa-baixo. Você pode escrever o seu próprio usando GDAL, ou há um usando GRASS. Eu não tentei, mas aqui está um guia http://wiki.awf.forst.uni-goettingen.de/wiki/index.php/Exercise_31

Você pode fazer uma amostra de sua varredura primeiro antes de aplicar o filtro passa-baixo para obter uma saída com melhor resolução.

pensamentos espaciais
fonte
1
Eu não acho que o OP quer suavizar as variações: caso contrário, por que ir ao esforço de kriging em primeiro lugar? Todos os seus benefícios seriam perdidos. Em vez disso, como as imagens sugerem, a pergunta pede um procedimento de reamostragem suave para criar uma versão em alta resolução dos resultados já obtidos (que é uma maneira inteligente e eficiente de acelerar o krigagem).
whuber
-1

você pode usar um filtro de classificação / mediana com raio = 5, ou seja, tamanho do tamanho do kernel = 11 (para cada canal rgb).

yildirim
fonte