153ZODH / 6. cvičení: Porovnání verzí
m ostreni obrazu |
m 155zddp |
||
(Není zobrazeno 17 mezilehlých verzí od stejného uživatele.) | |||
Řádek 1: | Řádek 1: | ||
{{Zastaralé|155ZDDP}} | |||
{{Cvičení|153ZODH|6|Detekce hran, ostřící operátory, prahování}} | |||
== Osnova == | |||
''Lokální'' zvýraznění obrazu, filtry určené pro ''[http://en.wikipedia.org/wiki/Edge_detection detekci hran]'' a ''ostřící operátory''. | |||
=== Seznam příkazů === | |||
* {{GrassPrikaz|r.mfilter}} | |||
* {{GrassPrikaz|r.colors}} | |||
* {{GrassPrikaz|r.mapcalc}} | |||
* {{GrassPrikaz|d.rgb}} | |||
* {{GrassPrikaz|g.copy}} | |||
* {{GrassPrikaz|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 | 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í digitální hodnota. 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) | * ''střechová hrana'' (roof edge) - světlejší liniový útvar na tmavším pozadí (např. polní cesta, betonová silnice) | ||
Řádek 19: | Řádek 24: | ||
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. | 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. | ||
'''[http://en.wikipedia.org/wiki/ | '''[http://en.wikipedia.org/wiki/Sobel_operator 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). Definice pro {{GrassPrikaz|r.mfilter}}: | Tento filtr nejdříve operuje ve směru sever-jih (N-S) a následně ve směru východ-západ (E-W). Definice pro {{GrassPrikaz|r.mfilter}}: | ||
Řádek 38: | Řádek 43: | ||
TYPE P | TYPE P | ||
<source lang="bash"> | |||
g.region rast=tm1 | g.region rast=tm1 | ||
r.mfilter input=tm1 output=tm1_sobel filter=sobel.txt | r.mfilter input=tm1 output=tm1_sobel filter=sobel.txt | ||
r.colors map=tm1_sobel color=grey | r.colors -e map=tm1_sobel color=grey | ||
d.rast tm1_sobel | d.rast map=tm1_sobel | ||
</source> | |||
[[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]] | [[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]] | ||
Řádek 47: | Řádek 54: | ||
Dále můžeme provést {{153YZODCv|6|Práhování|práhování}} obrazu | Dále můžeme provést {{153YZODCv|6|Práhování|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 {{GrassPrikaz|r.mapcalc}} vypadá podmínka '''if''' takto: | v zápisu pro {{GrassPrikaz|r.mapcalc}} vypadá podmínka '''if''' takto: | ||
<source lang="bash"> | |||
r.mapcalc 'tm1_hrana=if (tm1_sobel > 0, 1, null())' | r.mapcalc 'tm1_hrana=if (tm1_sobel > 0, 1, null())' | ||
d.rast tm1_hrana | d.rast map=tm1_hrana | ||
</source> | |||
Nakonec můžeme provést ztenčení detekovaných hran pomocí modulu {{GrassPrikaz|r.thin}}: | Nakonec můžeme provést ztenčení detekovaných hran pomocí modulu {{GrassPrikaz|r.thin}}: | ||
<source lang="bash"> | |||
# ztenčení hran | # ztenčení hran | ||
# | # | ||
r.thin input=tm1_hrana output=tm1_hrana1 | r.thin input=tm1_hrana output=tm1_hrana1 | ||
d.rast tm1_hrana1 | d.rast map=tm1_hrana1 | ||
</source> | |||
[[Soubor:ZOD-cv6-tm1_tm1_hrany.png|frame|center|Obr. č.2: Detekované hrany po binarizaci (vlevo) a jejich ztenčení (vpravo)]] | [[Soubor:ZOD-cv6-tm1_tm1_hrany.png|frame|center|Obr. č.2: Detekované hrany po binarizaci (vlevo) a jejich ztenčení (vpravo)]] | ||
<source lang="bash"> | |||
# barevná syntéza ve skutečných barvách | # barevná syntéza ve skutečných barvách | ||
# | # | ||
Řádek 70: | Řádek 81: | ||
# zobrazení rastrové vrstvy se ztenčenými hranami (pozor na přepínač -o: transparentní mód) | # zobrazení rastrové vrstvy se ztenčenými hranami (pozor na přepínač -o: transparentní mód) | ||
# | # | ||
d.rast -o tm1_hrana1 | d.rast -o map=tm1_hrana1 | ||
</source> | |||
[[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]] | [[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]] | ||
Řádek 82: | Řádek 94: | ||
v zápisu pro {{GrassPrikaz|r.mapcalc}}: | v zápisu pro {{GrassPrikaz|r.mapcalc}}: | ||
<source lang="bash"> | |||
# aplikace Robertsova grafientu | # aplikace Robertsova grafientu | ||
# | # | ||
r.mapcalc 'tm1_roberts = abs (tm1[0,0]-tm1[1,1]) + abs (tm1[1,0]-tm1[0,1])' | r.mapcalc 'tm1_roberts = abs (tm1[0,0]-tm1[1,1]) + abs (tm1[1,0]-tm1[0,1])' | ||
r.colors tm1_roberts | r.colors map=tm1_roberts color=grey.eq | ||
</source> | |||
'''[http://en.wikipedia.org/wiki/Prewitt Prewittův operátor]''' | '''[http://en.wikipedia.org/wiki/Prewitt Prewittův operátor]''' | ||
Řádek 106: | Řádek 120: | ||
TYPE P | TYPE P | ||
r.mfilter | <source lang="bash"> | ||
r.mfilter input=tm1 output=tm1_prewitt filter=prewitt.txt | |||
r.colors map=tm1_prewitt color=grey.eq | r.colors map=tm1_prewitt color=grey.eq | ||
</source> | |||
[[Soubor:ZOD-cv6-tm1_roberts_prewitt.png|frame|center|Obr č.4: První kanál LandSat-TM5, Robertsův a Prewittův operátor]] | [[Soubor:ZOD-cv6-tm1_roberts_prewitt.png|frame|center|Obr č.4: První kanál LandSat-TM5, Robertsův a Prewittův operátor]] | ||
Řádek 131: | Řádek 147: | ||
DH >= 40 pevnina | DH >= 40 pevnina | ||
<source lang="bash"> | |||
g.region rast=tm4 | g.region rast=tm4 | ||
# | # | ||
# vytvoření | # vytvoření rastrové mapy vodní plochy na základě jednoduchého práhu | ||
# | # | ||
r.mapcalc ' | r.mapcalc 'voda = if(tm4 < 40, 1, null())' | ||
# | # | ||
# | # nastavení vhodné tabulky barev (1 -> modrá barva) | ||
# | # | ||
</source> | |||
Vizualizace: | Vizualizace: | ||
# zobrazit RGB syntézu ve skutečných barvách | <source lang="bash"> | ||
# zobrazit RGB syntézu ve skutečných barvách a posléze i rastrovou mapu vodních ploch | |||
# | # | ||
d.rgb red=tm3 green=tm2 blue=tm1 | |||
d.rgb | d.rast -o map=voda | ||
# | # | ||
# zobrazit vektorovou vrstvu s hranicemi vodních ploch (kromě Nechranické nádrže) | # zobrazit vektorovou vrstvu s hranicemi vodních ploch (kromě Nechranické nádrže) | ||
Řádek 152: | Řádek 170: | ||
# | # | ||
d.vect map=voda type=boundary color=red | d.vect map=voda type=boundary color=red | ||
</source> | |||
[[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]] | [[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]] | ||
* ''vícenásobný práh'' | * ''vícenásobný práh'' | ||
Řádek 174: | Řádek 189: | ||
Podobnou reklasifikaci lze provést přímo pomocí {{GrassPrikaz|r.mapcalc}} a vícenásobného práhu (navíc se obejdeme bez nutnosti vytvářet celočíselnou mapu pro {{GrassPrikaz|r.reclass}}). | Podobnou reklasifikaci lze provést přímo pomocí {{GrassPrikaz|r.mapcalc}} a vícenásobného práhu (navíc se obejdeme bez nutnosti vytvářet celočíselnou mapu pro {{GrassPrikaz|r.reclass}}). | ||
<source lang="bash"> | |||
# klasifikace NDVI | # klasifikace NDVI | ||
# | # | ||
Řádek 180: | Řádek 196: | ||
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)' | ||
</source> | |||
''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.'' | ''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.'' | ||
Řádek 197: | Řádek 214: | ||
TYPE P | TYPE P | ||
<source lang="bash"> | |||
g.region rast=tm1 | g.region rast=tm1 | ||
r.mfilter input=tm1 output=tm1_mlp filter=mlp.txt | r.mfilter input=tm1 output=tm1_mlp filter=mlp.txt | ||
Řádek 203: | Řádek 221: | ||
# | # | ||
r.colors map=tm1_mlp color=grey.eq | r.colors map=tm1_mlp color=grey.eq | ||
</source> | |||
[[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]] | [[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]] | ||
Řádek 212: | Řádek 231: | ||
Rovnice pro {{GrassPrikaz|r.mapcalc}} (''k<sub>1</sub>'' = 1; ''k<sub>2</sub>'' = 2): | Rovnice pro {{GrassPrikaz|r.mapcalc}} (''k<sub>1</sub>'' = 1; ''k<sub>2</sub>'' = 2): | ||
<source lang="bash"> | |||
r.mapcalc 'tm1_o2 = tm1[0,0] + tm1[0,0] - \ | 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] + \ | ||
Řádek 220: | Řádek 240: | ||
# | # | ||
r.colors map=tm1_o2 color=grey.eq | r.colors map=tm1_o2 color=grey.eq | ||
</source> | |||
[[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]] | [[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]] | ||
{{ZOD}} | {{ZOD}} | ||
{{GRASS}} |
Aktuální verze z 5. 9. 2014, 18:47
Detekce hran, ostřící operátory, prahování
Osnova
Lokální zvýraznění obrazu, filtry určené pro detekci hran a ostřící operátory.
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í digitální hodnota. 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.
Tento filtr nejdříve operuje ve směru sever-jih (N-S) a následně ve směru východ-západ (E-W). Definice pro r.mfilter:
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
g.region rast=tm1
r.mfilter input=tm1 output=tm1_sobel filter=sobel.txt
r.colors -e map=tm1_sobel color=grey
d.rast map=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:
r.mapcalc 'tm1_hrana=if (tm1_sobel > 0, 1, null())'
d.rast map=tm1_hrana
Nakonec můžeme provést ztenčení detekovaných hran pomocí modulu r.thin:
# ztenčení hran
#
r.thin input=tm1_hrana output=tm1_hrana1
d.rast map=tm1_hrana1

# barevná syntéza ve skutečných barvách
#
d.rgb red=tm3 green=tm2 blue=tm1
#
# zobrazení rastrové vrstvy se ztenčenými hranami (pozor na přepínač -o: transparentní mód)
#
d.rast -o map=tm1_hrana1

Tento operátor je definován vztahem
v zápisu pro r.mapcalc:
# aplikace Robertsova grafientu
#
r.mapcalc 'tm1_roberts = abs (tm1[0,0]-tm1[1,1]) + abs (tm1[1,0]-tm1[0,1])'
r.colors map=tm1_roberts color=grey.eq
Definice pro r.mfilter:
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
r.mfilter input=tm1 output=tm1_prewitt filter=prewitt.txt
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ě mluvíme 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
g.region rast=tm4
#
# vytvoření rastrové mapy vodní plochy na základě jednoduchého práhu
#
r.mapcalc 'voda = if(tm4 < 40, 1, null())'
#
# nastavení vhodné tabulky barev (1 -> modrá barva)
#
Vizualizace:
# zobrazit RGB syntézu ve skutečných barvách a posléze i rastrovou mapu vodních ploch
#
d.rgb red=tm3 green=tm2 blue=tm1
d.rast -o map=voda
#
# zobrazit vektorovou vrstvu s hranicemi vodních ploch (kromě Nechranické nádrže)
# barva hranic červená
#
d.vect map=voda type=boundary color=red

- 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: Během čtvrtého cvičení 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
#
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 zvyšují lokální maxima a snižují lokální minima. Vycházejí z 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:
TITLE modifikovany La Placeuv (3x3) MATRIX 3 0 -1 0 -1 4 -1 0 -1 0 DIVISOR 1 TYPE P
g.region rast=tm1
r.mfilter input=tm1 output=tm1_mlp filter=mlp.txt
#
# nastavit tabulku barev na vyrovnané odstíny šedi
#
r.colors map=tm1_mlp color=grey.eq

Alternativně lze použít operátor definovaný vztahem:
Rovnice pro r.mapcalc (k1 = 1; k2 = 2):
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
#
r.colors map=tm1_o2 color=grey.eq
