Python 从astropy.modeling Gaussian2D中提取参数

Python 从astropy.modeling Gaussian2D中提取参数,python,modeling,astropy,Python,Modeling,Astropy,我已经设法使用astropy.modeling在我的图像上建立了一个二维高斯模型,它生成的用于拟合图像的参数似乎是合理的。然而,我需要在数千张图像上运行2D高斯分布,因为我们感兴趣的是检查模型的平均值x和y,以及图像上的x和y标准偏差。模型输出如下所示: m2 <Gaussian2D(amplitude=0.0009846091239480168, x_mean=30.826676737477573, y_mean=31.004045976953222, x_stddev=2.504672

我已经设法使用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)>

我不熟悉此表单输出,因此我真的被困在如何提取参数上。

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

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
安装模型后,您需要提取这些值,但可以通过相同的方式访问它们:
.value

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

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

另一种方法是使用估算线参数。这方面的文档不是很清楚(或者我认为是这样)。如果问题是获取直线的高斯函数的起始参数,那么这是一个很好的起点

要这样做:

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_参数提供小数位数的结果,因此如果您试图估计起始值,您可能希望使用舍入(value_name,n),其中n是您认为合适的小数位数

注意a、b、c等作为值返回,不保留单位。因此,您还需要:

from astropy import units as u
然后(例如)a=e1.振幅.值*u.(通量单位),其中通量单位为Jy或类似物和/或其缩放版本


当然,所有这些都假设你的背景已经被充分地减去了

对于数千张图像,请确保您使用的是模型集:
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
from astropy import units as u