高斯模糊原理
基本概念
二维高斯模糊,或者说高斯滤波,是图像处理中非常常见的操作。操作的核心是使用一个从高斯分布中采样得到的掩膜,或者叫核,和输入图片中的每个像素及其邻域进行计算,结果保存到输出图片中。假设高斯核窗口尺寸为 (2w+1)×(2w+1) ,高斯分布的标准差为 σ ,则高斯核可以表示为矩阵的形式
G=⎡⎣⎢⎢⎢⎢⎢⎢⎢⎢G(−w,−w)⋮G(0,−w)⋮G(w,−w)………G(−w,0)⋮G(0,0)⋮G(w,0)………G(−w,w)⋮G(0,w)⋮G(w,w)⎤⎦⎥⎥⎥⎥⎥⎥⎥⎥
其中
G(u,v)=1Sexp(−u22σ2−v22σ2)
其中
u
表示行,
说完了高斯核,该说高斯模糊的表达式了。设输入图片为 X ,输出图片为 Y ,第 i 行第
Y(i,j)=∑u=−ww∑v=−wwX(i+u,j+v)G(u,v)(1)
根据这个表达式,为了得到位置
(i,j)
上的输出,需要将高斯核的中心置于输入图片的位置
(i,j)
处,让高斯核的每一个值和输入图片对应位置上的值相乘,进行
(2w+1)×(2w+1)
次乘法计算,然后再进行
(2w+1)×(2w+1)−1
次加法计算,所以时间复杂度是
O(w2)
的。
可分离核形式实现
但是,注意到,高斯核的表达式是可分离的。下面为了表示方便,令
g(x)=exp(−x22σ2)
则有
G(u,v)=1Sg(u)g(v)
那么高斯核矩阵又可以改写成归一化常数乘以一个行向量乘以一个列向量的形式,如下
G=1S⎡⎣⎢⎢⎢⎢⎢⎢⎢⎢g(−w)g(−w)⋮g(0)g(−w)⋮g(w)g(−w)… … …g(−w)g(0)⋮g(0)g(0)⋮g(w)g(0)… … …g(−w)g(w)⋮g(0)g(w)⋮g(w)g(w)⎤⎦⎥⎥⎥⎥⎥⎥⎥⎥=1S⎡⎣⎢⎢⎢⎢⎢⎢⎢⎢g(−w)⋮g(0)⋮g(w)⎤⎦⎥⎥⎥⎥⎥⎥⎥⎥×[g(−w)…g(0)…g(w