我想将我的2D numpy数组(图像)数据拟合为高斯。我已经阅读了许多使用CREATE { TEMPORARY | TEMP } FUNCTION
function_name ([named_parameter[, ...]])
[RETURNS data_type]
{ [LANGUAGE language AS """body"""] | [AS (function_definition)] };
的示例,并且尝试过,但拟合度从来都不是很好的-这可能是因为我的背景不为零,有时也有其他峰。我认为,简单地生成具有正确峰值参数的高斯可能会更容易。我已经有了我想要的峰的子像素质心坐标scipy.optimize
和x
,并且可以很容易地用y
得到峰的振幅,尽管我想我必须对这些坐标进行四舍五入。我现在遇到的是x和y宽度。我的高斯函数如下:
data[y][x]
因此,我基本上只是对import numpy as np
def gaussian_func(xy, x0, y0, width_x, width_y, amp): #x0 and y0 are the centroid coordinates
x = xy[0]
y = xy[1]
offset = np.min(data) #should this be a median value of the background instead?
a = 1/(2*width_x**2)
c = 1/(2*width_y**2)
exp_term = a*(x-x0)**2 + c*(y-y0)**2
return (offset + amp * np.exp(-exp_term)).ravel()
x, y = np.arange(0, np.shape(data)[1], 1), np.arange(0, np.shape(data)[0], 1)
xx, yy = np.meshgrid(x, y)
gaussian = gaussian_func((xx, yy), x0, y0, width_x, width_y, amp)
gaussian = np.reshape(gaussian, np.shape(data))
和width_x
的插入内容感到困惑。我知道这些术语应该可以与x和y中的标准偏差互换,但是当我尝试仅使用width_y
时,结果却很糟糕。宽度是否对应于峰的实际物理宽度?如果是这样,我如何找到那些?谢谢!