Could some review some methods to apply Gaussian Filter (Blur) on an image besides the direct one using Truncated FIR (classic convolution with Truncated Kernel) approximation?


You can apply Gaussian Blurring on an image in many ways:

  1. Using FIR Approximation by Convolution.
  2. Using Approximation by Box Blur.
  3. In the Fourier Domain by Multiplication by a Fourier Kernel.
  4. Using IIR Approximation.

You may have a look on my project - Fast Gaussian Blur.


Meaning of FIR

In this context FIR is the coefficients which are utilized to create the convolution kernel.
Indeed in the case of Gaussian Blur the 2D Kernel can be represented by outer product of 2 1D kernels hence it can be done in a separable fashion - Rows / Columns and then Columns / Rows.

Multiplication in The Fourier Transform

By utilizing the Convolution Theorem which states there is equivalence between Convolution in Spatial Domain to Multiplication in Fourier Domain one could use it to apply the convolution.

Run Time

This really depends on 3 things:

  1. Size of the image.
  2. Size of the kernel (The STD of the Gaussian Kernel).
  3. The Quality required.

For instance for cases of large image and large kernel (Size which is approximately the size of the image) the Fourier Transform is really good especially in the case we have few images to be smoothed with the same kernel (For instance 3 RGB Channels).

Usually, in practice, in most times, the methods which their complexity is independent the Kernel STD (Box Blur Approximation / IIR Approximation) are the fastest methods with acceptable quality.
You may try them in the project I linked to above.

  • $\begingroup$ I am especially interested in 1. and 3., what does FIR mean? Regarding 3.: This means applying the FT on the image and on the Gaussian function, then multiply them, doesn't it? Which of the two is more efficient in terms of computational complexity and why? I would guess the approximation by convolution due to separability? Thanks a lot. $\endgroup$
    – cz5
    Jun 30 '18 at 15:31
  • $\begingroup$ @cz5, I extended my answer. Enjoy... $\endgroup$
    – Royi
    Jun 30 '18 at 16:29

Not the answer you're looking for? Browse other questions tagged or ask your own question.