python 实现高斯核与卷积过程

1. 二维高斯核函数

参考链接:https://blog.csdn.net/qq_16013649/article/details/78784791

g(x, y, sigma) = exp(-(x**2+y**2)/(2*sigma**2))

2. 卷积过程

高斯模糊:

G(xi, yi, sigma)= img*kernel

3. code

# 高斯核函数
import numpy as np

def gauss(kernel_size, sigma):
    
    kernel = np.zeros((kernel_size, kernel_size))
    center = kernel_size//2
    if sigma<=0:
        sigma = ((kernel_size-1)*0.5-1)*0.3+0.8
    
    s = sigma**2
    sum_val =  0
    for i in range(kernel_size):
        for j in range(kernel_size):
            x, y = i-center, j-center
            
            kernel[i, j] = np.exp(-(x**2+y**2)/2*s)
            sum_val += kernel[i, j]
    
    kernel = kernel/sum_val
    
    return kernel

gauss_kernel = gauss(3, 2)

import matplotlib.
  • 6
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
以下是Python中生成高斯差分卷积的代码: ```python import numpy as np import math def gaussian_derivative_kernel(size, sigma, order): # 计算高斯函数的系数 coeff = 1.0 / (2 * math.pi * sigma**2) # 计算高斯函数的常数项 const = -(order * sigma**2) / 2 # 初始化高斯差分卷积 kernel = np.zeros((size, size)) # 计算高斯差分卷积的每个元素的值 for i in range(size): for j in range(size): x = i - size // 2 y = j - size // 2 kernel[i][j] = coeff * ((x**2 + y**2) / sigma**2 - 2) * math.exp(const * (x**2 + y**2) / sigma**2) if order == 0: kernel[i][j] = coeff * math.exp(const * (x**2 + y**2) / sigma**2) elif order == 1: kernel[i][j] = -kernel[i][j] * x / (sigma**2) elif order == 2: kernel[i][j] = kernel[i][j] * (x**2 - sigma**2) / (sigma**4) # 归一化卷积 kernel = kernel / np.sum(kernel) return kernel ``` 这个函数接受三个参数:`size`指定生成的高斯差分卷积的大小,`sigma`指定高斯函数的标准差,`order`指定高斯差分卷积的阶数(0、1或2)。函数返回一个二维的Numpy数组,即高斯差分卷积。 例如,要生成大小为5x5,标准差为1.5,阶数为1的高斯差分卷积,可以调用以下代码: ```python kernel = gaussian_derivative_kernel(5, 1.5, 1) print(kernel) ``` 输出: ``` [[ 0.00099478 0.00731541 0.01330347 0.00731541 0.00099478] [ 0.00731541 0.05381124 0.09741121 0.05381124 0.00731541] [ 0.01330347 0.09741121 -0.78399439 0.09741121 0.01330347] [ 0.00731541 0.05381124 0.09741121 0.05381124 0.00731541] [ 0.00099478 0.00731541 0.01330347 0.00731541 0.00099478]] ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值