Cvičení 6 - Lineární a nelineární filtrace
A) Teoretický úvod
Lineární a nelineární filtry se používají pro celou řadu operací úprav obrazu. Filtrace obrazu slouží k zesílení nebo naopak k potlačení určitých kmitočtových složek na úkor jiných. Cílem je nejčastěji potlačit šum (vyhlazení) a naopak zvýraznit charakteristické rysy (rohy, hrany). Lokální filtrace využívá pohyblivého okénka (kernelu) zpravidla tvaru kříže, kdy mluvíme o tzv. čtyřokolí (na obrázku vlevo) nebo tvaru čtverce, kdy mluvíme o tzv. osmiokolí (na obrázku uprostřed). Výjimečně se používá i jiné okolí (na obrázku vpravo), popřípadě nesymetrické okolí. Celý obraz se systematicky prochází (např. po řádcích) a kolem každého sledovaného bodu se zkoumá toto malé lokální okolí a na základě něho se určí nová hodnota ve středu okna a zapíše se do výsledného obrazu.
U lineárních filtrů je výsledná hodnota každého bodu stanovena jako lineární kombinace hodnot vstupního obrazu a zvoleného filtru (masky, váhy) ve stanoveném okolí. Příkladem je například průměrování. Lineární filtraci lze s výhodou řešit pomocí konvoluce (viz následující cvičení). Druhou třídou filtrů jsou filtry nelineární, mezi které patří pro zpracování obrazu zejména medián, filtr minima a filtr maxima. Narozdíl od lineárních filtrů nestanovuje nelineární filtr výstupní jas pixelu jako kombinaci pixelů okolí, ale podle jiného algoritmu, vybírá některou z hodnot ze stanoveného okolí. Názorným příkladem je minimální, resp. maximální, hodnota z okolí u filtru typu minimum (někdy eroze), resp. maximum (někdy dilatace – pozor, neplést s morfologickými operacemi dilatace a eroze). U filtru typu medián je odezva stanovena jako hodnota ležící uprostřed seřazené posloupnosti okolních hodnot filtrovaného bodu. Obecnou nevýhodou mediánové filtrace je porušování tenkých čar.
Speciální možností používanou při zpracování obrazu je filtrace rotující maskou. V tomto případě je zvolená maska rotována kolem filtrovaného bodu, např. jako na následujícícm obrázku pro masku 3×3, kdy je celkem devět možných poloh masky. Pro každou její pozici je spočítána míra homogenity jako např. součet diferencí. Filtrace se pak provádí jen pro jednu polohu masky, pro níž je míra homogenity nejvyšší (nejnižší diference/rozptyl). Takto je nalezeno to okolí bodu, které k němu patří s největší pravděpodobností. Filtrace rotující maskou tedy částečně řeší problémy s rozmazáváním a porušováním tenkých čar a ostrých rohů, nevýhodou je však vyšší časová náročnost výpočtu.
B) Úkoly
- Napište funkci [J] = ImageAverage(I,sizeN) realizující filtr pro redukci šumu v obrazu metodou průměrování pro velikosti jádra dané parametrem sizeN.
- Napište funkci [J] = ImageMedian(I,sizeN) realizující filtr pro redukci šumu v obrazu metodou mediánu pro velikosti jádra dané parametrem sizeN.
- Na obrazu lenaM.bmp ověřte správnost implementace obou funkcí, porovnejte jejich rychlost pro velikosti jádra 3×3, 5×5 a 7×7 a výsledky přehledně zobrazte v jednom okně.
- Seznamte se s knihovní funkcí imnoise, která přidává do obrazu šum a na obrazu lenaM.bmp srovnejte všech pět implementovaných typů šumu (viz help imnoise). Pomocí funkcí vytvořených v prvních dvou bodech se pokuste šum odstranit, zobrazte výsledek a komentujte rozdíly mezi funkcí pro průměrování a mediánem.
- Napište dvě funkce [J] = ImageMinimum(I,sizeN), resp. [J] = ImageMaximum(I,sizeN) pro nelineární filtraci obrazu realizující filtr minimum, resp. maximum s parametrem velikosti okolí sizeN. Správnost implementace ověřte na obrazu obraz07.bmp a společně s původním snímkem zobrazte výsledky obou funkcí. Z výsledků odvoďte, k čemu lze tyto filtry v praxi použít.
- Napište funkci [J] = RotatingMask(I), která pomocí rotující masky 3×3 (9 pozic) provede filtraci průměrováním vždy z pozice masky s největší mírou homogenity. Výsledek zobrazte do jednoho okna společně se vstupním obrazem obraz03.bmp s přidaným šumem a výsledkem prostého průměru (funkce ImageAverage) s maskou 3×3.
C) Dobré vědět
- Povolené funkce: imread, mean, sort, median, min, max, clock, etime, imnoise,
- Nepovolené funkce: fspecial, imfilter, medfilt, medfilt2, medfilt3