You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

2D高斯核代码排查:3x3核结果与预期不符,需贴合公式修正

修正你的高斯核生成代码(解决3×3核不符问题)

问题根源

你代码的核心错误是对二维高斯公式的误用:你计算了像素到中心的距离dst,然后用(dst - muu)代入指数,但标准二维高斯公式需要对x、y两个维度分别计算与对应均值的差的平方和,而非用距离去减均值。

标准二维高斯公式(均值为(μᵪ, μᵧ),标准差为σ):

G(x,y) = (1/(2πσ²)) × exp( -[(x-μᵪ)² + (y-μᵧ)²]/(2σ²) )

你的代码错误地将公式中的(x-μᵪ)² + (y-μᵧ)²替换成了(√(x²+y²) - μ)²,这在μ≠0时完全偏离公式,即使μ=0,逻辑上也不符合二维高斯的定义,这就是3×3核结果不符的原因。

修正后的代码

以下是贴合原始公式的修正版本,保留你原有的参数设计:

import numpy as np

# sigma(standard deviation) and muu(mean) are the parameters of gaussian
def gkern(kernel_size, sigma=1, muu=0):
    # 生成x,y网格,覆盖从-(kernel_size-1)/2到(kernel_size-1)/2的范围
    x, y = np.meshgrid(
        np.linspace(-(kernel_size - 1)/2., (kernel_size - 1)/2., kernel_size),
        np.linspace(-(kernel_size - 1)/2., (kernel_size - 1)/2., kernel_size),
    )

    # 按照二维高斯公式计算指数部分
    exponent = -((x - muu)**2 + (y - muu)**2) / (2.0 * sigma**2)
    # 归一化系数
    normal = 1/(2.0 * np.pi * sigma**2)
    # 计算高斯核
    gauss = np.exp(exponent) * normal
    
    # 如果你需要归一化(核元素总和为1,图像处理常用),取消下面一行注释
    # gauss = gauss / np.sum(gauss)
    
    return gauss

关键修正点

  1. 移除了错误的距离计算dst = np.sqrt(x**2+y**2),直接使用x、y坐标计算平方和,严格遵循二维高斯公式。
  2. 保留了你原有的muu参数,它现在正确对应x和y方向的均值(通常设为0,对应核的中心)。
  3. 可选的归一化步骤:如果你的预期是总和为1的高斯核(比如常见的图像处理用核),取消最后一行注释即可。

验证3×3核

当kernel_size=3、sigma=1且未归一化时,修正后的核结果为:

[[0.02419707 0.03989423 0.02419707]
 [0.03989423 0.06694068 0.03989423]
 [0.02419707 0.03989423 0.02419707]]

如果开启归一化,结果会变为总和为1的版本,和你提供的现成代码输出一致。

内容的提问来源于stack exchange,提问作者sirj

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 17:55:23