Gaussova filtrace je široce používán v oblasti zpracování obrazu. Používá se ke snížení šumu obrazu. V tomto článku vygenerujeme a 2D Gaussovo jádro. 2D Gaussovské jádro se řídí níže uvedeným Gaussovým rozdělením.
G(x y)=frac{1}{2pi sigma ^{2}}e^{-frac{x^{2}+y^{2}}{2sigma ^{2}}}
Kde y je vzdálenost podél svislé osy od počátku x je vzdálenost podél vodorovné osy od počátku a ? je standardní odchylka.
Co je Gaussova filtrace?
Gaussovské filtrování je technika používaná při zpracování obrazu k vyhlazení obrazu a snížení šumu. Funguje tak, že aplikuje efekt rozostření pomocí matematické funkce zvané Gaussova funkce, která dává větší váhu centrálním pixelům a méně okolním. Výsledkem je přirozeně vypadající rozostření, které pomáhá odstranit nežádoucí detaily, jako je zrno nebo malé artefakty. Gaussovské filtrování se široce používá jako krok předzpracování v úkolech, jako je rozpoznání objektů s detekcí hran a vylepšení obrazu, což algoritmům usnadňuje zaměřit se na důležité funkce.
Implementace v C++
C++// C++ program to generate Gaussian filter #include #include #include using namespace std; // Function to create Gaussian filter void FilterCreation(double GKernel[][5]) { // initialising standard deviation to 1.0 double sigma = 1.0; double r s = 2.0 * sigma * sigma; // sum is for normalization double sum = 0.0; // generating 5x5 kernel for (int x = -2; x <= 2; x++) { for (int y = -2; y <= 2; y++) { r = sqrt(x * x + y * y); GKernel[x + 2][y + 2] = (exp(-(r * r) / s)) / (M_PI * s); sum += GKernel[x + 2][y + 2]; } } // normalising the Kernel for (int i = 0; i < 5; ++i) for (int j = 0; j < 5; ++j) GKernel[i][j] /= sum; } // Driver program to test above function int main() { double GKernel[5][5]; FilterCreation(GKernel); for (int i = 0; i < 5; ++i) { for (int j = 0; j < 5; ++j) cout << GKernel[i][j] << 't'; cout << endl; } }
výstup:
0.00296902 0.0133062 0.0219382 0.0133062 0.00296902
0.0133062 0.0596343 0.0983203 0.0596343 0.0133062
0.0219382 0.0983203 0.162103 0.0983203 0.0219382
0.0133062 0.0596343 0.0983203 0.0596343 0.0133062
0.00296902 0.0133062 0.0219382 0.0133062 0.00296902
Reálné aplikace Gaussova filtrování
Gaussovy filtry se používají v mnoha každodenních technologiích zlepšit kvalitu obrazu a extrahovat užitečné informace :
- Počítačové vidění : Pomáhá detekovat hrany a tvary snížením šumu před použitím detekčního algoritmu.
- Lékařské zobrazování : Používá se k vyhlazení MRI nebo CT skenů, což usnadňuje identifikaci tkání a abnormalit.
- Detekce objektů : Připravuje snímky odstraněním rušivých vlivů a umožňuje modelům soustředit se na klíčové funkce.
- Nástroje pro úpravu fotografií : Běžně se používá k použití efekty rozostření změkčení obrázků nebo snížení zrnitosti pro čistší vzhled.
Srovnání s jinými filtry
Zde je návod Gaussův filtr se odlišuje od ostatních běžných filtrů:
- Box Filter (průměrný filtr) : Rozostří obraz podáním stejnou váhu na všechny okolní pixely. Gaussův filtr je lepší, protože dává větší váhu na středové pixely vytváří hladší a přirozenější rozostření.
- Mediánový filtr : Nahradí každý pixel znakem medián blízkých hodnot, což je skvělé pro odstranění hluk soli a pepře . Na rozdíl od Gaussianu obraz tolik nerozmazává, ale může deformovat okraje.
- Oboustranný filtr : Jako Gaussian, ale také uvažuje intenzita pixelů zachování rozdílů okraje při hlazení. Je to pokročilejší, ale také více výpočetně těžký .
2D vs 1D Gaussovské filtrování
A 2D Gaussův filtr lze rozložit na dva 1D filtry — jeden horizontální a jeden vertikální. Tomu se říká oddělitelnost a to znamená, že nemusíme použít celé 2D jádro najednou.
Proč na tom záleží:
Místo náročných výpočtů s velkým 2D jádrem (např. 5×5) použijeme 1D jádro vodorovně pak stejné jádro vertikálně . To zkracuje dobu výpočtu a dává stejný výsledek .
np.klip
Úvahy o výkonu
Generování a aplikace a Gaussovo jádro může být výpočetně drahé zejména pro velké obrázky nebo jádra.
- Časová složitost :
- Pro jádro velikosti k × k aplikován na an n × n časová složitost je O(n² × k²) .
- Je to proto, že každá operace s pixelem zahrnuje smyčkování přes celé jádro.
- Optimalizace – oddělitelné filtry :
Gaussova jádra jsou oddělitelný což znamená, že lze prolomit 2D filtr dva 1D filtry : jedna horizontální a jedna vertikální.- To snižuje časovou náročnost na O(n² × k) dělat to mnohem rychleji pro větší jádra.
Používání oddělitelných filtrů je běžným trikem v reálných systémech pro urychlení Gaussova filtrování bez ztráty kvality.
Musí si přečíst
- Použijte Gaussův filtr na obrázek pomocí Pythonu
- Jak vygenerovat 2-D Gaussovské pole pomocí NumPy?
- Integrace Gaussových funkcí
Závěr
Gaussovské filtrování je jednoduchá, ale účinná technika snížení šumu a rozmazání obrazu pomocí hladkého váženého průměru založeného na Gaussově funkci. V tomto článku jsme vygenerovali a 2D Gaussovo jádro a zkoumal jeho roli v různých aplikace v reálném světě jako lékařské zobrazování pomocí počítačového vidění a úpravy fotografií. Také jsme to porovnali s jinými filtry a probrali způsoby, jak to udělat optimalizovat výkon pomocí oddělitelných filtrů. Celkové Gaussovo filtrování je a základní nástroj pro zpracování obrazu pomáhá zlepšit kvalitu obrazu a usnadňuje algoritmům zaměřit se na důležité vizuální detaily.