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

Python 专栏收录该内容
12 篇文章 0 订阅

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

最近在看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的高斯核,从效果来看,没有什么差别,这也说明生成的高斯核可用。
在这里插入图片描述

高斯核函数的图像

在这里插入图片描述

  • 0
    点赞
  • 2
    评论
  • 7
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

相关推荐
©️2020 CSDN 皮肤主题: 深蓝海洋 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值