图像处理中,高斯模糊是最常用的模糊算法。
要理解它的原理,首先是高斯函数:
图像处理中所用到的二维形式如下:
高斯函数有一个很有用的特性,它的傅立叶变换仍然是高斯函数:
熟悉频域滤波的童鞋很容易分析出,使用高斯函数形成的频域滤波器是一个低通滤波器,在冈萨雷斯的数字图像处理一书中是与理想低通、巴特沃兹低通滤波器相比较的。如不清楚可以查阅相关书籍。
但在数字图像处理中,频域滤波一般不直接去实现(效率太低),而是想办法求解出一个近似的空间域滤波模板,然后在空间域做卷积。
这里看一下这个近似是如何做到的。
首先,我们直接在频域进行处理的话,需要做的事情就是利用高斯函数,求出一个与图片大小相等的滤波模板,然后与原图像的离散傅立叶变换相乘,最后做傅立叶反变换
就得到图像高斯模糊后的结果。我们想把这个过程在空间域内完成,可想而知,要求出频域高斯滤波模板的傅立叶反变换,它就是空间域卷积模板。但是这样求解出来的空间域卷积模板就跟图像等大小了,复杂度O(size * size),于是想到忽略高斯模板边缘那些值比较小的,得到一个小一点的模板。
在标准正态分布中,我们知道,处在(-3 * sigma, 3 * sigma)之外的区间的点是极少的,于是一个理想的滤波模板的大小自然是ceil(6 * sigma) * ceil(6 * sigma)
在参看opencv的源码实现中,我发现它并不是直接求出的二维滤波模板,而是利用高斯函数在x方向与y方向的独立性,分别求出两个方向的模板然后两个模板先做卷积得到最终的高斯滤波模板。