Gaussian Filter Generation in C++

C++Server Side ProgrammingProgramming

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
raja
Published on 27-Aug-2020 17:10:35
Advertisements