The core of image filters processing are the convolution filters. The idea behind convolution is that each pixel in the image is converted by using a 2D matrix where the center matrix value represents the pixel that is currently being processed and the values that surround it represent how the neighboring pixels affect the value of the pixel in the resulting image. For example consider the following matrix:
0 | 0 | 0 |
0 | 1 | 0 |
0 | 0 | 0 |
It is called an identity matrix, because the image is not changed by passing through it and is also normalized because the sum of its elements is 1. The identity matrix is the most simple convolution kernel. Larger convolution kernels are more computationally expensive to process because each pixel has to be weighted against more pixels.
For example a convolution kernel with size 3x3 will roughly require 10 computations (9 for processing each neighboring pixel value and adding it to the total sum plus 1 for dividing the result to the number of cells in the matrix). In contrast a 5x5 kernel will require 26 computations. Therefore it is recommended to set smaller values to the properties of the image filters that reflect the size of the kernel (like Size in the NBlurImageFilter class, or Depth in the case of the NLightingImageFilter class).