# Implementing Gaussian Blur – How to calculate convolution matrix (kernel)

You can create a Gaussian kernel from scratch as noted in MATLAB documentation of `fspecial`. Please read the Gaussian kernel creation formula in the algorithms part in that page and follow the code below. The code is to create an m-by-n matrix with sigma = 1.

``````m = 5; n = 5;
sigma = 1;
[h1, h2] = meshgrid(-(m-1)/2:(m-1)/2, -(n-1)/2:(n-1)/2);
hg = exp(- (h1.^2+h2.^2) / (2*sigma^2));
h = hg ./ sum(hg(:));

h =

0.0030    0.0133    0.0219    0.0133    0.0030
0.0133    0.0596    0.0983    0.0596    0.0133
0.0219    0.0983    0.1621    0.0983    0.0219
0.0133    0.0596    0.0983    0.0596    0.0133
0.0030    0.0133    0.0219    0.0133    0.0030
``````

Observe that this can be done by the built-in `fspecial` as follows:

``````fspecial('gaussian', [m n], sigma)
ans =

0.0030    0.0133    0.0219    0.0133    0.0030
0.0133    0.0596    0.0983    0.0596    0.0133
0.0219    0.0983    0.1621    0.0983    0.0219
0.0133    0.0596    0.0983    0.0596    0.0133
0.0030    0.0133    0.0219    0.0133    0.0030
``````

I think it is straightforward to implement this in any language you like.

EDIT: Let me also add the values of `h1` and `h2` for the given case, since you may be unfamiliar with `meshgrid` if you code in C++.

``````h1 =

-2    -1     0     1     2
-2    -1     0     1     2
-2    -1     0     1     2
-2    -1     0     1     2
-2    -1     0     1     2

h2 =

-2    -2    -2    -2    -2
-1    -1    -1    -1    -1
0     0     0     0     0
1     1     1     1     1
2     2     2     2     2
``````