我设法使用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
我不熟悉这种表单输出,所以我真的不知道如何提取参数。
答案 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或类似和/或缩放的版本。
当然,所有这一切都假定您已充分减去了背景...