Gaussian Filter Generation in C++


As we know the Gaussian Filtering is very much useful applied in the field of image processing. It is used to reduce the noise of an image. In this section we will see how to generate a 2D Gaussian Kernel. Gaussian Distribution for generating 2D kernel is as follows.

$$G(x,y)= \frac{1}{2\Pi\:\sigma^{2}}e^{\frac{x^{2}+y^{2}}{2\sigma^{2}}}$$

Example

Let us see the following implementation to get better understanding −

 Live Demo

#include <cmath>
#include <iomanip>
#include <iostream>
#define PI 3.1415
using namespace std;
void calc_filter(double kernel[][5]) {
   double sigma = 1.0;
   double p, q = 2.0 * sigma * sigma;
   double sum = 0.0;
   for (int x = -2; x <= 2; x++) {
      for (int y = -2; y <= 2; y++) {
         p = sqrt(x * x + y * y);
         kernel[x + 2][y + 2] = (exp(-(p * p) / q)) / (PI * q);
         sum += kernel[x + 2][y + 2];
      }
   }
   for (int i = 0; i < 5; i++)
      for (int j = 0; j < 5; j++)
         kernel[i][j] /= sum;
}
int main() {
   double kernel[5][5];
   calc_filter(kernel);
   for (int i = 0; i < 5; ++i) {
      for (int j = 0; j < 5; ++j)
         cout << kernel[i][j] << " ";
      cout << endl;
   }
}

Output

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

Updated on: 27-Aug-2020

1K+ Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements