高斯滤波的应用是非常广泛的,其原理是用高斯函数对原信号做卷积运算,得到一个平滑的信号。也即:

g(x) = (f*h)(x)

其中f(x)为输入信号,h(x)为高斯函数,g(x)为输出信号,h(x)=\frac{1}{\sqrt{2\pi}\sigma }e^{-\frac{x^2}{2\sigma^2}}。 而数字图像是二维有限的离散函数,因此只能用离散的卷积进行近似,常用的方法有以下这些:

空间域高斯卷积

对于图像高斯模糊来说,最常用的方法莫过于用截取的离散高斯核在图像空间域内做卷积。也即:

g(x,y) = \sum_{s=-r}^r\sum_{t=-r}^r w(s,t)f(x+s,y+t)

其中w(s,t)是一个使用高斯函数预先计算好的离散卷积核。 这种算法的时间复杂度为O(NR^2),其中N为图像大小,R为卷积核大小。从中可以看出,这个算法有一个缺点,当\sigma过大或者图像分辨率很高的时候,卷积核也会变得很大,因此这种方法只适合于卷积核较小的情况。

频率域高斯乘积

另外一种常用的方法是先对图像做离散傅里叶变换(DFT),在频域内与高斯函数相乘,这样就能保留低频部分,除去高频信息。然后再反变换回来,得到最终的图像。不过即使使用快速傅里叶变换(FFT),其时间复杂度也达到了O(N\log(N))。好在其时间复杂度与高斯核的大小无关,这对于分辨率较小,但是\sigma很大的图片来说是很合适的。

盒状滤波器近似

还有的方法采用盒状滤波器来近似高斯滤波器,其原理依据是中心极限定理。最早由Wells, W.M的论文Efficient synthesis of Gaussian filters by cascaded uniform filters中提出,发表在1986年的TPAMI上。对于一个确定的\sigma来说,一次高斯滤波可以通过多次盒状滤波来近似。盒状滤波可以达到O(N)的复杂度,因此这种近似方法的复杂度也为O(N),比如这篇博客里面Fastest Gaussian Blur (in linear time)就做了详细介绍。

不过盒状滤波器也存在不足,使用整数大小的盒状滤波器难以构造任意\sigma的高斯滤波器,与其他方法相比,其结果存在较大的偏差。

递归高斯滤波

递归高斯滤波的方法比较经典的论文为R. Deriche于1993年发表的Recursively implementing the gaussian and its derivatives