Reklasyfikacja rastra w R

Często w przetwarzaniu obrazów chcemy przypisać konkretnemu zakresowi wartości rastra jedną niepowtarzalną liczbę, na przykład przy tworzeniu różnego rodzaju masek. W teledetekcji taka metoda zamiany wartości pikseli na klasy nazywa się klasyfikacją progową. Przykładem takiego opracowania jest maska wód z zobrazowania satelitarnego, gdzie piksele reprezentujące zbiorniki przyjmują wartość 1. Pozostałe mają wartości 0.

Jak to zrobić w R? Nic prostszego. Najpierw wczytujemy zobrazowanie korzystając z funkcji raster w bibliotece raster. Ja skorzystam z zobrazowanie satelity Sentinel pozyskanego w kanale 8 (podczerwonym). Wyświetlamy wczytane zobrazowanie:

W programie GISowym zwektoryzowałem wcześniej cztery obszary, gdzie występują zbiorniki wodne. Wykorzystam tą warstwę do określenia wartości progowej dla maski. Wczytujemy utworzoną warstwę używając funkcji readOGR. Korzystając z funkcji extract odczytujemy wartości pikseli dla obszarów ze zbiornikami wodnymi i zapisujemy je do zmiennej ext:

Zmienna ext zawiera listę czterech wektorów z wartościami pikseli odczytanych dla poszczególnych obszarów:

Funkcja unlist zamieni listę na jeden wektor zawierający wartości pikseli dla wszystkich obszarów:

Policzmy średnią z wartości w ext:

Wartość średnia będzie naszym progiem. Reklasyfikujmy piksele obrazu zgodnie z założeniem, że wszystkie wartości poniżej średniej będą miały wartość 1. Pozostałe przyjmują wartość 0. Skorzystamy z funkcji reclassify. Dla funkcji tej musimy zdefiniować raster, który będziemy reklasyfikować oraz wektor zmiany wartości, który ma postać:

c(próg_lewy, próg_prawy, nowa_wartość, próg_lewy, próg_prawy, nowa_wartość, …)

Progami może być wartość nieskończona definiowana jako -Inf i Inf. Ostatecznie naszą maskę tworzymy używając wyrażenia:

Wyświetlamy wynik:

Otrzymaliśmy maskę zbiorników wodnych na podstawie zobrazowania satelitarnego wykonanego w bliskiej podczerwieni. Narzędziem możemy tworzyć dowolne maski różnego rodzaju danych rastrowych.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.

Translate using Google Translate»
Social media & sharing icons powered by UltimatelySocial

Podoba Ci się nasza strona? Odwiedź nasz profil