Генерисање Гаусовог филтера у Ц++

Гаусово филтрирање има широку примену у области обраде слика. Користи се за смањење шума слике. У овом чланку ћемо генерисати а 2Д Гаусово језгро. 2Д Гаусово језгро следи доле дату Гаусову расподелу. 
Г(к и)=фрац{1}{2пи сигма ^{2}}е^{-фрац{к^{2}+и^{2}}{2сигма ^{2}}}   
Где је и растојање дуж вертикалне осе од почетка к је растојање дуж хоризонталне осе од почетка и ? је стандардна девијација.

Шта је Гаусово филтрирање?

Гаусово филтрирање је техника која се користи у обради слике за углађивање слика и смањење шума. Функционише применом ефекта замућења користећи математичку функцију која се зове Гаусова функција која даје већу тежину централним пикселима, а мању околним пикселима. Ово доводи до замућења природног изгледа које помаже у уклањању нежељених детаља попут зрна или малих артефаката. Гаусово филтрирање се широко користи као корак предобраде у задацима као што су препознавање објеката за детекцију ивица и побољшање слике, што олакшава алгоритмима да се фокусирају на важне карактеристике.

Имплементација у Ц++  

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

Излаз: 

 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 

Примене Гаусовог филтрирања у стварном свету

Гаусови филтери се користе у многим свакодневним технологијама за побољшати квалитет слике и извући корисне информације :

  • Цомпутер Висион : Помаже у откривању ивица и облика смањујући шум пре примене алгоритама детекције.
  • Медицал Имагинг : Користи се за изглађивање МРИ или ЦТ скенирања што олакшава идентификацију ткива и абнормалности.
  • Детекција објеката : Припрема слике уклањањем ометања омогућавајући моделима да се фокусирају на кључне карактеристике.
  • Алати за уређивање фотографија : Обично се користи за примену ефекти замућења

Поређење са другим филтерима

Ево како Гаусов филтер издваја се од осталих уобичајених филтера:

  • Филтер оквира (просечан филтер) : Замагљује слику давањем једнака тежина на све околне пикселе. Гаусов филтер је бољи јер даје већа тежина до централних пиксела стварајући глаткије природније замућење.
  • Медијан филтер : Замењује сваки пиксел са медијана оближњих вредности што је одлично за уклањање бука соли и бибера . За разлику од Гауссовог, он не замагљује слику толико, али може изобличити ивице.
  • Билатерални филтер : Као Гаусов али и сматра интензитет пиксела очување разлика ивице при глађењу. Напреднији је, али и више рачунски тежак .

2Д вс 1Д Гаусово филтрирање

А 2Д Гаусов филтер може се разбити на два 1Д филтера — једна хоризонтална и једна вертикална. Ово се зове одвојивости и то значи да не морамо одједном да примењујемо комплетно 2Д језгро.

Зашто је важно:

Уместо да радимо тешке прорачуне са великим 2Д кернелом (нпр. 5×5), примењујемо 1Д кернел хоризонтално затим тхе исто језгро вертикално . Ово скраћује време израчунавања и даје исти резултат .

Разматрање перформанси

Генерисање и примена а Гаусово језгро може бити рачунарски скупо посебно за велике слике или језгра.

  • Временска сложеност :
    • За језгро величине к × к примењено на ан н × н слика временска сложеност је О(н² × к²) .
    • То је зато што свака операција пиксела укључује петљу преко целог кернела.
  • Оптимизација – одвојиви филтери :
    Гаусова језгра су одвојиви што значи да се 2Д филтер може пробити два 1Д филтера : једна хоризонтална и једна вертикална.
    • Ово смањује временску сложеност на О(н² × к) правећи га много брже за већа језгра.

Коришћење одвојивих филтера је уобичајен трик у системима из стварног света за убрзавање Гаусовог филтрирања без губитка квалитета.

Муст Реад

  • Примените Гаусс филтер на слику помоћу Питхон-а
  • Како генерисати 2-Д Гаусов низ користећи НумПи?
  • Интеграција Гаусових функција

Закључак

Гаусово филтрирање је једноставна, али моћна техника за смањење шума и замућења слике користећи глатки пондерисани просек заснован на Гаусовој функцији. У овом чланку смо генерисали а 2Д Гаусово језгро и истраживао његову улогу у разним апликације у стварном свету попут компјутерског вида медицинског снимања и уређивања фотографија. Такође смо га упоредили са другим филтерима и разговарали о начинима да оптимизовати перформансе коришћењем одвојивих филтера. Свеукупно Гаусово филтрирање је а основни алат у обради слике помаже у побољшању квалитета слике и олакшава алгоритмима да се фокусирају на важне визуелне детаље.