153ZODH / 15. cvičení: Porovnání verzí
Řádek 75: | Řádek 75: | ||
<source lang=bash> | <source lang=bash> | ||
v.rast.stats vector=B_segment raster=B1 column=B1 | v.rast.stats vector=B_segment raster=B1 column=B1 | ||
</source> | |||
Jak ('brighness') vypočteme jako sumu středních hodnot jednotlivých kanálů: | |||
<source lang=bash> | |||
v.db.update B_segment column=brightness qcolumn="brightness+B1_mean" | |||
</source> | |||
Po výpočtu můžeme nepotřebné sloupečky z atributové tabulky odstranit. | |||
<source lang=bash> | |||
v.db.dropcolumn B_segment col=B1_n,B1_min,B1_max,B1_range,B1_cf_var,B1_sum | |||
</source> | </source> | ||
Verze z 13. 1. 2014, 18:28
Objektově orientovaná klasifikace
Osnova
Toto cvičení je zaměřeno možnosti objektově orientované klasifikace družicových snímků. V tomto ohledu navazuje na cvičení věnované klasifikaci, řizené klasifikaci a především segmentaci obrazu.
Seznam příkazů
Příprava
Nejprve nastavíme výpočetní region. Vzhledem k tomu, že je proces objektově orientované klasifikace poměrně výpočetně náročný, zvolíme menší region. V našem případě předpokládáme existenci již definované regionu uloženého jako 'ceske-budejovice-10km' (jde o region s offset 10km kolem města České Budějovice, viz návod).
g.region region=ceske-budejovice-10km -p
projection: 1 (UTM) zone: 33 datum: wgs84 ellipsoid: wgs84 north: 5439839.30457264 south: 5410176.48726338 west: 445117.66335159 east: 480328.80428671 nsres: 30.02309444 ewres: 29.99245395 rows: 988 cols: 1174 cells: 1159912
Před dalším výpočtem je vhodné obrazové kanály družicové scény, které budou vstupovat do procesu klasifikace upravit, minimálně nahradit místa bez informace hodnotou NULL - viz návod zde.
Dále potřebuje vytvořit obrazovou skupinu slouženou ze vstupních kanálů (vynechán je panchromatický kanál 'B6').
i.group group=B input=B1,B2,B3,B4,B5,B7
Ve wxGUI je pro vytvoření skupiny dostupný specializovaný interaktivní dialog (viz obr. níže).

Segmentace a statistika obrazových kanálů
Segmentaci obrazu provedeme příkazem i.segment.
i.segment group=B out=B_segment thresh=0.02 minsize=15

Vygenerované segmenty převedeme do vektorové reprezentace modulem r.to.vect a přidáme do atributové tabulky nové sloupce 'class' a 'brightness', zároveň odstraníme nepotřebný sloupec 'label'.
# vektorizace segmentů
r.to.vect -v B_segment out=B_segment type=area
# modifikace atributové tabulky
v.db.dropcolumn B_segment col=label
v.db.addcolumn B_segment col="class int"
v.db.addcolumn B_segment col="brightness double precision"
v.db.update B_segment col=brightness value=0
Dále do atributové tabulky uložíme statistiku segmentů spojenou s jednotlivými kanály obrazové scény. Příklad pro první kanál:
v.rast.stats vector=B_segment raster=B1 column=B1
Jak ('brighness') vypočteme jako sumu středních hodnot jednotlivých kanálů:
v.db.update B_segment column=brightness qcolumn="brightness+B1_mean"
Po výpočtu můžeme nepotřebné sloupečky z atributové tabulky odstranit.
v.db.dropcolumn B_segment col=B1_n,B1_min,B1_max,B1_range,B1_cf_var,B1_sum
Statistiku můžeme spočítat dávkově pomocí grafického modeleru anebo jednoduchého skriptu v jazyce Python:
import grass.script as grass
maps = grass.read_command('i.group', group='B', flags='g', quiet=True).splitlines()
for map in maps:
band = map.split('@', 1)[0]
grass.run_command('v.rast.stats', vector='B_segment',
raster=band, column=band)