Gaussisk filtrering er mye brukt innen bildebehandling. Den brukes til å redusere støyen i et bilde. I denne artikkelen vil vi generere en 2D Gaussisk kjerne. Den 2D gaussiske kjernen følger den nedenfor gitte gaussiske distribusjonen.
G(x y)=frac{1}{2pi sigma ^{2}}e^{-frac{x^{2}+y^{2}}{2sigma ^{2}}}
Hvor y er avstanden langs den vertikale aksen fra origo x er avstanden langs den horisontale aksen fra origo og ? er standardavviket.
Hva er Gaussisk filtrering?
Gaussisk filtrering er en teknikk som brukes i bildebehandling for å jevne ut bilder og redusere støy. Det fungerer ved å bruke en uskarphet-effekt ved å bruke en matematisk funksjon kalt Gauss-funksjonen som gir mer vekt til de sentrale pikslene og mindre til de omkringliggende. Dette resulterer i en naturlig uskarphet som hjelper til med å fjerne uønskede detaljer som korn eller små gjenstander. Gaussisk filtrering er mye brukt som et forbehandlingstrinn i oppgaver som gjenkjenning av kantgjenkjenning og bildeforbedring, noe som gjør det lettere for algoritmer å fokusere på viktige funksjoner.
Implementering i 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; } }
Produksjon:
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
Real-world-applikasjoner av Gaussisk filtrering
Gaussiske filtre brukes i mange dagligdagse teknologier for å forbedre bildekvaliteten og hente ut nyttig informasjon :
- Datasyn : Hjelper med å oppdage kanter og former ved å redusere støy før du bruker deteksjonsalgoritmer.
- Medisinsk bildebehandling : Brukes til å glatte MR- eller CT-skanninger som gjør det lettere å identifisere vev og abnormiteter.
- Objektdeteksjon : Forbereder bilder ved å fjerne distraksjoner slik at modeller kan fokusere på nøkkelfunksjoner.
- Verktøy for bilderedigering : Vanligvis brukt til å påføre uskarphet effekter myk opp bilder eller reduser kornethet for et renere utseende.
Sammenligning med andre filtre
Slik gjør du det Gaussisk filter skiller seg ut fra andre vanlige filtre:
- Boksfilter (gjennomsnittlig filter) : Gjør bildet uskarpt ved å gi lik vekt til alle omkringliggende piksler. Gaussisk filter er bedre fordi det gir mer vekt for å sentrere piksler skaper en jevnere mer naturlig uskarphet.
- Medianfilter : Erstatter hver piksel med median av nærliggende verdier som er flott å fjerne salt- og pepperstøy . I motsetning til Gaussisk gjør den ikke bildet så uskarpt, men kan forvrenge kanter.
- Bilateralt filter : Liker gaussisk men vurderer også pikselintensitet forskjeller bevare kanter mens du glatter. Det er mer avansert, men også mer regnemessig tung .
2D vs 1D Gaussisk filtrering
EN 2D Gaussisk filter kan deles inn i to 1D-filtre — en horisontal og en vertikal. Dette kalles separerbarhet og det betyr at vi ikke trenger å bruke en full 2D-kjerne på en gang.
Hvorfor det er viktig:
I stedet for å gjøre tunge beregninger med en stor 2D-kjerne (f.eks. 5×5), bruker vi en 1D kjerne horisontalt deretter samme kjerne vertikalt . Dette kutter ned beregningstiden og gir samme resultat .
unordered_map c++
Ytelseshensyn
Generering og bruk av en Gaussisk kjerne kan være beregningsmessig dyrt spesielt for store bilder eller kjerner.
- Tidskompleksitet :
- For en kjerne av størrelse k × k brukt på en n × n bilde tidskompleksiteten er O(n² × k²) .
- Dette er fordi hver pikseloperasjon involverer looping over hele kjernen.
- Optimalisering – Separerbare filtre :
Gaussiske kjerner er separerbar noe som betyr at et 2D-filter kan brytes inn to 1D-filtre : en horisontal og en vertikal.- Dette reduserer tidskompleksiteten til O(n² × k) gjør det mye raskere for større kjerner.
Å bruke separerbare filtre er et vanlig triks i virkelige systemer for å øke hastigheten på gaussisk filtrering uten å miste kvalitet.
Må leses
- Bruk et Gauss-filter på et bilde med Python
- Hvordan generere 2-D Gaussian array ved hjelp av NumPy?
- Integrasjon av Gaussiske funksjoner
Konklusjon
Gaussisk filtrering er en enkel, men kraftig teknikk for reduserer bildestøy og uskarphet ved å bruke et jevnt vektet gjennomsnitt basert på Gauss-funksjonen. I denne artikkelen genererte vi en 2D Gaussisk kjerne og utforsket dens rolle i ulike virkelige applikasjoner som medisinsk bildebehandling ved datamaskinsyn og bilderedigering. Vi sammenlignet det også med andre filtre og diskuterte måter å optimalisere ytelsen ved hjelp av separerbare filtre. Samlet Gaussisk filtrering er en grunnleggende verktøy i bildebehandling bidrar til å forbedre bildekvaliteten og gjør det enklere for algoritmer å fokusere på viktige visuelle detaljer.