Gaussisk filtergenerering i C++

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 .

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.