Wygładzanie / ponowna interpolacja rastra za pomocą GDAL?

15

Krótko:
chcę zmienić rozdzielczość rastra i wygładzić szarą rampę, jak pokazano na poniższych zdjęciach. Preferowane jest użycie GDAL, PIL lub Numpy.

Opis: Za
pomocą High Performance Geostatistic Library dzielę punkty na rastry o rozdzielczości wyjściowej 20 metrów . Nie chcę zmieniać rozdzielczości wyjściowej, ponieważ czas interpolacji rośnie wykładniczo.
Przy tej rozdzielczości obraz wyjściowy jest brzydki (piksele i aliasy). Nie wiem, czy jest poprawny pod względem koncepcyjnym, ale chcę, aby obraz był gładszy jak w przykładzie poniżej. To coś w rodzaju „ponownej interpolacji” obrazu na obraz o lepszej rozdzielczości. Używam Pythona, więc moje preferencje to GDAL, Python Imaging Library lub Numpy. Odpowiedź może być teoretyczna, na przykład wskazanie nazwy algorytmu lub koncepcji tego rodzaju operacji.

Źródło:
wprowadź opis zdjęcia tutaj

Miejsce docelowe:
wprowadź opis zdjęcia tutaj

EDYCJA Wyniki z splajnem sześciennym gdalwarp:
wprowadź opis zdjęcia tutaj

Pablo
źródło
Nie osiągam tak dobrych rezultatów jak po obrazie opublikowanym przez gdalwarp. Czy możesz opublikować dokładne polecenie, którego użyłeś?
Grant Humphries

Odpowiedzi:

5

Użyj GDALReprojectImage , który jest dostępny w Pythonie:

from osgeo import gdal
help(gdal.ReprojectImage)

Do płynnej interpolacji użyj metod dwuliniowych lub sześciennych. Ta funkcja jest niewygodna, ponieważ nie przyjmuje argumentów słów kluczowych, dlatego musisz znaleźć pozycję:

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

Prawdopodobnie trudną częścią jest konfiguracja dst_ds, która musi mieć geotransformę podobną do src_ds, ale ze zmodyfikowanymi rozmiarami komórek.

Mike T.
źródło
+1. Nie jestem pewien, jaka jest jego metoda „sześcienna”. Jeśli jest to splajn sześcienny, prawdopodobnie byłby gładszy niż dwuliniowy; ale jeśli jest to splot sześcienny, będzie mniej gładki niż dwuliniowy. Splajn sześcienny byłby idealny.
whuber
1
@ whuber true, istnieją dwie opcje algorytmów „sześciennych” : GRA_CubicSpline(spróbuj tego najpierw) vs. GRA_Cubic(splot).
Mike T
0

Aby wygładzić zmiany, potrzebujesz filtra dolnoprzepustowego. Możesz napisać własny, używając GDAL, lub jeden używa GRASS. Nie próbowałem tego, ale oto przewodnik http://wiki.awf.forst.uni-goettingen.de/wiki/index.php/Exercise_31

Przed zastosowaniem filtra dolnoprzepustowego możesz najpierw próbkować w górę rastra, aby uzyskać lepszą rozdzielczość wyjściową.

myśli przestrzenne
źródło
1
Nie sądzę, że OP chce wygładzić warianty: w przeciwnym razie po co podejmować wysiłek krigingu w pierwszej kolejności? Wszystkie jego korzyści zostałyby utracone. Zamiast tego, jak sugerują zdjęcia, pytanie wymaga płynnej procedury ponownego próbkowania, aby stworzyć wersję już uzyskanych wyników w wyższej rozdzielczości (która jest inteligentnym i wydajnym sposobem na przyspieszenie krigingu).
whuber
-1

możesz użyć filtra ranga / mediana o promieniu = 5, tzn. rozmiar jądra = 11, (dla każdego kanału rgb).

yildirim
źródło