从astropy.modeling Gaussian2D中提取参数

时间:2016-07-28 11:15:53

标签: python modeling astropy

我设法使用astropy.modeling在我的图像上建模2D高斯,并且它生成的适合图像的参数看似合理。但是,我需要在成千上万的图像上运行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

我不熟悉这种表单输出,所以我真的不知道如何提取参数。

2 个答案:

答案 0 :(得分:1)

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

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
# ...

答案 1 :(得分: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振幅值* u。(flux_units),其中flux_units是Jy或类似和/或缩放的版本。

当然,所有这一切都假定您已充分减去了背景...