153ZODH / 6. cvičení: Porovnání verzí
m sablona |
→Osnova: detekce hran |
||
Řádek 8: | Řádek 8: | ||
__TOC__ | __TOC__ | ||
== Osnova == | == Osnova == | ||
== 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. | |||
'''[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). Definice pro {{GrassPrikaz|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 map=tm1_sobel color=grey.eq | |||
d.rast tm1_sobel | |||
[[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 {{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 {{r.mapcalc}} vypadá podmínka '''if''' takto: | |||
r.mapcalc 'tm1_hrana=if (tm1_sobel > 0, 1, null())' | |||
d.rast tm1_hrana | |||
Nakonec můžeme provést ztenčení detekovaných hran pomocí modulu {{GrassPrikaz|r.thin}}: | |||
# ztenčení hran | |||
# | |||
r.thin input=tm1_hrana output=tm1_hrana1 | |||
d.rast tm1_hrana1 | |||
[[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 | |||
# | |||
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 tm1_hrana1 | |||
[[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]''' | |||
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 {{GrassPrikaz|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 tm1_roberts col=grey.eq | |||
'''[http://en.wikipedia.org/wiki/Prewitt Prewittův operátor]''' | |||
Definice pro {{GrassPrikaz|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 in=tm1 out=tm1_prewitt filter=prewitt.txt | |||
r.colors map=tm1_prewitt color=grey.eq | |||
[[Soubor:ZOD-cv6-tm1_roberts_prewitt.png|frame|center|Obr č.4: První kanál LandSat-TM5, Robertsův a Prewittův operátor]] | |||
Verze z 28. 10. 2008, 19:47
< Stránky předmětu • Předchozí cvičení • Další cvičení
Osnova
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.
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 map=tm1_sobel color=grey.eq 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 Šablona:R.mapcalc vypadá podmínka if takto:
r.mapcalc 'tm1_hrana=if (tm1_sobel > 0, 1, null())' d.rast 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 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 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 tm1_roberts col=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 in=tm1 out=tm1_prewitt filter=prewitt.txt r.colors map=tm1_prewitt color=grey.eq
