Mapa pokrycia terenuze zdjęć z UAV i satelity

Program dzieli zdjęcie na obiekty, uczy się Twoich klas z kilkunastu przykładów, a na końcu uczciwie mówi, ile ta mapa jest warta.

Zdjęcie, obiekty, mapa klas. Kliknij, aby zobaczyć jeszcze raz.

Część 1 z 4

Zacznij pracę

Pobierz wersję dla siebie i sprawdź, czy Twoje zdjęcia i komputer się nadają.

Trzy wersje, jeden silnik

Każda liczy dokładnie to samo. Wybierz tę, która pasuje do Twojej pracy.

Wtyczka QGIS
gdy chcesz widzieć, co się dzieje

Przykłady wskazujesz klikając po mapie. Tylko tutaj jest ocena dokładności: losowanie punktów, macierz błędów i powierzchnie z przedziałami ufności.

Program dla Windows
gdy nie chcesz instalować QGIS

Okno z dwiema zakładkami: nauka i klasyfikacja całego folderu. Instalator nie wymaga praw administratora.

Wiersz poleceń
gdy zdjęć są setki

Uczysz model raz, puszczasz go na folder. Daje się wpiąć w skrypt i wznowić po przerwaniu. Jak policzyć cały folder.

Instalacja wtyczki: wtyczka jest w oficjalnym repozytorium wtyczek QGIS. W QGIS otwórz Wtyczki, Zarządzanie wtyczkami, wyszukaj „GeoAI Klasyfikator” i kliknij Zainstaluj wtyczkę. QGIS sam powiadomi o nowych wersjach. Możesz też pobrać plik ZIP i wybrać Zainstaluj z pliku ZIP. Ta sama wtyczka z interfejsem angielskim to GeoAI Classification; obie liczą identycznie.

Ostrzeżenie przeglądarki przy pliku programu oznacza brak podpisu wydawcy, a nie wykrytego wirusa. Pliki nie są jeszcze podpisane; projekt przygotowuje wniosek do programu SignPath Foundation (Free code signing provided by SignPath.io, certificate by SignPath Foundation); zasady opisuje Code signing policy. Sumy kontrolne SHA-256 wszystkich plików są w najnowszym wydaniu.

Co jest potrzebne

RzeczKonieczna?Po co
Zdjęcie RGBtak Ortomozaika z drona, zdjęcie lotnicze albo scena satelitarna. Trzy kanały wystarczą.
Przykładytak Kilkanaście miejsc na klasę, które rozpoznajesz na pewno.
Model wysokości (NMPT)nie, ale… Bez niego 19 cech, z nim 24. To on odróżnia dach od asfaltu i drzewo od trawnika. Jeśli masz, użyj.

Wiele zdjęć? Nie łącz ich, wskaż folder

Dziesiątki albo setki nalotów liczysz jednym poleceniem, bez sklejania ich w mozaikę.

Nie musisz łączyć zdjęć w jedną mozaikę. Model uczysz raz, na jednym reprezentatywnym zdjęciu. Potem wskazujesz folder, a program bierze zdjęcia po kolei, każde liczy osobno i zapisuje osobną mapę. Na końcu dostajesz zbiorczy raport z powierzchnią każdej klasy na każdym zdjęciu.

Jeden model, wiele zdjęć: każde zdjęcie z folderu jest klasyfikowane osobno, a wyniki trafiają do folderu z mapami.
  1. Naucz model raz Na jednym zdjęciu, które dobrze reprezentuje całą serię. W wierszu poleceń służy do tego polecenie ucz, w programie dla Windows zakładka nauki. Model zapisuje się do pliku .geoai.
  2. Wskaż folder ze zdjęciami W wierszu poleceń polecenie klasyfikuj --folder, w programie dla Windows zakładka klasyfikacji całego folderu. Program może szukać zdjęć także w podfolderach.
  3. Odbierz wyniki Dla każdego zdjęcia mapę GeoTIFF z plikiem stylu .qml, a w folderze wyników plik raport.csv (średnik jako separator, kodowanie pod Excela) z powierzchnią każdej klasy na każdym zdjęciu.
python geoai.py ucz --zdjecie naloty/nalot_01.tif --probki przyklady.gpkg ^
    --nmpt nmpt/nalot_01_nmpt.tif --model moj_model.geoai

python geoai.py klasyfikuj --folder naloty --model moj_model.geoai ^
    --wyjscie mapy --nmpt-folder nmpt
Wszystkie opcje klasyfikacji folderu
OpcjaCo robi
--rekurencyjnieszuka zdjęć także w podfolderach
--nmpt-folderfolder z modelami wysokości; do zdjęcia nalot_01.tif program dobiera plik nalot_01_nmpt.tif (przyrostek zmienisz opcją --nmpt-przyrostek)
--mmu 10usuwa płaty mniejsze niż 10 m²
--nadpisujliczy ponownie także zdjęcia, które mają już wynik
--przerwij-na-bledziezatrzymuje się przy pierwszym problemie; bez tej opcji program zgłasza błąd przy danym zdjęciu i liczy dalej

Przerwane? Uruchom jeszcze raz

Bez opcji --nadpisuj program pomija zdjęcia, które mają już wynik, więc przerwany przebieg po prostu wznawiasz tym samym poleceniem.

Jeden model, podobne zdjęcia

Model działa dla zdjęć podobnych do tych, na których się uczył: ta sama kamera, podobna pora roku i oświetlenie. Nalot czerwcowy i wrześniowy to dwa modele.

Klasyfikację całych folderów mają program wiersza poleceń i program dla Windows. Wtyczka QGIS pracuje na jednym zdjęciu naraz; wszystkie trzy wersje liczą tym samym silnikiem.

Komputer i szybkość pracy

Co jest potrzebne, co spowalnia obliczenia i jak przyspieszyć pracę bez kupowania nowego komputera.

Wymagania

WersjaCzego potrzebuje
Wtyczka QGISQGIS 3.22 lub nowszy i nic więcej
Program dla Windows64-bitowy Windows; instalator (około 96 MB) ma w środku wszystkie biblioteki, także te przyspieszające
Wiersz poleceńPython 3.9 lub nowszy oraz biblioteki numpy, rasterio i fiona; zalecane także scikit-image, scikit-learn i scipy
Karta graficznaniepotrzebna: program nie używa sieci neuronowych

Pamięć to główne ograniczenie. Na każdy piksel siatki roboczej obliczenia zajmują około 100 bajtów, więc największa dopuszczalna siatka, 15 milionów pikseli, potrzebuje około 1,5 GB pamięci na same obliczenia, poza tym, co zajmują system i QGIS. Większej siatki program nie przyjmie i podpowie grubszą rozdzielczość roboczą.

Co decyduje o czasie obliczeń
CzynnikDlaczego
Liczba pikseli siatki roboczej każdy krok przechodzi przez wszystkie piksele; dwa razy grubsza rozdzielczość to cztery razy mniej pikseli
Liczba obiektów fakturę, kształt i otoczenie mierzy się osobno dla każdego obiektu; mniejsze obiekty oznaczają więcej obiektów
Biblioteki przyspieszające z scikit-image i scikit-learn obliczenia idą kilkakrotnie szybciej; bez scikit-image praktyczna granica to około pół miliona pikseli
Model wysokości (NMPT) dochodzi 5 cech i szacowanie powierzchni gruntu filtrem morfologicznym
Dodatki sprawdzanie rozróżnialności klas, dociąganie po zieloności i usuwanie drobnych płatów to osobne kroki
Procesor Random Forest ze scikit-learn rozkłada drzewa na wszystkie rdzenie procesora

Jak przyspieszyć pracę bez nowego komputera

Dobierz rozdzielczość do celu

Na pola, zagony i dachy wystarcza siatka 5 do 10 cm. Zdjęcie z drona o pikselu 2 cm policzone na siatce 8 cm ma 16 razy mniej pikseli. Najdrobniejszej siatki, 3 do 5 cm, potrzebujesz dopiero do pojedynczych drzew i krzewów.

Próbuj na fragmencie

We wtyczce zaznacz liczenie tylko tego, co widać na ekranie. Ustawienia i przykłady dopracujesz w kilka chwil, a całe zdjęcie policzysz na końcu.

Użyj bibliotek przyspieszających

Program dla Windows ma je w środku. We wtyczce wystarczy przycisk Zainstaluj biblioteki przyspieszające w kroku 1 i ponowne uruchomienie QGIS. Do wiersza poleceń doinstaluj scikit-image, scikit-learn i scipy. Obliczenia przyspieszą, a wyniki będą zgodne z implementacją wzorcową; do badań naukowych i tak zalecana jest pełna konfiguracja.

Duże obiekty tam, gdzie można

Obiekt ma być mniejszy od najwęższej rzeczy, którą chcesz pokazać, ale nie mniejszy. Przy kartowaniu pól obiekt 20 m² zamiast 5 m² to cztery razy mniej obiektów do zmierzenia.

Licz w tle i na raty

Wiele zdjęć puść jako klasyfikację całego folderu, na przykład na noc. Przerwany przebieg wznowisz tym samym poleceniem, gotowe zdjęcia zostaną pominięte.

Za duża mozaika? Podziel ją

Gdy jedno zdjęcie przekracza limit nawet przy rozsądnej rozdzielczości, podziel je na kafle (na przykład narzędziem GDAL Retile w QGIS) i policz folder kafli jednym modelem.

Ucz raz, stosuj wiele razy

Nauka trwa sekundy, ale przygotowanie przykładów trwa. W programie wiersza poleceń i w programie dla Windows model zapisuje się do pliku .geoai, który stosujesz do kolejnych podobnych zdjęć bez ponownego uczenia.

Zwolnij pamięć

Zamknij inne programy, zwłaszcza przeglądarkę z wieloma kartami. Przy pracy blisko limitu pamięci to bywa różnica między wynikiem a komunikatem o braku pamięci.

Zdjęcia z satelity Sentinel-2

Bez drona też się da: 10 metrów, cała Ziemia, za darmo.

Sentinel-2 to satelity Europejskiej Agencji Kosmicznej (Drusch i in., 2012). Fotografują to samo miejsce co kilka dni, a archiwum sięga 2015 roku. Piksel ma 10 metrów, więc jeden piksel to kawałek terenu o powierzchni 100 m². To za mało na pojedyncze drzewo, ale w sam raz na pola, lasy, wody i zabudowę.

Najczęstsza pułapka. Program czyta trzy pierwsze kanały pliku jako czerwień, zieleń i błękit. W surowej scenie Sentinel-2 kanał pierwszy to aerozol, drugi niebieski, a trzeci zielony; czerwieni wśród nich nie ma wcale. Program nie zgłosi błędu, tylko policzy coś, co wygląda jak mapa, a jest pomyłką. Dlatego zawsze podawaj gotową kompozycję RGB.

Jak pobrać gotowy RGB

Najprościej wtyczką Pobieranie Sentinel (wersja angielska: Sentinel Download) tego samego autora. Pobiera zdjęcia Sentinel-2 (poziomy L2A i L1C) oraz Sentinel-1 (GRD) z Copernicus Data Space i od razu składa gotowe produkty, w tym kompozycję RGB z kanałami we właściwej kolejności.

  1. Zainstaluj wtyczkę QGIS, menu Wtyczki, Zarządzanie wtyczkami, wpisz Pobieranie Sentinel i kliknij Zainstaluj.
  2. Wskaż obszar Wczytaj albo narysuj warstwę z obszarem, który Cię interesuje.
  3. Ustaw daty i chmury Otwórz wtyczkę, wskaż obszar, ustaw zakres dat i największe dopuszczalne zachmurzenie.
  4. Wybierz produkt RGB Z listy produktów wybierz RGB, pobierz plik i poczekaj.
  5. Podaj plik klasyfikatorowi Powstały plik RGB wskaż w polu Zdjęcie RGB.

Co zmienia się przy 10 metrach

SprawaDronSentinel-2
Piksel2 do 10 cm10 m
Co da się rozpoznaćpojedyncze drzewa, miedze, fragmenty dachuduże formy: pole, las, zabudowa, woda
Model wysokościzwykle jest (NMPT z nalotu) zwykle go nie ma, więc 19 cech zamiast 24
Wielkość obiektumetry kwadratowe kilkadziesiąt pikseli to już tysiące metrów kwadratowych

Patrz na chmury

Scena z 40 procentami chmur bywa bezużyteczna, nawet jeśli Twój fragment akurat wyszedł czysto, bo na ziemi zostają cienie chmur.

Osobny model dla satelity

Model nauczony na zdjęciach z drona nie nadaje się do Sentinela i odwrotnie. Model działa dla danych podobnych do tych, na których się uczył, więc dla scen satelitarnych ucz go od nowa.

Część 2 z 4

Jak to działa

Dlaczego program pracuje na obiektach i jak uczy się klas z Twoich przykładów.

Dlaczego obiekty, a nie piksele

Na tym stoi cała metoda, więc warto zrozumieć ją raz.

Klasyczna klasyfikacja patrzy na każdy piksel osobno. Piksel wie tylko, jaki ma kolor, a to za mało, żeby odróżnić szary dach od szarego asfaltu. Efektem jest mapa zasypana pojedynczymi kropkami.

Tutaj zdjęcie najpierw tniemy na obiekty: grupy sąsiadujących pikseli o podobnym kolorze. Taki obiekt to kawałek pola, fragment dachu, korona drzewa. I on wie o sobie znacznie więcej: jaki ma kolor, jaką fakturę, jaki kształt, jak wysoko leży i co go otacza.

1 · Zdjęcie piksel zna tylko swój kolor 2 · Obiekty kolor + faktura + kształt + wysokość 3 · Mapa grunt uprawa trawa droga bez pojedynczych kropek
Od zdjęcia do mapy. Klasyfikujemy obiekty, nie piksele, dlatego mapa nie jest „zaśmiecona”.

Co program mierzy dla każdego obiektu

Dziewiętnaście liczb z samego zdjęcia, dwadzieścia cztery, jeśli dołożysz model wysokości. To one, a nie obrazek, trafiają do klasyfikatora.

Kolor: 7 liczb

Średnia i zmienność czerwieni, zieleni i niebieskiego oraz jasność. Poszarpana korona ma inną zmienność niż gładki dach.

Zieleń: 3 liczby

ExG (Woebbecke i in., 1995), VARI (Gitelson i in., 2002), NGRDI (Hunt i in., 2005). Liczone na udziałach barw, więc liść w cieniu i w słońcu wypadają podobnie. Zastępują NDVI, którego kamery dronowe nie dają.

Faktura: 4 liczby

Jak bardzo sąsiednie piksele różnią się od siebie. Tym odróżnisz koronę drzewa od blachy dachowej w tym samym kolorze.

Kształt: 4 liczby

Powierzchnia, obwód, okrągłość i wypukłość. Długa, wąska działka to co innego niż zwarty kwadrat.

Otoczenie: 1 liczba

Jasność obiektu na tle tych, które go dotykają. Rów albo luka w drzewostanie wychodzą ciemniejsze niż wszystko dokoła.

Wysokość: 5 liczb

Z modelu NMPT: wysokość, jej zmienność, nachylenie oraz, co najważniejsze, wysokość nad gruntem. Dach kontra asfalt, drzewo kontra trawnik.

Dlaczego nie ma NDVI. Zwykłe kamery dronowe rejestrują tylko czerwień, zieleń i błękit, a podczerwieni nie widzą wcale. Dlatego pracujemy wskaźnikami z zakresu widzialnego, fakturą, kształtem i wysokością. W praktyce wystarczają.

Jak program się uczy

Cały algorytm na jednym małym obrazku. Animacja liczy naprawdę, a nie odtwarza nagrania.

Zdjęcie

Obrazek ma 96 na 64 piksele i pięć rodzajów terenu. Animacja używa tych samych kroków co program, w uproszczeniu: liczy 10 z 19 cech (barwę i zieleń), a „operatora”, który wskazuje przykłady, udaje losowanie obiektów o znanej klasie. Liczby w panelu pochodzą z tego obrazka, nie z prawdziwych zdjęć.

Algorytm krok po kroku, ze wszystkimi ustawieniami
  1. Wczytanie i wygładzenie Program czyta trzy pierwsze kanały zdjęcia jako czerwień, zieleń i błękit i przelicza jasności na zakres od 0 do 1. Przed podziałem wygładza obraz filtrem Gaussa (σ = 2,5), żeby szum matrycy i drobna faktura nie tworzyły sztucznych obiektów.
  2. Podział na obiekty metodą SLIC (Achanta i in., 2012) Na zdjęciu rozmieszcza się regularną siatkę zarodków. Każdy piksel trafia do najbliższego zarodka, przy czym odległość łączy różnicę barwy w przestrzeni CIELAB z odległością w terenie. Zarodki przesuwają się do środka swoich pikseli i całość powtarza się 10 razy. Zwartość (domyślnie 0,15) decyduje, czy granice idą za barwą, czy za regularną siatką. Na koniec drobne resztki są dołączane do sąsiadów, tak żeby każdy obiekt był jednym płatem.
  3. Pomiar cech Każdy obiekt dostaje wektor liczb: 19 cech barwy, zieloności (Gitelson i in., 2002; Hunt i in., 2005; Woebbecke i in., 1995), faktury z macierzy współwystąpień poziomów szarości (Haralick i in., 1973), kształtu i otoczenia, a z modelem wysokości 24. Od tej chwili klasyfikator nie patrzy już na zdjęcie, tylko na te liczby. Cech nikt nie skaluje, bo Random Forest dzieli po progach, a nie po odległościach.
  4. Przykłady i sprawdzenie rozróżnialności Wskazujesz przykłady klas; obiekt, w którym leży przykład, dostaje jego klasę. Zanim Random Forest czegokolwiek się nauczy, program liczy dla każdej pary klas odległość Jeffriesa i Matusity w skali od 0 do 2, z walidacją krzyżową na pięciu częściach, i pokazuje, które cechy najbardziej je różnią. Ostrzega też, gdy najliczniejsza klasa ma ponad pięć razy więcej przykładów niż najrzadsza.
  5. Uczenie klasyfikatora Random Forest (Belgiu i Drăguţ, 2016; Breiman, 2001) Powstaje 100 drzew decyzyjnych. Każde uczy się na losowej próbie przykładów, losowanej ze zwracaniem, a w każdym węźle wybiera najlepsze pytanie „czy cecha X jest mniejsza od progu?” spośród losowo wybranych cech, których liczba to część całkowita z √p (4 zarówno przy 19, jak i przy 24 cechach). Progi dobiera algorytm według kryterium Giniego (Breiman i in., 2017), nie człowiek. Ziarno losowe jest stałe (42), więc te same dane dają zawsze ten sam model.
  6. Głosowanie i pewność Każde drzewo prowadzi obiekt przez swoje pytania i zwraca rozkład klas z liścia, w którym obiekt wylądował. Rozkłady ze 100 drzew są uśredniane. Obiekt dostaje klasę o największym udziale, a ten udział zapisuje się jako pewność decyzji. Obiekty, w których zwycięska klasa zebrała mniej niż połowę głosów, program liczy i zgłasza.
  7. Pętla poprawiania Pierwsza mapa służy do znalezienia rodzajów pomyłek. Dokładasz kilka przykładów tam, gdzie Random Forest się waha, uczysz go od nowa i klasyfikujesz ponownie. Zwykle dwie, trzy rundy dają największy przyrost. Nauczony model zapisuje się do pliku .geoai i można go stosować do kolejnych, podobnych zdjęć.

Wzory, wszystkie stałe i literaturę opisuje plik UWARUNKOWANIA_NAUKOWE.md, rozdziały 3, 5 i 6.

Część 3 z 4

Krok po kroku

Od podziału zdjęcia przez naukę po ocenę dokładności mapy.

1Podział na obiekty

Jedno ustawienie decyduje o wszystkim.

Wielkość obiektu to najważniejsza decyzja w całej pracy. Zasada jest jedna i prosta:

Obiekt musi być mniejszy niż najwęższa rzecz, którą chcesz pokazać na mapie.

Za duży obiekt zlewa dwa rodzaje terenu w jeden, a tego nie naprawi już żaden klasyfikator. Za mały daje więcej klikania bez zysku i dłuższe liczenie.

za duży obiekt leży na dwóch rodzajach terenu naraz w sam raz granice obiektów pokrywają się z granicami w terenie za mały działa, ale dłużej liczy i więcej klikania
Żółte linie to granice obiektów. Po lewej problem, pośrodku cel, po prawej tylko strata czasu.

Od czego zacząć

Co kartujeszRozdzielczość robocza (m) Wielkość obiektu
Pola, zagony, dachy0,05–0,105–20 m²
Pojedyncze drzewa, krzewy0,03–0,052–5 m²
Luki w drzewostanie, korony0,10–0,2510–30 m²
Duże naloty, setki hektarów0,20–0,2520–50 m²

Zanim policzysz wszystko: we wtyczce zaznacz „Policz tylko to, co widać na ekranie”, przybliż się do charakterystycznego fragmentu i dobierz wielkość obiektu na nim. Oszczędzi Ci to kwadransów czekania.

Po podziale obejrzyj wynik i sprawdź dwie rzeczy: czy żaden obiekt nie leży jednocześnie na dwóch różnych rodzajach terenu (to problem: zmniejsz obiekty) i czy jednolita łąka nie rozsypała się na setki drobin (to już tylko niewygoda, można z tym żyć).

2Przykłady

Tu, a nie w ustawieniach, rozstrzyga się jakość mapy.

Dodajesz klasy i pokazujesz programowi, co jest czym. We wtyczce klikasz obiekty na mapie, w pozostałych wersjach rysujesz poligony w QGIS i zapisujesz je do pliku z kolumną klasa.

Rozrzuć po całym zdjęciu

Nie w jednym rogu. Światło, cień i wilgotność gleby zmieniają się z miejsca na miejsce, a model uczy się tego, co mu pokażesz.

Pokaż każdą odmianę

„Grunt odkryty” to i świeżo zaorana ziemia, i udeptana ścieżka, i sucha skarpa. Jeśli pokażesz tylko jedną, resztę program weźmie za coś innego.

Tylko to, co pewne

Jeden błędny przykład uczy błędnej reguły. Obiekt na granicy dwóch klas lepiej pominąć; program zresztą sam go odrzuci i powie o tym.

Ile przykładów? Na start kilkanaście na klasę. Potem i tak będziesz dokładał i jest to normalny tok pracy, a nie oznaka, że coś poszło źle.

Ile klas? Na początek cztery do sześciu. Każda dodana klasa to nowa para do rozróżnienia, a par przybywa szybciej niż klas: przy sześciu klasach jest ich już piętnaście. Lepsze cztery klasy dobrze rozdzielone niż dziesięć pomieszanych.

3Nauka i poprawianie

Pierwsza mapa nigdy nie jest dobra. To nie błąd, to metoda.

Najpierw sprawdź, czy klasy da się rozróżnić

Zanim zainwestujesz w klikanie, program policzy, jak bardzo różnią się Twoje przykłady, para po parze. Skala od 0 do 2:

WynikCo oznaczaCo zrobić
powyżej 1,9klasy wyraźnie inne nic, jedź dalej
1,7 – 1,9znośnie, będą pomyłki dołóż przykładów tej parze
poniżej 1,7te klasy się zleją dołóż przykładów albo połącz je w jedną

Program pokaże też, która cecha dzieli każdą parę najmocniej. Jeśli „trawa” i „grunt odkryty” rozchodzą się głównie na zieloności, to dobry znak. Jeśli na powierzchni obiektu, to przypadek, nie prawidłowość.

Pętla poprawiania

  1. Zrób mapę Pierwsza wersja z kilkunastoma przykładami na klasę.
  2. Przejrzyj ją całą Nie tylko najbardziej rzucającą się w oczy plamę. Przewiń całe zdjęcie.
  3. Wypisz sobie rodzaje pomyłek Nie pojedyncze miejsca, tylko rodzaje: „sucha trawa brana za grunt”, „cień pod drzewem brany za wodę”.
  4. Dodaj po kilka przykładów każdego rodzaju W różnych miejscach zdjęcia, nie obok siebie.
  5. Naucz i zrób mapę jeszcze raz Dwie, trzy rundy poprawiają najwięcej. Potem każda daje coraz mniej.

Podpowiedź programu: po każdej mapie dostaniesz informację, ile obiektów dostało mniej niż połowę głosów drzew. To właśnie tam program się waha i tam Twoje przykłady zrobią największą różnicę.

Dwie poprawki na koniec

Dociąganie po zieloności

Pas trawy między zagonami bywa węższy niż obiekt i ginie. Ta opcja oddaje decyzję pojedynczym pikselom, ale tylko dla dwóch wskazanych klas, reszta mapy zostaje obiektowa.

Uwaga: odzyskane pasy wychodzą nieco szersze niż w naturze, więc ostrożnie z podawaniem ich powierzchni.

Najmniejszy płat

Usuwa pojedyncze drobiny, wchłaniając je w otoczenie. Ustaw to pod zastosowanie mapy, a nie po to, żeby podbić wynik dokładności: sito dobrane pod punkty kontrolne przestaje być niezależnym sprawdzianem.

4Ile ta mapa jest warta

Część, której w QGIS brakuje, i ta, która decyduje, czy wynik da się opublikować.

Mapa jest tyle warta, ile wiesz o jej błędach. Ocena „na oko” nie wystarczy: trzeba wylosować punkty, opisać je niezależnie i policzyć, ile razy mapa trafiła.

  1. Program losuje punkty kontrolne Nigdy na obiektach, które posłużyły do nauki, inaczej sprawdzałbyś model na jego własnej ściądze.
  2. Ty opisujesz je patrząc na samo zdjęcie Z wyłączoną warstwą klasyfikacji. Program sam o tym przypomni i wskaże, co wyłączyć.
  3. Dostajesz macierz błędów i liczby do cytowania Trafność i kompletność każdej klasy, dokładność ogólną oraz powierzchnie z przedziałami ufności.

Dlaczego na ślepo. Jeśli przy opisywaniu punktów widzisz odpowiedź programu, podświadomie się z nią zgodzisz. Wynik wyjdzie zawyżony o kilka–kilkanaście punktów procentowych i recenzent to wychwyci.

Jak czytać wynik

w wierszach: co mówi mapa  ·  w kolumnach: co widać na zdjęciu mapa \ zdjęcie trawa grunt droga razem trafność trawa 46 3 1 50 92% grunt 5 43 2 50 86% droga 0 2 48 50 96% kompletność 90% 90% 94% na przekątnej: mapa i zdjęcie mówią to samo Trafność: gdy mapa mówi „trawa”, jak często to naprawdę trawa Kompletność: ile z rzeczywistej trawy mapa znalazła
Dwie liczby mówią o czym innym i obie są potrzebne. W literaturze noszą nazwy „dokładność użytkownika” i „dokładność producenta”.

Dlaczego powierzchnia z mapy to nie to samo co powierzchnia prawdziwa

Przy losowaniu warstwowym mała klasa dostaje proporcjonalnie dużo punktów, żeby dało się o niej cokolwiek powiedzieć. Przez to udział punktów nie jest udziałem powierzchni, a zwykła średnia z punktów zakłamuje wynik.

Dlatego program liczy wszystko ważąc każdą klasę jej powierzchnią i podaje osobno:

LiczbaCo to jestCytować?
Powierzchnia z mapy ile pikseli program przypisał tej klasie nie, zawiera błędy klasyfikacji
Powierzchnia szacowana poprawiona o błędy, które wykryła próba tak, razem z przedziałem
Przedział ufności 95% na ile dokładnie udało się ją oszacować tak, zawsze obok powierzchni

Postępowanie jest zgodne z zaleceniami Olofssona i in. (2014) oraz Stehmana (2014), czyli z tym, czego dziś wymagają recenzenci w czasopismach z teledetekcji. Współczynnika kappa świadomie nie liczymy: obecne zalecenia go odradzają (Pontius i Millones, 2011).

Jedna uczciwa uwaga: punkty opisane z lotu ptaka to dane referencyjne wysokiej jakości, ale nie to samo, co pomiar w terenie. Tak też należy je opisać w publikacji.

Gdy coś nie wychodzi

Najczęstsze kłopoty i co z nimi zrobić.

ObjawPrzyczynaCo zrobić
Mapa jest „zaszumiona”, pełna drobin obiekty za małe albo za mało przykładów zwiększ wielkość obiektu; ustaw najmniejszy płat; dołóż przykładów
Dwie klasy ciągle się mylą są do siebie za podobne w mierzonych cechach sprawdź rozróżnialność; jeśli poniżej 1,7, połącz je albo dołóż model wysokości
Cienkie pasy trawy giną są węższe niż obiekt włącz dociąganie po zieloności albo zmniejsz obiekty
Dachy mają zerową wysokość nad gruntem liczysz na małym wycinku, węższym niż 40 m policz całe zdjęcie, bo grunt szacuje się z szerokiego otoczenia
Za duże jak na pamięć komputera siatka robocza ma ponad 15 mln pikseli wpisz w polu Rozdzielczość robocza (m) co najmniej wartość podaną w komunikacie albo policz tylko widoczny fragment
Klasa wyszła bez ani jednego obiektu uczącego poligony mniejsze niż obiekty narysuj większe poligony albo zmniejsz wielkość obiektu
Liczy się bardzo długo brak bibliotek przyspieszających we wtyczce przycisk Zainstaluj biblioteki przyspieszające (krok 1), potem ponowne uruchomienie QGIS; wyniki zgodne z implementacją wzorcową, czas kilkukrotnie krótszy
Dokładność podejrzanie wysoka (powyżej 97%) warstwa klasyfikacji była widoczna przy opisywaniu punktów wyłącz ją i opisz punkty jeszcze raz, inaczej wynik jest bezwartościowy

Część 4 z 4

Dla naukowców

Metoda ze źródłami, sposób cytowania programu i bibliografia.

Metodyka

Wszystko, co program robi, ma źródło w literaturze albo w dokumentacji użytych bibliotek. Rozwiń wybrany podrozdział.

Jednostka analizy

Program realizuje klasyfikację obiektową (GEOBIA) (Blaschke, 2010): jednostką decyzji nie jest piksel, lecz obiekt, czyli spójna grupa sąsiadujących pikseli o zbliżonej barwie. Obiekt niesie informację niedostępną dla pojedynczego piksela, taką jak zmienność wewnętrzna, faktura, kształt i relacja do otoczenia. Mapa wynikowa nie zawiera izolowanych, błędnie sklasyfikowanych pikseli. Jej rozdzielczość tematyczna jest jednak ograniczona wielkością obiektu: element węższy niż obiekt nie zostanie wykartowany.

Dane wejściowe

Program interpretuje trzy pierwsze kanały zdjęcia jako czerwony, zielony i niebieski i wymaga metrycznego układu współrzędnych. Jasności są skalowane do przedziału 0–1 według typu danych pliku (dane 8-bitowe dzielone przez 255, 16-bitowe bez znaku przez 65 535, 16-bitowe ze znakiem przez 32 767), a nie według rozstępu wartości w zdjęciu; zdjęcia zapisane w tym samym formacie pozostają więc porównywalne. Zdjęcie jest przeliczane na siatkę roboczą o rozdzielczości wybranej przez użytkownika, przy czym przy zgrubianiu wartości pikseli są uśredniane. Siatka robocza większa niż 15 milionów pikseli jest odrzucana z komunikatem. Opcjonalny numeryczny model pokrycia terenu (NMPT) musi mieć ten sam układ współrzędnych co zdjęcie. W przypadku scen Sentinel-2 (Drusch i in., 2012) wymagana jest gotowa kompozycja RGB, ponieważ w surowym produkcie wielokanałowym trzy pierwsze kanały nie odpowiadają barwom czerwonej, zielonej i niebieskiej.

Segmentacja

Podział na obiekty wykonuje algorytm SLIC (Achanta i in., 2012), czyli lokalne grupowanie metodą k-średnich w pięciowymiarowej przestrzeni złożonej z trzech składowych barwy w przestrzeni CIELAB i dwóch współrzędnych piksela. Odległość piksela od środka skupienia łączy różnicę barwy dc z odległością przestrzenną ds unormowaną odstępem siatki zarodków S i ważoną zwartością m: D = √(dc² + (ds/S)²·m²). Domyślna zwartość wynosi 0,15. Przed podziałem obraz jest wygładzany filtrem Gaussa (σ = 2,5), a grupowanie obejmuje 10 iteracji. Obiekty mniejsze niż połowa ilorazu powierzchni zdjęcia i liczby obiektów są dołączane do sąsiada, dzięki czemu każdy obiekt tworzy jeden spójny płat. Gdy dostępna jest biblioteka scikit-image (van der Walt i in., 2014), program wywołuje jej implementację SLIC z tymi samymi parametrami; w przeciwnym razie działa implementacja własna tego samego algorytmu. Przy niskiej zwartości zrealizowana liczba obiektów bywa dwu- do trzykrotnie mniejsza od zamówionej. Program raportuje więc rzeczywistą liczbę obiektów oraz medianę i maksimum ich powierzchni.

Przestrzeń cech

Każdy obiekt opisuje wektor 19 cech, a przy dostępnym NMPT 24 cech. Grupa barwy obejmuje średnie i odchylenia standardowe trzech kanałów oraz średnią jasność (7 cech). Wskaźniki roślinności z zakresu widzialnego, ExG (Woebbecke i in., 1995), VARI (Gitelson i in., 2002) i NGRDI (Hunt i in., 2005), są liczone na współrzędnych chromatycznych (r = R/(R+G+B), analogicznie g i b), co usuwa składową jasności i ogranicza wpływ zmiennego oświetlenia (3 cechy). Fakturę opisują cztery miary z macierzy współwystąpień poziomów szarości (Haralick i in., 1973): kontrast, jednorodność, energia i entropia. Wyznacza się je dla luminancji skwantowanej globalnie do 15 poziomów, przy odległości 1 piksela i czterech kierunkach (0°, 45°, 90°, 135°); obiekty mniejsze niż 16 pikseli otrzymują wartości neutralne. Kształt opisują pole, obwód estymowany metodą Croftona, okrągłość 4πA/P² i wypukłość względem otoczki wypukłej (4 cechy). Kontekst opisuje różnica między jasnością obiektu a średnią jasnością obiektów przyległych w grafie sąsiedztwa czterospójnego (1 cecha). Z NMPT program wyznacza średnią i odchylenie wysokości, średnie nachylenie, wysokość względem sąsiadów oraz wysokość nad gruntem (5 cech). Powierzchnię gruntu estymuje z samego NMPT: minimum w blokach około 1 m, otwarcie morfologiczne oknem 40 m i wygładzenie średnią ruchomą. Cechy nie są standaryzowane, ponieważ Random Forest dzieli przestrzeń cech progami i jest niewrażliwy na monotoniczne przekształcenia pojedynczej cechy.

Klasyfikacja

Regułę decyzyjną stanowi Random Forest (Breiman, 2001), klasyfikator szeroko stosowany w teledetekcji (Belgiu i Drăguţ, 2016). Model składa się ze 100 drzew. Każde drzewo uczy się na próbie bootstrapowej, a w każdym węźle wybiera podział spośród √p losowo wybranych cech (część całkowita z √p, czyli 4 zarówno przy 19, jak i przy 24 cechach) według kryterium Giniego (Breiman i in., 2017), bez wag klas i bez ograniczenia głębokości (w implementacji własnej do 40 poziomów). Ziarno generatora liczb pseudolosowych wynosi 42, co zapewnia powtarzalność wyniku. Obiekt otrzymuje klasę o największym udziale w uśrednionym rozkładzie klas z liści wszystkich drzew (głosowanie miękkie), a ten udział jest zapisywany jako pewność decyzji. Program zlicza obiekty o pewności poniżej 0,5 i ostrzega, gdy stosunek liczebności najliczniejszej i najrzadszej klasy uczącej przekracza 5:1. Gdy dostępna jest biblioteka scikit-learn (Pedregosa i in., 2011), używana jest jej implementacja z tymi parametrami, w przeciwnym razie implementacja własna.

Rozróżnialność klas

Przed uczeniem program szacuje rozróżnialność każdej pary klas odległością Jeffriesa i Matusity, JM = 2(1 − e−B), gdzie B jest odległością Bhattacharyyi. Klasyczna JM liczona w pełnej przestrzeni cech na tych samych próbkach, z których estymowano parametry, przy 24 cechach i kilkuset próbkach osiąga wartość bliską 2 niemal dla każdej pary klas. Zastosowano dlatego wariant z pięciokrotną walidacją krzyżową. Na części uczącej wyznacza się kierunek dyskryminacyjny Fishera (1936), z macierzą kowariancji estymowaną ze skurczem Ledoita i Wolfa (2004), a odległość liczy się na rzutach części testowej. Tak określona miara jest dolnym ograniczeniem pełnej odległości wielowymiarowej. Progi 1,9 i 1,7 mają więc charakter orientacyjny, a najbardziej użyteczna jest kolejność par klas i ranking cech, które je rozdzielają.

Korekty po klasyfikacji

Dwie opcjonalne korekty naruszają czysto obiektowy charakter mapy i jeśli zostały użyte, należy je raportować. Pierwsza rozstrzyga przynależność pojedynczych pikseli dla dwóch wskazanych klas na podstawie ExG uśrednionego w oknie 3 × 3 piksele. Próg jest wyznaczany na próbkach uczących przez maksymalizację średniej trafności obu klas. Korekta odzyskuje elementy węższe niż obiekt, kosztem niewielkiego poszerzenia odzyskanych pasów. Druga korekta, najmniejsza jednostka kartowania, wchłania płaty mniejsze od progu przez klasę otaczającą, z użyciem filtra sita biblioteki GDAL (GDAL/OGR contributors, 2026) w sąsiedztwie czterospójnym. Próg sita powinien wynikać z przeznaczenia mapy, a nie z optymalizacji wyniku oceny dokładności.

Ocena dokładności i estymacja powierzchni

Ocena dokładności opiera się na losowaniu warstwowym według klas mapy: każda klasa otrzymuje co najmniej 50 punktów (wartość domyślna), a pozostałe punkty są przydzielane proporcjonalnie do powierzchni. Punkty kontrolne nie trafiają na obiekty użyte do uczenia, więc populacją docelową jest mapa poza tymi obiektami. Wagi powierzchniowe warstw są zapamiętywane w chwili losowania, tak aby warstwy pozostały przypisane do próby także po późniejszej zmianie mapy (Stehman, 2014). Interpretator opisuje punkty przy ukrytej warstwie klasyfikacji, co ogranicza efekt potwierdzenia. Z macierzy błędów (Congalton i Green, 2019) program wyznacza dokładność ogólną, dokładność użytkownika i producenta oraz udziały i powierzchnie klas za pomocą estymatorów ważonych powierzchnią, z 95-procentowymi przedziałami ufności (Olofsson i in., 2014). Implementacja odtwarza przykład rachunkowy z tej pracy (tab. 8): dokładność ogólna wynosi 0,9449 przy wartości opublikowanej 0,944. Współczynnik kappa nie jest liczony (Pontius i Millones, 2011).

Implementacja i odtwarzalność

Program jest napisany w języku Python i korzysta z bibliotek NumPy (Harris i in., 2020) i SciPy (Virtanen i in., 2020). Odczyt i zapis danych przestrzennych realizuje GDAL (GDAL/OGR contributors, 2026) we wtyczce QGIS oraz biblioteki rasterio i Fiona w programie wiersza poleceń. Wtyczka QGIS, program wiersza poleceń i program okienkowy dla Windows korzystają z tego samego silnika obliczeniowego. Program dla Windows jest budowany automatycznie w GitHub Actions z kodu w repozytorium, a każde wydanie jest publikowane z sumami kontrolnymi SHA-256. Kod źródłowy jest udostępniony na licencji GPL-3.0-or-later. Do odtworzenia wyniku należy podać wersję programu, wersje bibliotek scikit-image i scikit-learn (albo informację o użyciu implementacji własnych), ziarno losowe oraz wartości wszystkich parametrów ustawionych przez użytkownika.

Ograniczenia

Metoda korzysta wyłącznie z zakresu widzialnego, dlatego nie wykorzystuje bliskiej podczerwieni ani wskaźników takich jak NDVI. Model nie przenosi się między nalotami bez ponownego uczenia, ponieważ oświetlenie, faza fenologiczna i ustawienia kamery przesuwają rozkłady cech. Elementy węższe niż obiekt są niedoszacowane. Pod zwartym pokryciem szerszym niż 40 m estymowana powierzchnia gruntu wchodzi na to pokrycie, co zaniża wysokość nad gruntem. Bez wag klas klasy rzadkie są systematycznie niedoszacowywane, gdy zbiór uczący jest niezrównoważony. Program nie korzysta z cech wyznaczanych przez głębokie sieci neuronowe, dlatego klasy różniące się wyłącznie wzorem przestrzennym, a nie materiałem, mogą pozostać nierozdzielone.

Jak cytować

Program jest zarchiwizowany w Zenodo i ma trwałe identyfikatory DOI.

G. Górniak, „GeoAI Klasyfikator,” wersja 1.0.3, Zenodo, 2026, doi: 10.5281/zenodo.24011434.

IdentyfikatorDOIKiedy używać
Wszystkie wersje 10.5281/zenodo.24005560 odwołanie do programu w ogóle; zawsze prowadzi do najnowszej wersji
Wersja 1.0.3 10.5281/zenodo.24011434 wynik policzony dokładnie tą wersją, na przykład w artykule

Bibliografia

Styl Elsevier (Harvard, z tytułami). Wszystkie pozycje do zaimportowania w Zotero: bibliografia.bib (w Zotero: Plik, Importuj).

Pokaż wszystkie pozycje (21)
  1. Achanta, R., Shaji, A., Smith, K., Lucchi, A., Fua, P., Süsstrunk, S., 2012. SLIC Superpixels Compared to State-of-the-Art Superpixel Methods. IEEE Transactions on Pattern Analysis and Machine Intelligence 34, 2274–2282. https://doi.org/10.1109/TPAMI.2012.120
  2. Belgiu, M., Drăguţ, L., 2016. Random forest in remote sensing: A review of applications and future directions. ISPRS Journal of Photogrammetry and Remote Sensing 114, 24–31. https://doi.org/10.1016/j.isprsjprs.2016.01.011
  3. Blaschke, T., 2010. Object based image analysis for remote sensing. ISPRS Journal of Photogrammetry and Remote Sensing 65, 2–16. https://doi.org/10.1016/j.isprsjprs.2009.06.004
  4. Breiman, L., 2001. Random Forests. Machine Learning 45, 5–32. https://doi.org/10.1023/A:1010933404324
  5. Breiman, L., Friedman, J.H., Olshen, R.A., Stone, C.J., 2017. Classification and Regression Trees. Routledge, New York. https://doi.org/10.1201/9781315139470
  6. Congalton, R.G., Green, K., 2019. Assessing the Accuracy of Remotely Sensed Data: Principles and Practices, 3rd ed. CRC Press, Boca Raton. https://doi.org/10.1201/9780429052729
  7. Drusch, M., Del Bello, U., Carlier, S., Colin, O., Fernandez, V., Gascon, F., Hoersch, B., Isola, C., Laberinti, P., Martimort, P., Meygret, A., Spoto, F., Sy, O., Marchese, F., Bargellini, P., 2012. Sentinel-2: ESA’s Optical High-Resolution Mission for GMES Operational Services. Remote Sensing of Environment 120, 25–36. https://doi.org/10.1016/j.rse.2011.11.026
  8. Fisher, R.A., 1936. The use of multiple measurements in taxonomic problems. Annals of Eugenics 7, 179–188. https://doi.org/10.1111/j.1469-1809.1936.tb02137.x
  9. GDAL/OGR contributors, 2026. GDAL/OGR Geospatial Data Abstraction software Library. Open Source Geospatial Foundation. https://doi.org/10.5281/zenodo.5884351
  10. Gitelson, A.A., Kaufman, Y.J., Stark, R., Rundquist, D., 2002. Novel algorithms for remote estimation of vegetation fraction. Remote Sensing of Environment 80, 76–87. https://doi.org/10.1016/S0034-4257(01)00289-9
  11. Haralick, R.M., Shanmugam, K., Dinstein, I., 1973. Textural Features for Image Classification. IEEE Transactions on Systems, Man, and Cybernetics SMC-3, 610–621. https://doi.org/10.1109/TSMC.1973.4309314
  12. Harris, C.R., Millman, K.J., van der Walt, S.J., Gommers, R., Virtanen, P., Cournapeau, D., Wieser, E., Taylor, J., Berg, S., Smith, N.J., Kern, R., Picus, M., Hoyer, S., van Kerkwijk, M.H., Brett, M., Haldane, A., del Río, J.F., Wiebe, M., Peterson, P., Gérard-Marchant, P., Sheppard, K., Reddy, T., Weckesser, W., Abbasi, H., Gohlke, C., Oliphant, T.E., 2020. Array programming with NumPy. Nature 585, 357–362. https://doi.org/10.1038/s41586-020-2649-2
  13. Hunt, E.R., Cavigelli, M., Daughtry, C.S.T., McMurtrey, J.E., Walthall, C.L., 2005. Evaluation of Digital Photography from Model Aircraft for Remote Sensing of Crop Biomass and Nitrogen Status. Precision Agriculture 6, 359–378. https://doi.org/10.1007/s11119-005-2324-5
  14. Ledoit, O., Wolf, M., 2004. A well-conditioned estimator for large-dimensional covariance matrices. Journal of Multivariate Analysis 88, 365–411. https://doi.org/10.1016/S0047-259X(03)00096-4
  15. Olofsson, P., Foody, G.M., Herold, M., Stehman, S.V., Woodcock, C.E., Wulder, M.A., 2014. Good practices for estimating area and assessing accuracy of land change. Remote Sensing of Environment 148, 42–57. https://doi.org/10.1016/j.rse.2014.02.015
  16. Pedregosa, F., Varoquaux, G., Gramfort, A., Michel, V., Thirion, B., Grisel, O., Blondel, M., Prettenhofer, P., Weiss, R., Dubourg, V., Vanderplas, J., Passos, A., Cournapeau, D., Brucher, M., Perrot, M., Duchesnay, É., 2011. Scikit-learn: Machine Learning in Python. Journal of Machine Learning Research 12, 2825–2830. https://jmlr.org/papers/v12/pedregosa11a.html
  17. Pontius, R.G., Millones, M., 2011. Death to Kappa: birth of quantity disagreement and allocation disagreement for accuracy assessment. International Journal of Remote Sensing 32, 4407–4429. https://doi.org/10.1080/01431161.2011.552923
  18. Stehman, S.V., 2014. Estimating area and map accuracy for stratified random sampling when the strata are different from the map classes. International Journal of Remote Sensing 35, 4923–4939. https://doi.org/10.1080/01431161.2014.930207
  19. Virtanen, P., Gommers, R., Oliphant, T.E., Haberland, M., Reddy, T., Cournapeau, D., Burovski, E., Peterson, P., Weckesser, W., Bright, J., van der Walt, S.J., Brett, M., Wilson, J., Millman, K.J., Mayorov, N., Nelson, A.R.J., Jones, E., Kern, R., Larson, E., Carey, C.J., Polat, İ., Feng, Y., Moore, E.W., VanderPlas, J., Laxalde, D., Perktold, J., Cimrman, R., Henriksen, I., Quintero, E.A., Harris, C.R., Archibald, A.M., Ribeiro, A.H., Pedregosa, F., van Mulbregt, P., Vijaykumar, A., Bardelli, A.P., Rothberg, A., Hilboll, A., Kloeckner, A., Scopatz, A., Lee, A., Rokem, A., Woods, C.N., Fulton, C., Masson, C., Häggström, C., Fitzgerald, C., Nicholson, D.A., Hagen, D.R., Pasechnik, D.V., Olivetti, E., Martin, E., Wieser, E., Silva, F., Lenders, F., Wilhelm, F., Young, G., Price, G.A., Ingold, G.-L., Allen, G.E., Lee, G.R., Audren, H., Probst, I., Dietrich, J.P., Silterra, J., Webber, J.T., Slavič, J., Nothman, J., Buchner, J., Kulick, J., Schönberger, J.L., de Miranda Cardoso, J.V., Reimer, J., Harrington, J., Rodríguez, J.L.C., Nunez-Iglesias, J., Kuczynski, J., Tritz, K., Thoma, M., Newville, M., Kümmerer, M., Bolingbroke, M., Tartre, M., Pak, M., Smith, N.J., Nowaczyk, N., Shebanov, N., Pavlyk, O., Brodtkorb, P.A., Lee, P., McGibbon, R.T., Feldbauer, R., Lewis, S., Tygier, S., Sievert, S., Vigna, S., Peterson, S., More, S., Pudlik, T., Oshima, T., Pingel, T.J., Robitaille, T.P., Spura, T., Jones, T.R., Cera, T., Leslie, T., Zito, T., Krauss, T., Upadhyay, U., Halchenko, Y.O., Vázquez-Baeza, Y., 2020. SciPy 1.0: fundamental algorithms for scientific computing in Python. Nature Methods 17, 261–272. https://doi.org/10.1038/s41592-019-0686-2
  20. van der Walt, S., Schönberger, J.L., Nunez-Iglesias, J., Boulogne, F., Warner, J.D., Yager, N., Gouillart, E., Yu, T., 2014. scikit-image: image processing in Python. PeerJ 2, e453. https://doi.org/10.7717/peerj.453
  21. Woebbecke, D.M., Meyer, G.E., Von Bargen, K., Mortensen, D.A., 1995. Color Indices for Weed Identification Under Various Soil, Residue, and Lighting Conditions. Transactions of the ASAE 38, 259–269. https://doi.org/10.13031/2013.27838
↑