Segmentace obrazu¶
Segmentace obrazu je metoda, která slouží k automatickému rozdělení vlastního obrazu na oblasti se společnými vlastnostmi, které obvykle mají nějaký smysluplný význam. Výsledky segmentace jsou využitelné například při analýze obrazů získaných při dálkovém průzkumu Země (citace z české wikipedie).
Vstupní data¶
- letecké snímky viditelného (RGB) a blízkého infračerveného spektra (NIR)
- digitální model reliéfu (DMR) a povrchu (DMP)
- stíny (shadows)
Todo
Najít otevřená data pro tuto úlohu.
Import dat¶
Po spuštění systému GRASS vytvoříme novou lokaci buď na základě vstupních dat anebo pomocí EPSG kódu (v našem případě jde o S-JTSK EPSG:5514).
Vstupní data naimportujeme do mapsetu PERMANENT, viz poznámky k importu rastrových dat ze školení GRASS GIS pro začátečníky.
Poznámka
RGB snímek se po importu rozpadne na tři rastrové mapy (rgb.1, rgb.2 a rgb.3), které jsou registrovány v obrazové skupině rgb, viz příkaz i.group. Jednotlivé obrazové kanály lze složit do barevné kompozice příkazem d.rgb, viz vizualizace dat.
Proces segmentace obrazu¶
Do segmentace obrazu bude vstupovat kromě pásem viditelného spektra (rgb.1, rgb.2 a rgb.3) také pásmo blízkého infračerveného spektra (nir). Vytvoříme obrazovou skupinu, která bude tyto vrstvy obsahovat. Nástroj pro správu obrazových skupin je dostupný z menu anebo jako příkaz i.group.
Důležité
Před dalším výpočtem je nutné nastavit korektní výpočetní region (viz školení GRASS GIS pro začátečníky). Vzhledem k tomu, že mají vstupní vrstvy RGB a NIR stejné prostorové umístění a rozlišení, stačí zvolit libovolnou vrstvu, např. nir.
Nástroj pro segmentaci obrazu i.segment je dostupný v menu .
Segmentaci obrazu budeme provádět v několika krocích. Výsledek prvního
běhu s práhem (threshold
) 0.01 použijeme pro další krok, kde
navýšíme práh na hodnotu 0.05. Výsledky první segmetace využijeme v
druhém běhu pomocí parametru seeds
. Objekty se společnými
spekrálními a geometrickými vlastnosti se spojí, jejich počet se
zmenší, viz Obr. 65.
# první běh (~ 4 350 000 objektů)
i.segment group=seg output=seg1 threshold=0.01
# druhý běh (~ 440 000 objektů)
i.segment group=seg output=seg2 threshold=0.05 seeds=seg1
Ve třetím kroku zvýšíme práh na hodnotu 0.09 a zároveň nastavíme minimální počet pixelů, které formují objekt na 15. Výsledek segmentace je znázorněn Obr. 66.
# třetí běh (~ 25 000 objektů)
i.segment group=seg output=seg3 threshold=0.09 minsize=15 seeds=seg2
Filtrace objektů¶
Jako podkladové vrstvy pro filtraci objektů využijeme vrstvu normalizovaného diferečního vegetačního indexu (NDVI) vypočteného z vrstev červeného (rgb.1) a blízkého infračerveného (nir) pásma viz. návod na jeho výpočet. Produkt NDVI můžeme vytvořit univerzálním nástrojem mapové albegry anebo přímo pomocí nástroje i.vi.
i.vi red=rgb.1 output=ndvi viname=ndvi nir=nir
Dále pomocí nástroje mapové albegry r.mapcalc ( ) vypočteme rastrovou mapu rozdílu výšek digitalního modelu povrchu a terénu:
r.mapcalc exp="diff = dmp - dmr"
Statistiku objektů odvozenou z vrstev NDVI a rozdílu výšek určíme pomocí specializovaného modulu i.segment.stats.
i.segment.stats map=seg3 rasters=ndvi,diff raster_statistics=mean area_measures=area vectormap=seg3
Poznámka
Nástroj i.segment.stats není standardní součástí systému GRASS, ale je distrubován jako tzv. addons - rozšíření. Modul nainstalujeme z menu .
Modul i.segment.stats pro svůj běž vyžaduje rozšíření r.object.geometry, které je nutné nainstalovat taktéž.
Na základě těchto atributů můžeme provést jednoduchou klasifikaci objektů. Např.
- budovy
diff_mean > 2.5 AND ndvi_mean < 0.1
Výběr objektů splňujících dané atributové podmínky můžeme provést pomocí správce atributových dat anebo přímo modulem v.extract.
v.extract input=seg3 where="diff_mean > 2.5 AND ndvi_mean < 0.1" output=budovy