从 astropy.modeling Gaussian2D 中提取参数

Extracting parameters from astropy.modeling Gaussian2D

我已经设法使用 astropy.modeling 在我的图像上建立二维高斯模型,它为适应图像而生成的参数似乎是合理的。但是,我需要 运行 对数千张图像进行 2D 高斯分布,因为我们有兴趣检查模型的 x 和 y 平均值,以及图像上的 x 和 y 标准差。模型输出如下所示:

m2
<Gaussian2D(amplitude=0.0009846091239480168, x_mean=30.826676737477573, y_mean=31.004045976953222, x_stddev=2.5046722491074536, y_stddev=3.163048479350727, theta=-0.0070295894129793896)>

我也可以告诉你:

type(m2)
<class 'astropy.modeling.functional_models.Gaussian2D'>
Name: Gaussian2D
Inputs: (u'x', u'y')
Outputs: (u'z',)
Fittable parameters: ('amplitude', 'x_mean', 'y_mean', 'x_stddev', 'y_stddev', 'theta')

我需要的是一种提取模型参数的方法,即:

x_mean
y_mean
x_stddev
y_stddev

我不熟悉这个表单输出,所以我真的很困惑如何提取参数。

模型具有您可以访问的属性:

from astropy.modeling import models
g2d = models.Gaussian2D(1,2,3,4,5)
g2d.amplitude.value  # 1.0
g2d.x_mean.value     # 2.0
g2d.y_mean.value     # 3.0
g2d.x_stddev.value   # 4.0
g2d.y_stddev.value   # 5.0

您需要在拟合模型后提取这些值,但您可以通过相同的方式访问它们:.<name>.value

您也可以一次提取它们,但是您需要跟踪哪个参数在哪个位置:

g2d.parameters    # array([ 1.,  2.,  3.,  4.,  5.,  0.])
# Amplitude
g2d.parameters[0] # 1.0
# x-mean
g2d.parameters[1] # 2.0
# ...

另一种方法是使用 estimate_line_parameters。它的文档在这方面不是很清楚(或者我认为)。如果问题是获取直线高斯分布的起始参数,这是一个很好的起点。

这样处理:

from specutils.spectra import Spectrum2D
from specutils.fitting import estimate_line_parameters

...

e1 = estimate_line_parameters(spectrum, models.Gaussian2D())
a = e1.amplitude.value
b = e1.x_mean.value
c = e1.y_mean.value
d = x_stddev.value
e = y_stddev.value

estimate_line_parameters 给出小数位的结果负载,因此如果您尝试 估计 起始值,您可能希望使用 round(value_name , n) 其中 n 是您认为合适的 dec 位数。

注意 a、b、c 等作为值返回并且不保留单位。所以你还需要:

from astropy import units as u

然后(例如)a = e1.amplitude.value*u.(flux_units) 其中 flux_units 是 Jy 或类似的 and/or 缩放版本。

当然,所有这些都假设您已经充分减去背景...