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.
![../_images/segment-import.png](../_images/segment-import.png)
Obr. 62 Ukázka importu vstupních dat.
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.
![../_images/segment-rgb.png](../_images/segment-rgb.png)
Obr. 63 Ukázka vizualizace vstupních dat, složení barevné syntézy v pravých (skutečných) barvách.
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.
![../_images/segment-group.png](../_images/segment-group.png)
Obr. 64 Vytvoření obrazové skupiny pro segmentaci dat. Zadání názvu (1) a přidání rastrových map do skupiny (2).
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.
![../_images/segment-region.png](../_images/segment-region.png)
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
![../_images/segment-1-2.png](../_images/segment-1-2.png)
Obr. 65 Porovnání objektů vzniklých po prvním a druhém běhu segmentace obrazu.
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.
![../_images/segment-rgb-3.png](../_images/segment-rgb-3.png)
Obr. 66 Ukázka výsledku segmentace obrazu (třetí běh) a kanálu leteckého snímku.
# 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
![../_images/segment-ndvi.png](../_images/segment-ndvi.png)
Obr. 67 Vrstva normalizovaného diferenčního vegetačního indexu.
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"
![../_images/segment-diff.png](../_images/segment-diff.png)
Obr. 68 Rastrová mapa rozdílu výšek digitálního modelu povrchu a terénu (tabulka barev: differences).
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 .
![../_images/segment-stats-install.png](../_images/segment-stats-install.png)
Obr. 69 Instalace nástroje i.segment.stats.
Modul i.segment.stats pro svůj běž vyžaduje rozšíření r.object.geometry, které je nutné nainstalovat taktéž.
![../_images/segment-ndvi-diff.png](../_images/segment-ndvi-diff.png)
Obr. 70 Objekty s atributy průměrné hodnoty NDVI a rozdílu výšek.
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
![../_images/segment-budovy.png](../_images/segment-budovy.png)
Obr. 71 Vizualizace výsledku filtrace objektů budov na základě NDVI a rozdílu výšek.