153YZOD Zpracování obrazových dat 2006 - 10. cvičení

Z GeoWikiCZ
Verze z 30. 12. 2005, 11:28, kterou vytvořil Landa (diskuse | příspěvky) (→‎teoretický úvod: doplnen odkaz na GRASS/R)

Klasifikace obecně, neřízená klasifikace

Zpracování obrazových dat

osnova

V tomto a následujícím kurzu se dotkneme posledního poměrně rozsáhlého tématu a to klasifikace obrazových dat. V omezené míře si uvedeme teoretický základ této metody zpracování obrazových dat (s důrazem na implementaci v GRASSu). Na závěr si v praktické rovině předvedeme neřízenou klasifikaci.

seznam příkazů

teoretický úvod

Pod pojmem klasifikace si lze představit třídění objektů do jednotlivých skupin (tříd). My se v tomto kurzu omezíme pouze na příznakovou klasifikaci (operující v tzv. příznakovém prostoru), která patří mezi základní metody DPZ. Na základě multispektrálního obrazu jsou sestaveny spektrální příznaky (tj. charakteristické změny radiační veličiny v závislosti na změně druhového či stavového parametru), dochází tak ve své podstatě ke třídění obrazových pixelů do jednotlivých skupin o podobných vlastnostech – ke klasifikaci dat na základě určitého rozhodovacího pravidla (klasifikátoru).

Počet pixelů pokrývající stejné uzemí (v geografickém smyslu slova) zavísí přirozeně na počtu pásem (obrazových vrstev) družicového snímku vstupujících do procesu klasifikace. Tato množina pixelů se často označuje jako spektrální vektor. Algoritmus klasifikace se obecně snaží separovat jednotlivé spektrální vektory do předem definovaných tříd (např. půda, vegetace, vodní plochy, atd.). Výsledná tematická mapa tak odráží počet a proporce těchto tříd.

Rozlišujeme dva základní typy příznakové klasifikace:

  • neřízenou (unsupervised) a
  • řízenou (supervised) klasifikaci.

Klasifikace jako taková vyžaduje dva kroky. Nejprve je analyzována podobnost spekrálních vektorů v ohledu na spektrální odrazivost (naplnění příznakového prostoru), v druhém kroku následuje vlastní klasifikace, tj. přiřazení k jednotlivým třídám.

V případě neřízené klasifikace je tento proces plně automatizován a ve své podstatě založen pouze na statistice obrazu. Nejprve se vytvoří tzv. shluky, dojde k naplnění příznakového prostoru. Výsledkem této klasifikace jsou nicméně čistě abstraktní třídy. Základní otázkou je tedy nalezení smysluplného počtu tříd, které by vhodně popsaly dané území.

V případě řízené klasifikace je naopak vyžadován vstup od uživatele, konkrétně výběr tzv. trénovacích ploch, tzn. jakýchsi vzorů pro jednotlivé třídy. Následuje výpočet příznakového prostoru a pak vlastní klasifikace. Statistika obrazových dat je tak přímo ovlivněna výběrem trénovacího souboru, uživatel má tak možnost ovlivnit nejen počet výsledných tříd ale i jejich význam.

GRASS nabízí dva obecné klasifikátory:

  • Maximum Likelihood classifier (MLC) – je založen na předpokladu, že rozdělení bodů tvořících jednu třídu tréninkových dat má Gaussovo, tedy normální rozdělení. Lze tak určit statistickou pravděpodobnost dané hodnoty pixelu jako člena vybrané třídy. Pixel je nakonec zařazen do třídy s největší určenou pravděpodobností.
  • Sequential Maximum A Posteriori classifier (SMAP)

Omezíme-li se na implementaci v GRASSu, můžeme rozlišit dvě hlavní skupiny (viz tab. č.1):

  • radiometrická klasifikace
    • neřízená klasifikace (i.cluster, i.maxlik (MLC))
    • řízená klasifikacekombinovaná částečně řízená klasifikace (i.class, i.gensig, i.maxlik)
  • kombinovaná radiometrická/geometrická klasifikace (i.gensigset, i.smap (SMAP))
Tab č.1: Přehled metod klasifikace v GRASSu
  radiometrická radiomerická radiometrická/geometrická
  neřízená řízená řízená
předzpracování i.cluster i.class (monitor) i.gensig (mapa) i.gensigset
výpočet i.maxlik i.maxlik i.maxlik i.smap

Jedním z problémů klasifikace jsou tzv. smíšené pixely, tj. ty které odrážejí hned několik objektů (např. hranice les-pole, zástavba, atd.). V této situaci je pixel přiřazen k dominatní třídě s nízkou pravděpodobností tohoto přiřazení. Často je tak vhodné problémové oblasti před vlastní klasifikací nejprve maskovat.

Za poznámku stojí fakt, že další klasifikátory jako je Artificial Neutral Networks (ANN), k-Nearest Neighbor classification (kNN), Support Vector Machines (SVM) a řada dalších je dostupná v R (program pro statistické výpočty a generování grafů). Tato aplikace může být propojena s GRASSem přes speciální rozhraní GRASS/R. Tato problematika nicméně výrazně přesahuje náplň tohoto kurzu.

Poznámka: Jedním z problémů klasifikace jsou lokální diference (způsobené změnou míry a expozice svahu, atmosferických podmínek). Nejprve je tak vhodné aplikovat radiometrické korekce pro minimalizaci těchto nežádoucích vlivů.

hodnocení výsledků klasifikace

Otázka hodnocení výsledků klasifikace není vůbec jednoduchá, nejčastěji se využívá porovnání v testovacích plochách, které jsou známy z jiných testovacích dat. Ve vyjímečných případech se zkoumá celý výsledek klasifikace, což je přirozeně finančně i časově velmi náročné.

úpravy po klasifikaci

Výsledkem klasifikace jsou často díky spektrální variabiltě nepříliš homogenní plochy, což nemusí být, např. pro účel prezentace výsledků, úplně optimální stav. V takovýchto případech je nutno výsledný obraz vyhladit.

Postklasifikační filtr jako takový musí být založena na logickém operátoru a nikoliv na operacích aritmetickým (potom by mohly vznikat hodnoty neexistujících tříd). Často se využívá majoritní filtr, který přiřadí středovému pixelu kernelu hodnotu majoritní třídy.

neřízená klasifikace

Jak již bylo uvedeno dříve, tato metoda klasifikace je založena na automatickém přiřazení spektrálních vektorů ke spekrálním třídám. Přičemž toto přiřazení je plně založeno na statistice obrazových dat, tj. není použito trénovací množiny.

V první fázi jsou seskupeny jednotlivé spektrální vektory na základě blízké spektrální odezvy do tzv. skluků (clusterů). Výsledek tohoto procesu je možné ovlivnit zadáním minimální velikosti clusteru, stupně separability či maximálním počtem clusterů, atd. Toto přířazení můžeme přirovnat k sestavení legendy mapy, odražející signarury dané mapy. Iteraktivní algoritmus pro sestavení clusterů nejprve vypočte střední hodnoty shluků a sestaví příslušné kovarianční matice (modul i.cluster). Je tak testována stabilita tohoto přířazení mezi jednotlivými iteracemi (test χ2). Účelem je identifikovat mračna pixelů s podobnou spektrální odrazivostí. Množina spektrálních vektorů je takto zpracována v rámci daného clusteru a posléze přiřazena k dané třídě. Po klasifikaci je tedy nutné provést šetření, co jednotlivé třídy vlastně představují.

Dále je nasazen klasifikátor MLC (modul i.maxlik), který určuje ke které spekrální třídě daný spektrální vektor s největší pravděpodobnosti patří. Výsledkem je tematická mapa (daná počtem tříd) a tzv. "zamítací mapa" (pravděpodobnosti nesprávného přiřazení reklasifikovaného pixelu k dané třídě) – reject threshold map layer. Tuto mapu lze velmi snadno použít jako masku pro zobrazení pixelů, které byly během klasifikace zařazeny s nízkou pravděpodobností.

sestavení clusterů

Nejprve je nutno vytvořit obrazovou skupinu/podskupinu a vložit do ní všechny požadované obrazové vrstvy (tj. jednotlivá pásma družicového snímku vyjma termálního pásma), např.

#sestavení obrazové skupiny
#
GRASS > i.group group=tm subgroup=tm input=tm1,tm2,tm3,tm4,tm5,tm7

Sestavení clusterů je provedeno modulem i.cluster, kromě udání obrazové skupiny a podskupiny (group, subgroup), souboru obsahující výsledné příznaky result signature file (sigfile) je možné nastavit:

  • minimum class size (min_size): minimální počet pixelů definující cluster.
  • class separation (separation): minimální stupeň separace, při které budou během iteračního procesu clustery spojeny (závisí na povaze obrazových dat a maximálním počtu clusterů, které jsou ze statistického hlediska akceptovatelné). Hodnota se obvykle pohybuje v intervalu [0.5; 1.5]. Při zvýšení této hodnoty je nutné zvětšit i maximální počet iterací (tak aby mohla být splněna podmínka konvergence).
  • percent convergence (convergence): určuje při jakém stupni konvergence lze považovat cluster za stabilní. Střední hodnota clusteru se během iteračního procesu mění a to podle počtu nově přiřazených pixelů. Snahou je maximální stupeň odlišnosti jednotlivých clusteru. Proces je ukončen po dosažení dané konvergence či maximálního počtu iterací.
  • maximum number of iterations (iterations): určuje maximální počet povolených iterací, tedy větší počet než by podle předpokladu (dle testu Χ2) mělo být potřeba pro dosažení konvergence. Pokud je tato hodnota během sestavení clusterů dosažena, je nutné výpočet zopakovat a zvýšit hodnotou tohoto parametru.
  • sampling intervals (sample): umožňuje zjednodušení výpočtu seskupením pixelů do bloků.

V případě opakovaného výpočtu lze využít výsledek přecházejícího sestavení clusterů udáním souboru obsahující tzv. zárodečné příznaky (parametr seedseed signature). Poslední parametr reportfile udává název souboru pro zprávu z výpočtu.

Při prvním sestavení clusterů (výpočtu příznakového prostoru) zvolíme počet výchozích tříd (number of initial classes) "20". Ostatní parametry můžeme ponechat ve výchozím nastavení. Pokud výpočet neproběhne podle našich představ stačí změnit vhodně dané parametry a výpočet opakovat.

#nastavení regionu a sestavení clusterů
#
GRASS > g.region rast=tm1
GRASS > i.cluster group=tm subgroup=tm sigfile=tm_nerpri20 reportfile=tm_rep20.txt classes=20


Iteration 1: %Convergence 48.32 (0s elapsed, 0s left)
Iteration 2: %Convergence 69.98 (0s elapsed, 0s left)
...
Iteration 17: %Convergence 98.08 (1s elapsed, 0s left)

V tomto případě bylo potřeba 17 iterací s dosaženou konvergencí 98%. Výsledná zpráva z výpočtu je uložena v aktuálním adresáři pod názvem tm_rep20.txt. Můžeme si ji prohlednou např. pomocí systémové aplikace less (pohyb mezi stránkami PAGE-UP/DOWN, ukončení klávesou "q").

klasifikace

Klasifikátor MLC je v GRASSu dostupný jako modul i.maxlik. Modul vyžaduje název obrazové skupiny a podskupiny, název souboru s uloženými příznaky (vytvořeného modulem i.cluster). Výstupem je tematická (klasifikovaná) mapa (parametr class) a "zamítací mapa" (reject) reprezentující pravděpodobnost nesprávného přiřazení daného pixelu k třídě.

Zamítací mapa je zobrazena v odstínech šedi. Čím menší a více homogenní jsou hodnoty rastrových buněk, tím menší je alokovaná chyba. Pokud nelze výsledek klasifikace akceptovat, je nutné celý výpočet (počínaje sestavením clusterů) s vhodně přenastavenými parametry zopakovat.

Na závěr můžeme jednotlivým třídám (tj. kategoriím rastrové mapy) přiřadit textové popisky popisující danou třídu. Toho lze docílit pomocí modulu r.support (který je v současnosti dostupný pouze ve vývojové větvi GRASSu 6.1) nebo uměle reklasifikací modulem r.reclass.

#klasifikátor maximum likelihood (MLC)
#
GRASS > i.maxlik group=tm subgroup=tm sigfile=tm_nerpri20 class=tm_nerkl20 reject=tm_nerza20
#
#zobrazit výsledek neřízené klasifikace
#
GRASS > d.rast.leg tm_nerkl20
GRASS > d.rast.leg tm_nerza20
Obr č.1: Výsledek neřízené klasifikace při počátečním počtu tříd "20"
Obr č.2: Odpovídající zamítací mapa

Za požadovaný výstup může být považována i přehledná tabulka ploch jednotlivých tříd:

#plocha tříd a pravděpodobnosti nesprávného přiřazení v hektarech a procentech
#
GRASS > r.report tm_nerkl20 units=h,p 
GRASS > r.report tm_nerza20 units=h,p

Mapu pravděpodobnosti přiřazení můžeme úspěšně použít jako masku, například chceme-li zobrazit plochy, které byly přiřazeny k dané třídě s pravděpodobností menší než 10% (stupeň zamítnutí 90%) Hodnotě 90% odpovídá kategorie mapy "12" (viz r.stats -l tm_nerza20).

#maskovaní ploch s pravděpodobností >= 90%
#
GRASS > r.mapcalc 'MASK = if(tm_nerzam >= 12, 1, null())'
#
#vymazat obsah grafického okna včetně rámců
#
GRASS > d.erase -f
GRASS > d.rast tm_nerkl20
#
#deaktivace masky
#
GRASS > g.remove rast=MASK
Obr č.3: Maskování ploch s pravděpodobností přiřazení větší než 10%

postklasifikační úpravy

V první fázi vytvoříme rastrovou vrstvu, která bude obsahovat pouze plochy větší než 1 ha. Poté vyplníme vzniklé mezery pomocí modulu r.surf.idw (interpolace "inverzní vážená vzdálenost") a na závěr aplikujeme jednoduchý postklasifikační filtr (modová filtrace).

#výběr rastrových ploch s výměrou větší než 1 ha
#
GRASS > r.reclass.area in=tm_nerkl20 greater=1 output=tm_nerkl20_1ha
#
#vyplnění vzniklých "děr" (interpolace IDW)
#
GRASS > r.surf.idw input=tm_nerkl20_1ha output=tm_nerkl20_int
#
#výsledná rastrová mapa by neměla obsahovat žádné buňky s hodnotou "žádná data" (znak '*')
#
GRASS > r.stats -c tm_nerkl20_int | grep '*'
#
#postklasifikační filtr
#
GRASS > r.neighbors in=tm_nerkl20_int out=tm_nerkl20_f method=mode size=3
#
#odstranění již nepotřebných rastrových vrstev
#
GRASS > g.remove rast=tm_nerkl20_1ha,tm_nerkl20_int
Obr č.4: Tematická mapa po klasifikaci, rastrová vrstva s plochami o výměře větší než 1 ha, vpravo po aplikaci postklasifikačního filtru (modus), počet tříd 20
Obr č.5: Tematická mapa po klasifikaci, rastrová vrstva s plochami o výměře větší než 1 ha, vpravo po aplikaci postklasifikačního filtru (modus), počet tříd 5