153YZOD Zpracování obrazových dat 2006 - 6. cvičení: Porovnání verzí
m (→seznam příkazů) |
m (upozorneni) |
||
(Není zobrazeno 42 mezilehlých verzí od 2 dalších uživatelů.) | |||
Řádek 1: | Řádek 1: | ||
<div class="boilerplate metadata" id="attention" style="border: 3px double #c32c2c; margin-bottom: 2em; padding: 0 .25em; background-color: #f96666;"> | |||
<p style="font-size: 150%; text-align: center;"><br/>'''Tento text se vztahuje k akademickému roku 2006/2007. Aktuální stránky cvičení jsou dostupné [[153YZOD Zpracování obrazových dat - cvičení 6|zde]].'''<br/> </p> | |||
<div style="clear: both;"><br style="clear: both; display: none;" /></div> | |||
</div> | |||
{{ZOD}} | |||
[ [[Zpracování obrazových dat]] ] | |||
= Detekce hran, ostřící operátory, prahování = | = Detekce hran, ostřící operátory, prahování = | ||
__TOC__ | |||
== osnona == | == osnona == | ||
V tomto kurzu budeme pokračovat v tématu ''lokálního'' zvýraznění obrazu. Zaměříme se na filtry určené pro ''[http://en.wikipedia.org/wiki/Edge_detection detekci hran]'' a ''ostřící operátory''. Na jednoduchých příkladech bude předvedena metoda ''práhování''. | V tomto kurzu budeme pokračovat v tématu ''lokálního'' zvýraznění obrazu. Zaměříme se na filtry určené pro ''[http://en.wikipedia.org/wiki/Edge_detection detekci hran]'' a ''ostřící operátory''. Na jednoduchých příkladech bude předvedena metoda ''práhování'' obrazu. | ||
== seznam příkazů == | == seznam příkazů == | ||
* [http://grass.itc.it/grass60/manuals/html60_user/r.mfilter.html r. | * [http://grass.itc.it/grass60/manuals/html60_user/r.mfilter.html r.mfilter] | ||
* [http://grass.itc.it/grass60/manuals/html60_user/r.region.html g.region] | |||
* [http://grass.itc.it/grass60/manuals/html60_user/r.colors.html r.colors] | |||
* [http://grass.itc.it/grass60/manuals/html60_user/d.rast.html d.rast] | |||
* [http://grass.itc.it/grass60/manuals/html60_user/r.mapcalc.html r.mapcalc] | |||
* [http://grass.itc.it/grass60/manuals/html60_user/d.rgb.html d.rgb] | |||
* [http://grass.itc.it/grass60/manuals/html60_user/d.erase.html d.erase] | |||
* [http://grass.itc.it/grass60/manuals/html60_user/g.copy.html g.copy] | |||
* [http://grass.itc.it/grass60/manuals/html60_user/g.remove.html g.remove] | |||
== detekce hran == | == detekce hran == | ||
Hranu lze definovat jako ''diskontinuitu'' obrazové funkce (tj. signifikatní změnu digitálních hodnot). Hrana je tedy oblast v obraze, kde se výrazně nebo skokově mění hodnota stupňů šedi. Hrany lze rozdělit na tři typy: | Hranu lze definovat jako ''diskontinuitu'' obrazové funkce (tj. signifikatní změnu digitálních hodnot). Hrana je tedy oblast v obraze, kde se výrazně nebo skokově mění hodnota stupňů šedi. Hrany lze rozdělit na tři základní typy: | ||
* ''střechová hrana'' (roof edge) - | * ''střechová hrana'' (roof edge) - světlejší liniový útvar na tmavším pozadí (např. polní cesta, betonová silnice) | ||
* ''příkopová hrana'' (ditch edge) - tmavší liniový útvar na světlejším pozadí (např. vodní tok) | * ''příkopová hrana'' (ditch edge) - tmavší liniový útvar na světlejším pozadí (např. vodní tok) | ||
* ''stupňová hrana'' (step edge) - rozhraní mezi tmavějším a světlejším objektem (např. rozhraní pole-les) | * ''stupňová hrana'' (step edge) - rozhraní mezi tmavějším a světlejším objektem (např. rozhraní pole-les) | ||
Filtry určené k detekci hran jsou založeny na principu ''plovoucího okna''. Tím se vyhledávají lokální hrany, v další fázi je nutno rozhodnout, zda jde o skutečné hrany či pouhé vnitřní nespojitosti obrazu. Zde se obvykle používá metoda ''práhování''. Nakonec se provádí ''ztenčení hran'' a konečná filtrace. | Filtry (vysokofrekvenční) určené k detekci hran jsou založeny na principu ''plovoucího okna''. Tím se vyhledávají lokální hrany, v další fázi je nutno rozhodnout, zda jde o skutečné hrany či pouhé vnitřní nespojitosti obrazu. Zde se obvykle používá metoda ''práhování''. Nakonec se provádí ''ztenčení hran'' a konečná filtrace. | ||
Následuje výběr hranových operátorů a jejich definice pro GRASS. | Následuje výběr hranových operátorů a jejich definice pro GRASS. | ||
Řádek 25: | Řádek 38: | ||
'''[http://en.wikipedia.org/wiki/Sobel Sobelův filtr]''' | '''[http://en.wikipedia.org/wiki/Sobel Sobelův filtr]''' | ||
Tento filtr nejdříve operuje ve směru sever-jih (N-S) a následně ve směru východ-západ (E-W), jeho definice pro <tt>r.mfilter</tt> je následující ([http:// | Tento filtr nejdříve operuje ve směru sever-jih (N-S) a následně ve směru východ-západ (E-W), jeho definice pro <tt>r.mfilter</tt> je následující ([http://gama.fsv.cvut.cz/~landa/geowikicz_data/zod/cv6/sobel.txt sobel.txt]): | ||
TITLE Sobel (3x3) | TITLE Sobel (3x3) | ||
Řádek 42: | Řádek 55: | ||
TYPE P | TYPE P | ||
Následují již dobře | Následují již dobře známé příkazy: | ||
GRASS > g.region rast=tm1 | GRASS~ > g.region rast=tm1 | ||
GRASS > r.mfilter input=tm1 output=tm1_sobel filter=sobel.txt | GRASS~ > r.mfilter input=tm1 output=tm1_sobel filter=sobel.txt | ||
GRASS > r.colors map=tm1_sobel color=grey.eq | GRASS~ > r.colors map=tm1_sobel color=grey.eq | ||
# | # | ||
#nutno otevřít alespoň jeden GRASS monitor | #nutno otevřít alespoň jeden GRASS monitor | ||
# | # | ||
GRASS > d.rast tm1_sobel | GRASS~ > d.rast tm1_sobel | ||
[[Soubor:ZOD-cv6-tm1_tm1_sobel.png|frame|center|Obr. č. | [[Soubor:ZOD-cv6-tm1_tm1_sobel.png|frame|center|Obr. č.1: Vybraný detail prvního pásma LandSat-TM5, vlevo originální data, vpravo po aplikaci Sobelova filtru]] | ||
Dále můžeme provést [[práhování]] obrazu | Dále můžeme provést [[Zpracování obrazových dat - cvičení č.6#práhování|práhování]] obrazu | ||
pokud je DH kladná, ulož do výstupní vrstvy hodnotu "1", | pokud je DH kladná, ulož do výstupní vrstvy hodnotu "1", | ||
Řádek 61: | Řádek 74: | ||
v zápisu pro <tt>r.mapcalc</tt> vypadá podmínka '''if''' takto: | v zápisu pro <tt>r.mapcalc</tt> vypadá podmínka '''if''' takto: | ||
GRASS > r.mapcalc 'tm1_hrana=if (tm1_sobel > 0, 1, null())' | GRASS~ > r.mapcalc 'tm1_hrana=if (tm1_sobel > 0, 1, null())' | ||
GRASS > d.rast tm1_hrana | GRASS~ > d.rast tm1_hrana | ||
Nakonec můžeme provést ztenčení detekovaných hran pomocí modulu <tt>r.thin</tt>: | Nakonec můžeme provést ztenčení detekovaných hran pomocí modulu <tt>r.thin</tt>: | ||
Řádek 68: | Řádek 81: | ||
#ztenčení hran | #ztenčení hran | ||
# | # | ||
GRASS > r.thin input=tm1_hrana output=tm1_hrana1 | GRASS~ > r.thin input=tm1_hrana output=tm1_hrana1 | ||
GRASS > d.rast tm1_hrana1 | GRASS~ > d.rast tm1_hrana1 | ||
[[Soubor:ZOD-cv6-tm1_tm1_hrany.png|frame|center|Obr. č. | [[Soubor:ZOD-cv6-tm1_tm1_hrany.png|frame|center|Obr. č.2: Detekované hrany po binarizaci (vlevo) a jejich ztenčení (vpravo)]] | ||
#barevná syntéza ve skutečných barvách | #barevná syntéza ve skutečných barvách | ||
# | # | ||
GRASS > d.rgb red=tm3 green=tm2 blue=tm1 | GRASS~ > d.rgb red=tm3 green=tm2 blue=tm1 | ||
# | # | ||
#zobrazení rastrové vrstvy se ztenčenými hranami (pozor na přepínač -o: transparetní mód) | #zobrazení rastrové vrstvy se ztenčenými hranami (pozor na přepínač -o: transparetní mód) | ||
# | # | ||
GRASS > d.rast -o tm1_hrana1 | GRASS~ > d.rast -o tm1_hrana1 | ||
[[Soubor:ZOD-cv6-rgb_hrany.png|frame|center|Obr. č. | [[Soubor:ZOD-cv6-rgb_hrany.png|frame|center|Obr. č.3: Prezentace výsledků Sobelova filtru, na pozadí barevná syntéza ve skutečných barvách]] | ||
'''[http://en.wikipedia.org/wiki/Roberts_Cross Robertsův gradient]''' | '''[http://en.wikipedia.org/wiki/Roberts_Cross Robertsův gradient]''' | ||
<math> | Tento operátor je definován vztahem | ||
<math>p(i,j) = |f(i,j) - f(i+1,j+1)| + |f(i+1,j) - f(i,j+1)|\,</math> | |||
v zápisu pro <tt>r.mapcalc</tt> vypadá takto: | |||
#aplikace Robertsova grafientu | #aplikace Robertsova grafientu | ||
# | # | ||
GRASS > r.mapcalc 'tm1_roberts = abs (tm1[0,0]-tm1[1,1]) + abs (tm1[1,0]-tm1[0,1])' | GRASS~ > r.mapcalc 'tm1_roberts = abs (tm1[0,0]-tm1[1,1]) + abs (tm1[1,0]-tm1[0,1])' | ||
GRASS > r.colors tm1_roberts col=grey.eq | GRASS~ > r.colors tm1_roberts col=grey.eq | ||
'''[http://en.wikipedia.org/wiki/Prewitt Prewittův operátor]''' | '''[http://en.wikipedia.org/wiki/Prewitt Prewittův operátor]''' | ||
Definice pro <tt>r.mfilter</tt> ([http:// | Definice pro <tt>r.mfilter</tt> ([http://gama.fsv.cvut.cz/~landa/geowikicz_data/zod/cv6/prewitt.txt prewitt.txt]): | ||
TITLE Prewittuv operator (3x3) | TITLE Prewittuv operator (3x3) | ||
Řádek 111: | Řádek 128: | ||
TYPE P | TYPE P | ||
GRASS > r.mfilter in=tm1 out=tm1_prewitt filter=prewitt.txt | GRASS~ > r.mfilter in=tm1 out=tm1_prewitt filter=prewitt.txt | ||
GRASS~ > r.colors map=tm1_prewitt color=grey.eq | |||
[[Soubor:ZOD-cv6-tm1_roberts_prewitt.png|frame|center|Obr č. | [[Soubor:ZOD-cv6-tm1_roberts_prewitt.png|frame|center|Obr č.4: První kanál LandSat-TM5, Robertsův a Prewittův operátor]] | ||
== práhování == | == práhování == | ||
Řádek 121: | Řádek 139: | ||
Této metody se často používá k vytvoření ''masky'', kde oblasti s hodnotou "0" (nebo "žádná data") jsou maskovány a do dalších analýz vstupují pouze oblasti s hodnotou masky "1" (či zcela obecně s nenulovou hodnotou). | Této metody se často používá k vytvoření ''masky'', kde oblasti s hodnotou "0" (nebo "žádná data") jsou maskovány a do dalších analýz vstupují pouze oblasti s hodnotou masky "1" (či zcela obecně s nenulovou hodnotou). | ||
Nalezení ''práhu'' se většinou děje "empericky", jeho automatické určení je poměrně obtížné. | Nalezení ''práhu'' se většinou děje "empericky", jeho automatické určení je poměrně obtížné. Rozlišujeme dva základní typy: | ||
* ''jednoduchý práh'' | * ''jednoduchý práh'' | ||
Řádek 137: | Řádek 155: | ||
#v případě předešlé změny aktivního regionu, je nutné jej znovu přenastavit... | #v případě předešlé změny aktivního regionu, je nutné jej znovu přenastavit... | ||
# | # | ||
GRASS > g.region rast=tm4 | GRASS~ > g.region rast=tm4 | ||
# | # | ||
#vytvoření masky pevniny (rastrová vrstva 'pevnina') | #vytvoření masky pevniny (rastrová vrstva 'pevnina') | ||
# | # | ||
GRASS > r.mapcalc 'pevnina = if(tm4 >= 40, 1, 0)' | GRASS~ > r.mapcalc 'pevnina = if(tm4 >= 40, 1, 0)' | ||
# | # | ||
#aktivace masky (vytvoření kopie s unikátním jménem 'MASK') | #aktivace masky (vytvoření kopie s unikátním jménem 'MASK') | ||
# | # | ||
GRASS > g.copy rast=pevnina,MASK | GRASS~ > g.copy rast=pevnina,MASK | ||
Vizualizace této velmi jednoduché klasifikace (vodní plochy a pevnina): | Vizualizace této velmi jednoduché klasifikace (vodní plochy a pevnina): | ||
Řádek 151: | Řádek 169: | ||
#zobrazit RGB syntézu ve skutečných barvách, barva pozadí modrá | #zobrazit RGB syntézu ve skutečných barvách, barva pozadí modrá | ||
# | # | ||
GRASS > d.erase blue | GRASS~ > d.erase blue | ||
GRASS > d.rgb -o red=tm3 green=tm2 blue=tm1 | GRASS~ > d.rgb -o red=tm3 green=tm2 blue=tm1 | ||
# | |||
#zobrazit vektorovou vrstvu s hranicemi vodních ploch (kromě Nechranické nádrže) | |||
#barva hranic červená | |||
# | |||
GRASS~ > d.vect map=voda type=boundary color=red | |||
[[Soubor:ZOD-cv6-rgb_voda.png|frame|center|Obr č. | [[Soubor:ZOD-cv6-rgb_voda.png|frame|center|Obr č.5: Maskování vodních ploch určených práhováním tm4, barevná syntéza ve skutečných barvách a vektorová vrstva vodních ploch]] | ||
Masku deaktivujeme odstraněním rastrové vrstvy | Masku deaktivujeme odstraněním rastrové vrstvy <u>MASK</u>. | ||
GRASS > g.remove rast=MASK | GRASS~ > g.remove rast=MASK | ||
* ''vícenásobný práh'' | * ''vícenásobný práh'' | ||
Řádek 167: | Řádek 190: | ||
p(i,j) = n: qn1 < f(i,j) < qnn | p(i,j) = n: qn1 < f(i,j) < qnn | ||
Příklad: V kurzu [Zpracování obrazových dat - cvičení č.4] byla provedena jednoduchá reklasifikace NDVI podle následujícího reklasifikačního pravidla: | Příklad: V kurzu [[Zpracování obrazových dat - cvičení č.4#reklasifikace rastrových dat|Mapová algebra, sčítání, odčítání rastrových dat, podíl obrazu, NDVI]] byla provedena jednoduchá reklasifikace NDVI podle následujícího reklasifikačního pravidla: | ||
-100 thru 5 = 1 bez vegetace, vodni plochy | -100 thru 5 = 1 bez vegetace, vodni plochy | ||
Řádek 173: | Řádek 196: | ||
35 thru 87 = 3 plochy pokryte vegetaci | 35 thru 87 = 3 plochy pokryte vegetaci | ||
Podobnou reklasifikaci lze provést přímo pomocí <tt>r.mapcalc</tt> a vícenásobného práhu (navíc se obejdeme bez nutnosti vytvářet celočíselnou mapu pro <tt>r.reclass</tt>. | Podobnou reklasifikaci lze provést přímo pomocí <tt>r.mapcalc</tt> a vícenásobného práhu (navíc se obejdeme bez nutnosti vytvářet celočíselnou mapu pro <tt>r.reclass</tt>). | ||
#klasifikace NDVI | #klasifikace NDVI | ||
# | # | ||
GRASS > r.mapcalc 'r_ndvi1 = eval( \ | GRASS~ > r.mapcalc 'r_ndvi1 = eval( \ | ||
a=if(ndvi >= -1.0 && ndvi < 0.05, 1, 0), \ | a=if(ndvi >= -1.0 && ndvi < 0.05, 1, 0), \ | ||
b=if(ndvi >= 0.05 && ndvi < 0.35, 2, 0), \ | b=if(ndvi >= 0.05 && ndvi < 0.35, 2, 0), \ | ||
c=if(ndvi >= 0.35 && ndvi < 0.87, 4, 0),a+b+c)' | c=if(ndvi >= 0.35 && ndvi < 0.87, 4, 0),a+b+c)' | ||
''Poznámka: Během výpočtu se přechodně vytvoří tři rastrové vrstvy <u>a</u>, <u>b</u> a <u>c</u>, výsledná vrstva vznikne součtem těchto tří vrstev.'' | |||
== ostření obrazu == | == ostření obrazu == | ||
Řádek 186: | Řádek 211: | ||
Ostřící operátory ve své podstatě zvyšují lokální maxima a snižují lokální minima. Přičemž vycházejí z myšlenky první a druhé derivace, kterou lze v diskrétním obraze přibližně provádět pomocí diferencí. | Ostřící operátory ve své podstatě zvyšují lokální maxima a snižují lokální minima. Přičemž vycházejí z myšlenky první a druhé derivace, kterou lze v diskrétním obraze přibližně provádět pomocí diferencí. | ||
Jako příklad můžeme uvést La Placeův modifikovaný filtr ([http:// | Jako příklad můžeme uvést La Placeův modifikovaný filtr ([http://gama.fsv.cvut.cz/~landa/geowikicz_data/zod/cv6/mlp.txt mlp.txt]): | ||
TITLE modifikovany La Placeuv (3x3) | TITLE modifikovany La Placeuv (3x3) | ||
Řádek 198: | Řádek 223: | ||
#raději nastavit aktivní region... | #raději nastavit aktivní region... | ||
# | # | ||
GRASS > g.region rast=tm1 | GRASS~ > g.region rast=tm1 | ||
GRASS > r.mfilter input=tm1 output=tm1_mlp filter=mlp.txt | GRASS~ > r.mfilter input=tm1 output=tm1_mlp filter=mlp.txt | ||
# | # | ||
#nastavit tabulku barev na vyrovnané odstíny šedi | #nastavit tabulku barev na vyrovnané odstíny šedi | ||
# | # | ||
GRASS > r.colors map= | GRASS~ > r.colors map=tm1_mlp color=grey.eq | ||
[[Soubor:ZOD-cv6- | [[Soubor:ZOD-cv6-tm1_tm1_mlp.png|frame|center|Obr č.6: První pásmo LandSat-TM5 - původní data, po aplikaci modifikovaného La Placeova filtru]] | ||
Alternativně lze použít operátor definovaný vztahem: | Alternativně lze použít operátor definovaný vztahem: | ||
<math>p(i,j) = f(i,j) + f(i,j) - \frac{1}{9} \ | <math>p(i,j) = f(i,j) + f(i,j) - \frac{1}{9} \bigg(\sum_{k=-1}^1\sum_{l=-1}^1 f(i+k, j+l)\,.\, k_1\bigg) + k_2</math> | ||
Rovnice pro <tt>r.mapcalc</tt>: | Rovnice pro <tt>r.mapcalc</tt> (''k<sub>1</sub>'' = 1; ''k<sub>2</sub>'' = 2): | ||
GRASS > tm1_o2 = tm1[0,0] + tm1[0,0] - \ | GRASS~ > r.mapcalc 'tm1_o2 = tm1[0,0] + tm1[0,0] - \ | ||
(tm1[-1,-1]+tm1[-1,0]+tm1[-1,1] + \ | (tm1[-1,-1]+tm1[-1,0]+tm1[-1,1] + \ | ||
tm1[0,-1]+tm1[0,0]+tm1[0,1] + \ | tm1[0,-1]+tm1[0,0]+tm1[0,1] + \ | ||
tm1[1,-1]+tm1[1,0]+tm1[1,1] * 1)/9 + 2 | tm1[1,-1]+tm1[1,0]+tm1[1,1] * 1)/9 + 2' | ||
# | |||
#nastavit tabulku barev | |||
# | |||
GRASS~ > r.colors map=tm1_o2 color=grey.eq | |||
[[Soubor:ZOD-cv6-tm1_tm1_o2.png|frame|center|Obr č.7: První pásmo LandSat-TM5 - původní data, po aplikaci ostřícího operátoru]] | |||
[[ | [ [[Zpracování obrazových dat]] ] |
Aktuální verze z 19. 11. 2008, 18:55
Detekce hran, ostřící operátory, prahování
osnona
V tomto kurzu budeme pokračovat v tématu lokálního zvýraznění obrazu. Zaměříme se na filtry určené pro detekci hran a ostřící operátory. Na jednoduchých příkladech bude předvedena metoda práhování obrazu.
seznam příkazů
detekce hran
Hranu lze definovat jako diskontinuitu obrazové funkce (tj. signifikatní změnu digitálních hodnot). Hrana je tedy oblast v obraze, kde se výrazně nebo skokově mění hodnota stupňů šedi. Hrany lze rozdělit na tři základní typy:
- střechová hrana (roof edge) - světlejší liniový útvar na tmavším pozadí (např. polní cesta, betonová silnice)
- příkopová hrana (ditch edge) - tmavší liniový útvar na světlejším pozadí (např. vodní tok)
- stupňová hrana (step edge) - rozhraní mezi tmavějším a světlejším objektem (např. rozhraní pole-les)
Filtry (vysokofrekvenční) určené k detekci hran jsou založeny na principu plovoucího okna. Tím se vyhledávají lokální hrany, v další fázi je nutno rozhodnout, zda jde o skutečné hrany či pouhé vnitřní nespojitosti obrazu. Zde se obvykle používá metoda práhování. Nakonec se provádí ztenčení hran a konečná filtrace.
Následuje výběr hranových operátorů a jejich definice pro GRASS.
Tento filtr nejdříve operuje ve směru sever-jih (N-S) a následně ve směru východ-západ (E-W), jeho definice pro r.mfilter je následující (sobel.txt):
TITLE Sobel (3x3) MATRIX 3 -1 0 1 -2 0 2 -1 0 1 DIVISOR 1 TYPE P MATRIX 3 1 2 1 0 0 0 -1 -2 -1 DIVISOR 1 TYPE P
Následují již dobře známé příkazy:
GRASS~ > g.region rast=tm1 GRASS~ > r.mfilter input=tm1 output=tm1_sobel filter=sobel.txt GRASS~ > r.colors map=tm1_sobel color=grey.eq # #nutno otevřít alespoň jeden GRASS monitor # GRASS~ > d.rast tm1_sobel
Dále můžeme provést práhování obrazu
pokud je DH kladná, ulož do výstupní vrstvy hodnotu "1", v opačném případě "žádná data" (null data)
v zápisu pro r.mapcalc vypadá podmínka if takto:
GRASS~ > r.mapcalc 'tm1_hrana=if (tm1_sobel > 0, 1, null())' GRASS~ > d.rast tm1_hrana
Nakonec můžeme provést ztenčení detekovaných hran pomocí modulu r.thin:
#ztenčení hran # GRASS~ > r.thin input=tm1_hrana output=tm1_hrana1 GRASS~ > d.rast tm1_hrana1
#barevná syntéza ve skutečných barvách # GRASS~ > d.rgb red=tm3 green=tm2 blue=tm1 # #zobrazení rastrové vrstvy se ztenčenými hranami (pozor na přepínač -o: transparetní mód) # GRASS~ > d.rast -o tm1_hrana1
Tento operátor je definován vztahem
v zápisu pro r.mapcalc vypadá takto:
#aplikace Robertsova grafientu # GRASS~ > r.mapcalc 'tm1_roberts = abs (tm1[0,0]-tm1[1,1]) + abs (tm1[1,0]-tm1[0,1])' GRASS~ > r.colors tm1_roberts col=grey.eq
Definice pro r.mfilter (prewitt.txt):
TITLE Prewittuv operator (3x3) MATRIX 3 -1 -1 -1 0 0 0 1 1 1 DIVISOR 1 TYPE P MATRIX 3 -1 0 1 -1 0 1 -1 0 1 DIVISOR 1 TYPE P
GRASS~ > r.mfilter in=tm1 out=tm1_prewitt filter=prewitt.txt GRASS~ > r.colors map=tm1_prewitt color=grey.eq
práhování
Práhováním se rozumí převod DH do množiny o malém počtu prvků, zpravidla do množiny {0,1} (v tomto případě můžeme mluvit o binarizaci obrazových dat). V jistém ohledu lze práhování považovat za segmentaci či velmi jednoduchý způsob klasifikace obrazu.
Této metody se často používá k vytvoření masky, kde oblasti s hodnotou "0" (nebo "žádná data") jsou maskovány a do dalších analýz vstupují pouze oblasti s hodnotou masky "1" (či zcela obecně s nenulovou hodnotou).
Nalezení práhu se většinou děje "empericky", jeho automatické určení je poměrně obtížné. Rozlišujeme dva základní typy:
- jednoduchý práh
p(i,j) = 1: f(i,j) >= q p(i,j) = 0: f(i,j) < q
Příklad - vytvoření masky pevniny:
Čtvrté pásmo LandSat-TM5 (IR) lze použít pro velmi jednoduché určení vodních ploch:
DH < 40 vodní plocha DH >= 40 pevnina
#v případě předešlé změny aktivního regionu, je nutné jej znovu přenastavit... # GRASS~ > g.region rast=tm4 # #vytvoření masky pevniny (rastrová vrstva 'pevnina') # GRASS~ > r.mapcalc 'pevnina = if(tm4 >= 40, 1, 0)' # #aktivace masky (vytvoření kopie s unikátním jménem 'MASK') # GRASS~ > g.copy rast=pevnina,MASK
Vizualizace této velmi jednoduché klasifikace (vodní plochy a pevnina):
#zobrazit RGB syntézu ve skutečných barvách, barva pozadí modrá # GRASS~ > d.erase blue GRASS~ > d.rgb -o red=tm3 green=tm2 blue=tm1 # #zobrazit vektorovou vrstvu s hranicemi vodních ploch (kromě Nechranické nádrže) #barva hranic červená # GRASS~ > d.vect map=voda type=boundary color=red
Masku deaktivujeme odstraněním rastrové vrstvy MASK.
GRASS~ > g.remove rast=MASK
- vícenásobný práh
p(i,j) = 0: f(i,j) <= q1 p(i,j) = 1: q1 < f(i,j) <= q2 ... p(i,j) = n: qn1 < f(i,j) < qnn
Příklad: V kurzu Mapová algebra, sčítání, odčítání rastrových dat, podíl obrazu, NDVI byla provedena jednoduchá reklasifikace NDVI podle následujícího reklasifikačního pravidla:
-100 thru 5 = 1 bez vegetace, vodni plochy 5 thru 35 = 2 plochy s minimalni vegetaci 35 thru 87 = 3 plochy pokryte vegetaci
Podobnou reklasifikaci lze provést přímo pomocí r.mapcalc a vícenásobného práhu (navíc se obejdeme bez nutnosti vytvářet celočíselnou mapu pro r.reclass).
#klasifikace NDVI # GRASS~ > r.mapcalc 'r_ndvi1 = eval( \ a=if(ndvi >= -1.0 && ndvi < 0.05, 1, 0), \ b=if(ndvi >= 0.05 && ndvi < 0.35, 2, 0), \ c=if(ndvi >= 0.35 && ndvi < 0.87, 4, 0),a+b+c)'
Poznámka: Během výpočtu se přechodně vytvoří tři rastrové vrstvy a, b a c, výsledná vrstva vznikne součtem těchto tří vrstev.
ostření obrazu
Ostřící operátory ve své podstatě zvyšují lokální maxima a snižují lokální minima. Přičemž vycházejí z myšlenky první a druhé derivace, kterou lze v diskrétním obraze přibližně provádět pomocí diferencí.
Jako příklad můžeme uvést La Placeův modifikovaný filtr (mlp.txt):
TITLE modifikovany La Placeuv (3x3) MATRIX 3 0 -1 0 -1 4 -1 0 -1 0 DIVISOR 1 TYPE P
#raději nastavit aktivní region... # GRASS~ > g.region rast=tm1 GRASS~ > r.mfilter input=tm1 output=tm1_mlp filter=mlp.txt # #nastavit tabulku barev na vyrovnané odstíny šedi # GRASS~ > r.colors map=tm1_mlp color=grey.eq
Alternativně lze použít operátor definovaný vztahem:
Rovnice pro r.mapcalc (k1 = 1; k2 = 2):
GRASS~ > r.mapcalc 'tm1_o2 = tm1[0,0] + tm1[0,0] - \ (tm1[-1,-1]+tm1[-1,0]+tm1[-1,1] + \ tm1[0,-1]+tm1[0,0]+tm1[0,1] + \ tm1[1,-1]+tm1[1,0]+tm1[1,1] * 1)/9 + 2' # #nastavit tabulku barev # GRASS~ > r.colors map=tm1_o2 color=grey.eq