Gaussovo filtriranje se pogosto uporablja na področju obdelave slik. Uporablja se za zmanjšanje šuma slike. V tem članku bomo ustvarili a 2D Gaussovo jedro. 2D Gaussovo jedro sledi spodaj podani Gaussovi porazdelitvi.
G(x y)=frac{1}{2pi sigma ^{2}}e^{-frac{x^{2}+y^{2}}{2sigma ^{2}}}
Kjer je y razdalja vzdolž navpične osi od izhodišča x je razdalja vzdolž vodoravne osi od izhodišča in ? je standardni odklon.
Kaj je Gaussovo filtriranje?
Gaussovo filtriranje je tehnika, ki se uporablja pri obdelavi slik za glajenje slik in zmanjšanje šuma. Deluje tako, da uporabi učinek zameglitve z uporabo matematične funkcije, imenovane Gaussova funkcija, ki daje večjo težo osrednjim slikovnim pikam in manj okoliškim slikovnim pikam. Posledica tega je zamegljenost naravnega videza, ki pomaga odstraniti neželene podrobnosti, kot so zrnatost ali majhni artefakti. Gaussovo filtriranje se pogosto uporablja kot korak predprocesiranja pri opravilih, kot sta prepoznavanje robov in izboljšava slike, zaradi česar se algoritmi lažje osredotočijo na pomembne funkcije.
Implementacija 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; } }
Izhod:
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
Realne aplikacije Gaussovega filtriranja
Gaussovi filtri se uporabljajo v številnih vsakodnevnih tehnologijah za izboljšati kakovost slike in pridobi koristne informacije :
- Računalniški vid : Pomaga zaznati robove in oblike z zmanjšanjem šuma pred uporabo algoritmov zaznavanja.
- Medicinsko slikanje : Uporablja se za gladko slikanje MRI ali CT, kar olajša prepoznavanje tkiv in nepravilnosti.
- Odkrivanje predmetov : Pripravi slike tako, da odstrani motnje, kar omogoča modelom, da se osredotočijo na ključne značilnosti.
- Orodja za urejanje fotografij : Običajno se uporablja za nanašanje učinki zameglitve zmehča slike ali zmanjša zrnatost za čistejši videz.
Primerjava z drugimi filtri
Evo kako Gaussov filter izstopa od drugih običajnih filtrov:
- Škatlasti filter (povprečni filter) : zamegli sliko z dajanjem enaka teža na vse okoliške slikovne pike. Gaussov filter je boljši, ker daje večja teža sredinskih slikovnih pik ustvarjanje bolj gladke in naravne zamegljenosti.
- Srednji filter : Zamenja vsako slikovno piko z mediana bližnjih vrednosti, kar je odlično za odstranjevanje hrup soli in popra . Za razliko od Gaussove slike ne zamegli toliko, lahko pa popači robove.
- Dvostranski filter : Kot Gaussian, vendar tudi upošteva intenzivnost slikovnih pik ohranjanje razlik robovi med glajenjem. Je bolj napreden, a tudi več računsko težka .
Gaussovo filtriranje 2D proti 1D
A 2D Gaussov filter lahko razdelimo na dva 1D filtra — eno vodoravno in eno navpično. To se imenuje ločljivost in to pomeni, da nam ni treba uporabiti celotnega 2D jedra naenkrat.
Zakaj je pomembno:
Namesto težkih izračunov z velikim 2D jedrom (npr. 5×5) uporabimo 1D jedro vodoravno nato pa isto jedro navpično . To skrajša računski čas in daje enak rezultat .
operacijski sistem linux
Upoštevanje učinkovitosti
Ustvarjanje in uporaba a Gaussovo jedro lahko računsko drago še posebej za velike slike ali jedra.
- Časovna zapletenost :
- Za jedro velikosti k × k uporabljeno za an n × n slika časovna zapletenost je O(n² × k²) .
- To je zato, ker vsaka operacija pikslov vključuje zanko čez celotno jedro.
- Optimizacija – Ločljivi filtri :
Gaussova jedra so ločljiva kar pomeni, da je mogoče vdreti v 2D filter dva 1D filtra : eno vodoravno in eno navpično.- To zmanjša časovno kompleksnost na O(n² × k) izdelovanje veliko hitreje za večja jedrca.
Uporaba ločljivih filtrov je pogost trik v sistemih v resničnem svetu za pospešitev Gaussovega filtriranja brez izgube kakovosti.
Obvezno prebrati
- S Pythonom uporabite Gaussov filter za sliko
- Kako ustvariti 2-D Gaussov niz z uporabo NumPy?
- Integracija Gaussovih funkcij
Zaključek
Gaussovo filtriranje je preprosta, a zmogljiva tehnika za zmanjšanje šuma in zamegljenosti slike z uporabo gladkega tehtanega povprečja na podlagi Gaussove funkcije. V tem članku smo ustvarili a 2D Gaussovo jedro in raziskala njegovo vlogo v različnih aplikacije iz resničnega sveta kot je medicinsko slikanje z računalniškim vidom in urejanje fotografij. Primerjali smo ga tudi z drugimi filtri in razpravljali o načinih za to optimizirati delovanje z uporabo ločljivih filtrov. Na splošno je Gaussovo filtriranje a osnovno orodje pri obdelavi slik pomaga izboljšati kakovost slike in omogoča, da se algoritmi lažje osredotočijo na pomembne vizualne podrobnosti.