Gauss-szűrő generálása C++ nyelven

Gauss-szűrés széles körben használják a képfeldolgozás területén. A kép zajának csökkentésére szolgál. Ebben a cikkben generáljuk a 2D Gauss-kernel. A 2D Gauss-kernel az alábbi Gauss-eloszlást követi. 
G(x y)=frac{1}{2pi sigma ^{2}}e^{-frac{x^{2}+y^{2}}{2sigma ^{2}}}   
Ahol y a függőleges tengely mentén az origótól mért távolság x az a távolság a vízszintes tengely mentén az origótól és ? a szórás.

Mi az a Gauss-szűrés?

A Gauss-szűrő a képfeldolgozás során használt technika a képek simítására és a zaj csökkentésére. Úgy működik, hogy elmosódási effektust alkalmaz a Gauss-függvénynek nevezett matematikai függvény segítségével, amely nagyobb súlyt ad a központi képpontoknak, és kevésbé a környező képpontoknak. Ez természetes hatású elmosódást eredményez, amely segít eltávolítani a nem kívánt részleteket, például szemcséket vagy apró műtárgyakat. A Gauss-szűrést széles körben használják előfeldolgozási lépésként olyan feladatokban, mint az élészlelés tárgyfelismerése és a képjavítás, ami megkönnyíti az algoritmusok számára, hogy a fontos funkciókra összpontosítsanak.

Megvalósítás C++ nyelven  

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  ;      }   }   

Kimenet: 

 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 

A Gauss-szűrés valós alkalmazásai

A Gauss-szűrőket számos mindennapi technológiában használják javítja a képminőséget és hasznos információkat gyűjteni :

  • Számítógépes látás : Az érzékelési algoritmusok alkalmazása előtt a zaj csökkentésével segít az élek és formák észlelésében.
  • Orvosi képalkotás : MRI- vagy CT-vizsgálatok simítására szolgál, megkönnyítve a szövetek és a rendellenességek azonosítását.
  • Tárgyfelismerés : Előkészíti a képeket a zavaró tényezők eltávolításával, lehetővé téve a modellek számára, hogy a legfontosabb funkciókra összpontosítsanak.
  • Fényképszerkesztő eszközök : Általában alkalmazzák elmosódási hatások lágyítsa a képeket vagy csökkentse a szemcsésséget a tisztább megjelenés érdekében.

Összehasonlítás más szűrőkkel

Íme, hogyan Gauss-szűrő kiemelkedik a többi gyakori szűrő közül:

  • Dobozszűrő (átlagos szűrő) : Elhomályosítja a képet adással egyenlő súlyú az összes környező pixelhez. A Gauss-szűrő jobb, mert ad nagyobb súly a középső pixelekhez simább és természetesebb elmosódást eredményez.
  • Medián szűrő : Minden képpontot a következőre cserél középső közeli értékekből, ami kiválóan eltávolítható só-bors zaj . A Gauss-féleséggel ellentétben nem homályosítja el annyira a képet, de torzíthatja a széleket.
  • Kétoldali szűrő : Mint Gauss, de azt is figyelembe veszi pixel intenzitás különbségek megőrzése élek simítás közben. Ez fejlettebb, de több is számításilag nehéz .

2D vs 1D Gauss szűrés

A 2D Gauss szűrő részre lehet bontani két 1D szűrő — egy vízszintes és egy függőleges. Ezt hívják szétválaszthatóság és ez azt jelenti, hogy nem kell egyszerre teljes 2D-s kernelt alkalmaznunk.

Miért számít:

Ahelyett, hogy nagy 2D-s kernellel (pl. 5×5) végeznénk nehéz számításokat, alkalmazunk egy 1D kernel vízszintesen majd a ugyanaz a kernel függőlegesen . Ez csökkenti a számítási időt és megadja a ugyanaz az eredmény .

Teljesítmény szempontjai

Létrehozása és alkalmazása a Gauss kernel lehet számításilag drága különösen nagy képek vagy kernelek esetén.

  • Idő összetettsége :
    • Méretű kernelhez k × k alkalmazták egy n × n kép az idő összetettsége O(n² × k²) .
    • Ennek az az oka, hogy minden pixelművelet magában foglalja a teljes kernelen való hurkot.
  • Optimalizálás – Elválasztható szűrők :
    Gauss kernelek szétválasztható vagyis egy 2D szűrőt be lehet törni két 1D szűrő : egy vízszintes és egy függőleges.
    • Ez csökkenti az idő bonyolultságát O(n² × k) elkészítése sokkal gyorsabban nagyobb kernelekhez.

A szétválasztható szűrők használata gyakori trükk a valós rendszerekben a Gauss-szűrés felgyorsítására a minőség elvesztése nélkül.

El kell olvasni

  • Alkalmazzon Gauss-szűrőt egy képre Python segítségével
  • Hogyan lehet 2-D Gauss-tömböt előállítani a NumPy segítségével?
  • Gauss-függvények integrálása

Következtetés

A Gauss-szűrés egy egyszerű, de hatékony technika csökkenti a képzajt és az elmosódást a Gauss-függvényen alapuló sima súlyozott átlagot használva. Ebben a cikkben generáltunk a 2D Gauss kernel és feltárta szerepét különböző valós alkalmazások mint a számítógépes látás orvosi képalkotás és a képszerkesztés. Összehasonlítottuk más szűrőkkel is, és megbeszéltük annak módjait optimalizálja a teljesítményt szétválasztható szűrők használatával. Az általános Gauss-szűrés a alapvető eszköz a képfeldolgozásban segít a képminőség javításában, és megkönnyíti az algoritmusok számára, hogy a fontos vizuális részletekre összpontosítsanak.