Klastrowanie rastrowe przy użyciu QGIS

10

Szukam sposobu na przekształcenie sklasyfikowanego rastra w wielokąty na podstawie klastrów przestrzennych w każdej klasie. Aby klastry mogły zostać uznane za prawidłowe, muszą składać się z minimalnego odsetka komórek z jednej z klas.

Na przykład: Obszar składający się z 70% (lub więcej) komórek klasy „1” będzie uważany za klaster klasy „1”, nawet jeśli obszar ten zostanie pomieszany z 30% komórek należących do innych klas. Analiza grupowania powinna zatem opierać się na odległości między komórkami tej samej klasy.

Inną opcją może być oparcie klastrowania na minimalnej liczbie komórek w danej klasie wraz z definicją maksymalnego obszaru wyszukiwania.

Na przykład: W obrębie określonego obszaru powinno być 100 komórek „klasy 1”, aby można go było uznać za klaster.  

Większość narzędzi związanych z klastrowaniem wydaje się działać tylko w przypadku wektorów. Przyjrzałem się analizie klastrów narzędzia SAGA, ale tak naprawdę nie pasowało to do mojego celu. Jakieś pomysły na rozwiązanie tego lub które inne narzędzia mogą być pomocne?

Spiran
źródło
Możesz przekonwertować raster na wektor i użyć narzędzi do grupowania wektorów.
csk
To jest opcja, ale myślę, że o wiele łatwiej jest przeprowadzić analizę w formacie rastrowym, jeśli to możliwe. Konwersja na wektor prawdopodobnie spowodowałaby wygenerowanie wielokątów, w których wiele szczegółów gubiłoby się w połączeniu komórek rastrowych lub zbyt wiele punktów, które można by obsłużyć (duży zestaw danych).
Spiran
3
Wiem, że to nie jest rozwiązanie QGIS, ale czy możesz użyć Pythona lub R, aby wymyślić funkcję sąsiedztwa, aby utworzyć nowy raster, w którym patrzy na każdą komórkę i jeśli> 70% komórek w sąsiedztwie należy do klasy to ta komórka zostaje przeklasyfikowana do tej klasy?
Liam G,
To na pewno zadziała, dzięki! Jestem nowy w Pythonie, ale warto spróbować.
Spiran

Odpowiedzi:

5

Jeśli wolisz rozwiązać ten problem w „logice rastrowej”, możesz rozważyć kilka filtrów. Najlepszy wybór będzie zależeć od przestrzennego rozmieszczenia pikseli każdej klasy wewnątrz wartości „tła”, ale oto dwa potencjalne rozwiązania:

jeśli łatki, które chcesz usunąć, są stosunkowo duże, powinieneś użyć „sita” (raster> analiza> sito w QGIS 3.2, który jest oparty na gdal_sieve.py).

Skrypt gdal_sieve.py usuwa wielokąty rastrowe mniejsze niż podany rozmiar progowy (w pikselach) i zastępuje je wartością w pikselach największego sąsiedniego wielokąta. Wynik można zapisać z powrotem w istniejącym paśmie rastrowym lub skopiować do nowego pliku.

Jeśli masz coś w rodzaju efektu „soli i pieprzu” (wiele izolowanych pikseli różnych klas, ale tylko kilka pikseli na małe ścieżki), powinieneś użyć filtra większości (np. Przechodząc do dodatkowych narzędzi z GRASS> raster> r. sąsiedzi> wybierz opcję „Tryb”). Pamiętaj, że ten filtr (nieznacznie) wpłynie na twoje granice.

r.neighbors - Sprawia, że ​​każda wartość kategorii komórek jest funkcją wartości kategorii przypisanych do otaczających ją komórek i zapisuje nowe wartości komórek w wyjściowej warstwie mapy rastrowej

W narzędziach SAGA (SAGA> filtr rastrowy) znajdziesz te same filtry (Filtr większości, klasy przesiewania) i inne (morfologia)

radouxju
źródło
Tak właściwie to rozwiązałem. Zasadniczo za pomocą narzędzia do analizy sąsiedztwa trawy wraz z niektórymi obliczeniami z boku. Zapomniałem opublikować rozwiązanie, wielkie dzięki za wpisane radouxju.
Spiran