Cvičení 8 - Detekce hran
A) Teoretický úvod
Detekce hran patří spolu s redukcí šumu, jasovým a geometrickým transformacím k základním operacím s obrazem. Hrana je místo v obrazu, které vykazuje vysokou prostorovou frekvenci tj. skokovou změnu jasové funkce. Každý nesyntetický obraz však kromě skutečných hran obsahuje i nenulovou míru šumu, který se lokálně chová stejně jako hrana. Samotné detektory hran jsou sestaveny tak, aby byly citlivé na libovolnou skokovou změnu jasové funkce obrazu, tedy i na změny způsobené šumem. Aby se zabránilo falešné detekci hran je třeba obraz před samotnou hranovou filtrací vhodně upravit. K tomu může sloužit např. eliminace šumu Gaussovým filtrem popř. jinou i nelineární metodou (medián). Po provedení operace redukce šumu je na obraz aplikován některý ze standardních hranových filtrů, jejichž konvoluční jádra jsou uvedena na následujícím obrázku. Popořadě jde o detektor Robertsův, Prewittové, Sobelův, Robinsonův, Kirschův, Laplaceův ve čtyřokolí a Laplaceův v osmiokolí. Každý z detektorů má své výhody i nevýhody, proto univerzálně vhodný detektor neexistuje. Výsledkem je signál, který obsahuje všechny hrany obrazu, dokonce i ty nejmenší. Z toho důvodu je třeba se dále zabývat pojmem kvalita hrany. V nejjednodušším případě lze výsledný signál konvoluce prahovat a získat tak binární masku indikujcí místa hran.
Tato skupina hranových detektorů aproximuje derivace obrazové funkce diferencemi vzniklými diskrétní konvolucí. Prvních pět uvedených operátorů aproximuje první derivace obrazové funkce, Laplaceův operátor pro čtyřokolí i osmiokolí aproximuje druhou derivaci. Existují ještě hranové detektory nazývané souhrnně zero-crossing, které hledají hrany v místě, kde druhá derivace obrazové funkce prochází nulou např. operátor Marr a Hildrethové. Využívají implementační skutečnosti, že je jednodušší vyhledávat průchody signálu nulou, než jeho maxima.
Pomocí výše uvedených filtrů lze realizovat i operaci ostření obrazu, která má za cíl zvýraznit všechny hrany vyskytující se v obrazu. Myšlenkou je zvýšení aktuální strmosti hran. Definiční vztah pro úpravu ostrosti obrazu lze napsat následovně.
Symbol g(x,y) představuje výstupní ostřený obraz vstupního obrazu f(x,y), symbol C je míra ostření <0.0,1.0> a symbol S(x,y) strmost obrazové funkce v okolí vyšetřovaného bodu. Využít lze i postup kdy se naopak obraz nejdříve rozmaže. Následně se spočte rozdíl mezi původním a rozmazaným obrazem a tento rozdíl se přičte do výsledného obrazu.
V některých případech je třeba se zabývat kvalitou hrany hlouběji, než prostým prahováním. Prvním přiblížením je použití mechanismu tzv. prahování s hysterezí. Tento hysterezní mechanismus využívá i známý Cannyho hranový detektor. Ten pracuje tak, že po filtraci obrazu dvourozměrným Gaussovým filtrem jsou pomocí některého ze standardních detektorů (Roberts, Prewitt, Sobel) nalezeny velikosti hran ve všech čtyřech základních směrech (horizontální, vertikální a dva diagonální). Následně je provedena operace nemaximální suprese tzn. potlačení okolí lokálních maxim a poté je už aplikováno zmíněné prahování s hysterezí. Tento mechanismus pracuje tak, že jsou libovolnou metodou určeny dva prahy – vyšší TH a nižší TL. Smysl dvou prahových hodnot je v tom, že hodnoty hran vyšší, než práh TH jsou uznány jako hrany ihned v první iteraci a hodnoty pod prahem TL jsou naopak v první zamítnuty (jednou pro vždy). Hysterezní mechanismu tedy dále řeší pouze hrany, jejichž amplituda leží v intervalu <TL;TH>. Tyto hrany jsou následně uznávány pouze v případě, že v aktuální iteraci sousedí s některým z bodů uznaným jako hrana již v předchozích iteracích. Algoritmus se provádí do stavu idempotence tj. tak dlouho, až se výsledný obraz hran nezmění ve dvou po sobě jdoucích průchodech. Pokud jsou správně nastaveny parametry detektoru TH a TL, je výsledkem velmi kvalitní obraz hran vhodný pro další zpracování.
Na uvedeném obrázku je vlevo znázorněn signál odezvy Sobelova operátoru na vstupní obraz a uprostřed a vpravo je pro srovnání výsledků různých metod zobrazen binární prahovaný signál a výsledek Cannyho hranového detektoru.
B) Úkoly
- V obraz02.bmp zvýrazněte hrany pomocí všech výše uvedených operátorů a funkce ImageConv z předchozího cvičení a výsledky přehledně zobrazte do jednoho okna.
- Výsledek alespoň jednoho operátoru aproximujícího první derivaci srovnejte s knihovními funkcemi conv2 a imfilter. Sledujte výsledný datový typ, rozsah hodnot a rozdíl zobrazení s a bez [] na místě druhého parametru funkce imshow. Dále aplikujte a zobrazte pootočenou masku a sledujte rozdíl vzhledem k základní pozici.
- Nalezněte v obrazu hrany pomocí knihovní funkce edge s použitím metod Laplace-Gauss, Canny a Zero-cross. Jak se výsledky funkce edge liší od výsledků funkce imfilter?
- Napište funkci [J] = ImageEdgeDetector(I,Thigh,Tlow) pro detekci hran v obrazu využívající filtraci šumu, Sobelův operátor a mechanismus hystereze uvedený v teoretickém úvodu. Správnost implementace ověřte na obrazu obraz04.bmp srovnáním výsledku vaší funkce s jednoduše prahovaným výsledkem detekce hran Sobelovým operátorem. Prahy TL a TH volte tak, aby horní práh segmentoval pouze nejvýznamější kontury objektů a dolní práh je zřetelně doplnil o slabší hrany.
- Realizujte operaci ostření obrazu. Pro názornější ověření použijte uměle rozmazaný obraz lenaM.bmp.
Bonus: Pokuste se v rámci funkce ImageEdgeDetector implementovat i krok nemaximální suprese a porovnejte s knihovní funkcí edge s parametrem ‚canny‘.
C) Dobré vědět
- U funkce edge pozorujte vliv parametrů thresh, sigma, horizontal, vertical a both na výsledek operace hledání hran.
- Součet koeficientů konvolučního jádra pro ostření obrazu se musí stejně jako v případě hranových detektorů vždy rovnat nule.
- Povolené funkce: imfilter, conv2, edge, fspecial.