图像处理核函数:之高斯核函数的生成方法 python
- 高斯核函数(低通高斯滤波器核)
- 高斯分布函数
- 高斯核生成函数
- 代码
- 效果
- 高斯核函数的图像
高斯核函数(低通高斯滤波器核)
最近在看DIP(Digital Image Processing),虽然可以调用Opencv的函数,但还是被这高斯核函数所吸引,这可能也是高斯分态对我的吸引力。
高斯分布函数
G(x)=12πσe−(x−x0)22σ2G(x) = \frac{1}{\sqrt{2\pi\sigma}}e^{-\frac{(x-x_0)^2}{2\sigma^2}}G(x)=2πσ1e−2σ2(x−x0)2
这是我们常见的高斯分布概率密度函数(正态分布)
高斯核生成函数
DIP书上给出的高斯核函数
G(s,t)=Ke−s2+t22σ2G(s, t) = K e^{-\frac{s^2 + t^2}{2\sigma^2}}G(s,t)=Ke−2σ2s2+t2
看起来跟高斯分布是不是有点相似,但却有点不同,其实没有关系的。这里的K可以看成是归一化因子,而重要是的e−s2+t22σ2e^{-\frac{s^2 + t^2}{2\sigma^2}}e−2σ2s2+t2这部分。
好了,有了函数,我们就可以写代码了。
代码
下面公式是我生成高期核的用到的公式:
G(x,y)=12πσ2e−(x−x0)2+(y−y0)22σ2G(x, y) = \frac {1} {2\pi\sigma ^2}e^{-\frac{(x-x_0)^2+(y-y_0)^2}{2\sigma^2}}G(x,y)=2πσ21e−2σ2(x−x0)2+(y−y0)2
# 高斯核生成函数
def creat_gauss_kernel(kernel_size=3, sigma=1, k=1):if sigma == 0:sigma = ((kernel_size - 1) * 0.5 - 1) * 0.3 + 0.8X = np.linspace(-k, k, kernel_size)Y = np.linspace(-k, k, kernel_size)x, y = np.meshgrid(X, Y)x0 = 0y0 = 0gauss = 1/(2*np.pi*sigma**2) * np.exp(- ((x -x0)**2 + (y - y0)**2)/ (2 * sigma**2))return gauss
默认参数生成的高斯核:
[0.05854983, 0.09653235, 0.05854983],
[0.09653235, 0.15915494, 0.09653235],
[0.05854983, 0.09653235, 0.05854983]
- 为什么要判断sigma是否为0?
- k是什么,对核函数有何影响,对最终的图像有何影响?
- 代码有核的大小
- 代码有可定义的σ\sigmaσ
效果
左边是默认的3X3 高斯核,右边是自己生成的3X3的高斯核,从效果来看,没有什么差别,这也说明生成的高斯核可用。