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.
Część 1 z 4
Pobierz wersję dla siebie i sprawdź, czy Twoje zdjęcia i komputer się nadają.
Każda liczy dokładnie to samo. Wybierz tę, która pasuje do Twojej pracy.
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.
Okno z dwiema zakładkami: nauka i klasyfikacja całego folderu. Instalator nie wymaga praw administratora.
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.
| Rzecz | Konieczna? | Po co |
|---|---|---|
| Zdjęcie RGB | tak | Ortomozaika z drona, zdjęcie lotnicze albo scena satelitarna. Trzy kanały wystarczą. |
| Przykłady | tak | 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. |
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.
ucz, w programie dla
Windows zakładka nauki. Model zapisuje się do pliku
.geoai.klasyfikuj --folder,
w programie dla Windows zakładka klasyfikacji całego folderu.
Program może szukać zdjęć także w podfolderach..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
| Opcja | Co robi |
|---|---|
--rekurencyjnie | szuka zdjęć także w podfolderach |
--nmpt-folder | folder z modelami wysokości; do zdjęcia nalot_01.tif program dobiera plik nalot_01_nmpt.tif (przyrostek zmienisz opcją --nmpt-przyrostek) |
--mmu 10 | usuwa płaty mniejsze niż 10 m² |
--nadpisuj | liczy ponownie także zdjęcia, które mają już wynik |
--przerwij-na-bledzie | zatrzymuje się przy pierwszym problemie; bez tej opcji program zgłasza błąd przy danym zdjęciu i liczy dalej |
Bez opcji --nadpisuj program pomija zdjęcia, które
mają już wynik, więc przerwany przebieg po prostu wznawiasz tym
samym poleceniem.
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.
Co jest potrzebne, co spowalnia obliczenia i jak przyspieszyć pracę bez kupowania nowego komputera.
| Wersja | Czego potrzebuje |
|---|---|
| Wtyczka QGIS | QGIS 3.22 lub nowszy i nic więcej |
| Program dla Windows | 64-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 graficzna | niepotrzebna: 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ą.
| Czynnik | Dlaczego |
|---|---|
| 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 |
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
Pobieranie Sentinel i kliknij Zainstaluj.| Sprawa | Dron | Sentinel-2 |
|---|---|---|
| Piksel | 2 do 10 cm | 10 m |
| Co da się rozpoznać | pojedyncze drzewa, miedze, fragmenty dachu | duże formy: pole, las, zabudowa, woda |
| Model wysokości | zwykle jest (NMPT z nalotu) | zwykle go nie ma, więc 19 cech zamiast 24 |
| Wielkość obiektu | metry kwadratowe | kilkadziesiąt pikseli to już tysiące metrów kwadratowych |
Scena z 40 procentami chmur bywa bezużyteczna, nawet jeśli Twój fragment akurat wyszedł czysto, bo na ziemi zostają cienie chmur.
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
Dlaczego program pracuje na obiektach i jak uczy się klas z Twoich przykładów.
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.
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.
Średnia i zmienność czerwieni, zieleni i niebieskiego oraz jasność. Poszarpana korona ma inną zmienność niż gładki dach.
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ą.
Jak bardzo sąsiednie piksele różnią się od siebie. Tym odróżnisz koronę drzewa od blachy dachowej w tym samym kolorze.
Powierzchnia, obwód, okrągłość i wypukłość. Długa, wąska działka to co innego niż zwarty kwadrat.
Jasność obiektu na tle tych, które go dotykają. Rów albo luka w drzewostanie wychodzą ciemniejsze niż wszystko dokoła.
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ą.
Cały algorytm na jednym małym obrazku. Animacja liczy naprawdę, a nie odtwarza nagrania.
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ęć.
.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
Od podziału zdjęcia przez naukę po ocenę dokładności mapy.
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.
| Co kartujesz | Rozdzielczość robocza (m) | Wielkość obiektu |
|---|---|---|
| Pola, zagony, dachy | 0,05–0,10 | 5–20 m² |
| Pojedyncze drzewa, krzewy | 0,03–0,05 | 2–5 m² |
| Luki w drzewostanie, korony | 0,10–0,25 | 10–30 m² |
| Duże naloty, setki hektarów | 0,20–0,25 | 20–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ć).
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.
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.
„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.
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.
Pierwsza mapa nigdy nie jest dobra. To nie błąd, to metoda.
Zanim zainwestujesz w klikanie, program policzy, jak bardzo różnią się Twoje przykłady, para po parze. Skala od 0 do 2:
| Wynik | Co oznacza | Co zrobić |
|---|---|---|
| powyżej 1,9 | klasy wyraźnie inne | nic, jedź dalej |
| 1,7 – 1,9 | znośnie, będą pomyłki | dołóż przykładów tej parze |
| poniżej 1,7 | te 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ść.
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ę.
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.
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.
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.
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.
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:
| Liczba | Co to jest | Cytować? |
|---|---|---|
| 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.
Najczęstsze kłopoty i co z nimi zrobić.
| Objaw | Przyczyna | Co 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
Metoda ze źródłami, sposób cytowania programu i bibliografia.
Wszystko, co program robi, ma źródło w literaturze albo w dokumentacji użytych bibliotek. Rozwiń wybrany podrozdział.
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.
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.
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.
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.
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.
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ą.
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 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).
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.
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.
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.
| Identyfikator | DOI | Kiedy 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 |
Styl Elsevier (Harvard, z tytułami). Wszystkie pozycje do zaimportowania w Zotero: bibliografia.bib (w Zotero: Plik, Importuj).