C++ Bc. 14

Z GeoWikiCZ
Filtrace obrazu

Filtrací obrazu rozumíme v obecné rovině operace s digitálním obrazem, které slouží ke zvýraznění určité informace. Rozlišujeme celou řadu metod filtrace obrazu od velmi jednoduchých (např. prosté průměrování) až po poměrně komplexní, sofistikované metody.

Filtrace může být využívána pro vyhlazení obrazu, potlačení šumu, zvýraznění kontrastu, detekci hran, postklasifikační zpracování obrazu a řadu dalších úloh. Vzhledem k rozsahu většiny digitálních dat je z technického hlediska nevhodné řešit podobné úlohy najednou v celém obrazu. Daný filtr je tak definován jako šablona rastrové matice (tzv. "moving window", v české literatuře se často využívá termín "kernel") - tedy pohybujícího se (plovoucího) okna. Jde o matici (většinou čtvercovou) tvořenou lichým počtem řádků a sloupců, která se při výpočtu pohybuje nad maticí originálních dat (ve směru řádků a sloupců). Nová hodnota rastrové buňky je určena na základě aritmetické operace či statistické veličiny definované filtrem a hodnot originálních dat. Do výpočtu tak vstupuje na rozdíl například od podílu obrazu množina hodnot a nikoliv pouze jedna jediná hodnota. Jde tedy o lokální a nikoliv bodové operace. Nejčastěji se využívá velikost kernelu 3x3 a 5x5.

Prosté průměrování

Nová hodnota (zaokrouhlena na celé číslo) středového pixelu je vypočtena jako aritmetický průměr hodnot pixelů pokrytého kernelem. Ve svém důsledku tento filtr likviduje liniové elementy (jde o nízkofrekvenční filtr), naopak je vhodný pro vyhlazení výsledku klasifikace u rozsáhlejších homogenních ploch či pro částečné odstraňování šumu. Rovnice pro velikost kernelu 3x3:


Napište funkci filtr(), která implementuje prosté průměrování. Velikost kernelu je parametrem funkce.

GNU_gama::Mat<int> filtr(const GNU_gama::Mat<int>& N, int kernel=3);

Při výpočtu okrajových bodů použijte pouze ty hodnoty, které jsou k dispozici (na okrajích kernel leží částečně mimo vstupní matici, použijte pouze body pokryté kernelem).

[ Zpět | C++ | Další ]