图像的高斯模糊是非常经典的图像卷积例子。本质上,图像模糊就是将(灰度)图像 I 和一个高斯核进行卷积操作:
其中 * 表示卷积操作;是标准差为 σ 的二维高斯核,定义为 :
这里提到了卷积操作,那么什么是卷积呢?
卷积实质上是指:将一个二维矩阵转换为另一个二维矩阵。
如下动图所示,设定一个3*3的卷积核,那么在原矩阵上滑动着做矩阵的乘法运算,最后生成一个新的3*3矩阵,这个过程就是卷积。我们以最终矩阵的最后一个元素14为例,详细讲解如何计算得到14。
原矩阵中的右下角矩阵 乘 卷积核 = 14,即:
【2 2 3 【0 1 2
0 2 2 * 2 2 0 (对应位置相乘后相加)= 14
0 1 1】 0 1 2】
SciPy 有用来做滤波操作的 scipy.ndimage.filters 模块。该模块使用快速一维分离的方式来计算卷积。
代码如下所示:
from PIL import Image
from numpy import *
from scipy.ndimage import filters
import matplotlib.pyplot as plt
im = array(Image.open('timg.jpg').convert('L'))
im2 = filters.gaussian_filter(im, 1) # guassian_filter() 函数的最后一个参数表示标准差。
plt.figure()
plt.imshow(im2)
plt.show()
以下三张图的结果分别是标准差为10、5、1 的结果: