图像处理核函数:之高斯核的生成方法 python

图像处理核函数:之高斯核函数的生成方法 python

  • 高斯核函数(低通高斯滤波器核)
    • 高斯分布函数
    • 高斯核生成函数
    • 代码
    • 效果
    • 高斯核函数的图像

高斯核函数(低通高斯滤波器核)

最近在看DIP(Digital Image Processing),虽然可以调用Opencv的函数,但还是被这高斯核函数所吸引,这可能也是高斯分态对我的吸引力。

高斯分布函数

G ( x ) = 1 2 π σ e − ( x − x 0 ) 2 2 σ 2 G(x) = \frac{1}{\sqrt{2\pi\sigma}}e^{-\frac{(x-x_0)^2}{2\sigma^2}} G(x)=2πσ 1e2σ2(xx0)2
这是我们常见的高斯分布概率密度函数(正态分布)

高斯核生成函数


DIP书上给出的高斯核函数

G ( s , t ) = K e − s 2 + t 2 2 σ 2 G(s, t) = K e^{-\frac{s^2 + t^2}{2\sigma^2}} G(s,t)=Ke2σ2s2+t2


看起来跟高斯分布是不是有点相似,但却有点不同,其实没有关系的。这里的K可以看成是归一化因子,而重要是的 e − s 2 + t 2 2 σ 2 e^{-\frac{s^2 + t^2}{2\sigma^2}} e2σ2s2+t2这部分。

好了,有了函数,我们就可以写代码了。

代码

下面公式是我生成高期核的用到的公式:
G ( x , y ) = 1 2 π σ 2 e − ( x − x 0 ) 2 + ( y − y 0 ) 2 2 σ 2 G(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πσ21e2σ2(xx0)2+(yy0)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.8
    X = np.linspace(-k, k, kernel_size)
    Y = np.linspace(-k, k, kernel_size)
    x, y = np.meshgrid(X, Y)
    x0 = 0
    y0 = 0
    gauss = 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]

  1. 为什么要判断sigma是否为0?
  2. k是什么,对核函数有何影响,对最终的图像有何影响?
  3. 代码有核的大小
  4. 代码有可定义的 σ \sigma σ

效果

左边是默认的3X3 高斯核,右边是自己生成的3X3的高斯核,从效果来看,没有什么差别,这也说明生成的高斯核可用。
图像处理核函数:之高斯核的生成方法 python_第1张图片

高斯核函数的图像

图像处理核函数:之高斯核的生成方法 python_第2张图片

你可能感兴趣的:(Python,python,opencv,算法,深度学习)