^{1} This is the simplest but also a very inefficient way to implement a Gaussian filter. The Gaussian filter, like many other
simple filter kernels, falls into the group of *separable* filters. That is, they are 2D filter kernels that can be rewritten as the product of two 1D filters. This trick turns the
convolution problem from an *O*(*n*^{2}) into an *O*(2*n*) problem, which in almost all cases results in a faster implementation. For more information on convolution and separable
filters, see Chapter 21 of this book, “Real-Time Glow.”