Python - 使用高斯卷积

5
我需要用特定参数的高斯函数在3934.8A处进行卷积下一个曲线。
我看到的问题是我的曲线是离散数组,而高斯函数是定义良好的连续函数。如何让这个工作?

1
http://blancosilva.wordpress.com/teaching/mathematical-imaging/convolution-with-gaussian-kernels/ - fecub
你个人在Python方面尝试过什么? - ρss
你能否将高斯函数离散化(使用np.histogram或列表推导式等方法),并将其传递给np.convolve吗?这对我来说似乎很有效。 - freshtop
1个回答

10

为了实现这一点,您需要创建一个与您的曲线在相同空间尺度上离散化的高斯分布,然后进行卷积。

具体而言,假设您的原始曲线在x轴上有N个等距点(其中N通常在50到10,000左右),则沿x轴的点间距将为(物理范围)/(数字范围) = (3940-3930)/N,代码看起来像这样:

dx = float(3940-3930)/N
gx = np.arange(-3*sigma, 3*sigma, dx)
gaussian = np.exp(-(x/sigma)**2/2)
result = np.convolve(original_curve, gaussian, mode="full")

这是一个以零为中心的高斯函数,并不包含你提到的偏移量(对我来说,加上偏移只会增加混淆,因为卷积本身就是一种平移操作,所以用已经平移过的东西作为起点会让人感到困惑)。

我强烈建议保持所有的单位都是真实的物理单位,就像我之前做的那样。这样就清楚了,例如高斯函数的宽度是多少等等。


你好,高斯核函数中不需要归一化因子吗? - zwep
如果您的卷积需要特定的归一化(例如,如果您正在平滑并希望将其归一化为1),则必须包括该归一化。 (顺便说一句,您不需要将该归一化放在内核中,因此是否将其包含在内核中是您的选择。总体而言,我的高斯函数只是一个示例,在这里我仅描述了计算机制,而不是有关内核选择等问题,并且假定此示例完成任何特定数据分析任务是错误的。) - tom10

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接