计算星形轮廓的FWHM

时间:2018-09-13 19:52:21

标签: gaussian astronomy

我的目标是计算恒星轮廓的FWHM。

我有一张图片,里面有一颗星星,作为输入。每个像素在(x,y)位置的强度在0到1之间。

我的想法是计算整个数据集的标准偏差,然后使用以下公式:

f(x,y)= [1 /(√(2π)σ)] exp(-[(x-X)^ 2 +(y-Y)^ 2] /2σ^ 2])

求解方程:

fmax / 2 = 1 / [2√(2π)σ] = [1 /(√(2π)σ)] exp(-[(x-X)^ 2 +(y-Y)^ 2] / 2σ^ 2])=>

FWHM =2σ√(2ln2)

使用这种方法,在查看数据时并不能获得预期的结果。

有什么我想念的吗?还有其他建议吗?

谢谢。

最佳。 RC

1 个答案:

答案 0 :(得分:0)

使用插值可能会获得更好的结果,从而可以实现亚像素精度。并且由于您的数据在0-1之间,并且质心的强度为1,因此您可以提取到该点的轮廓。首先,如果您的图像尚未采用2D numpy数组的形式,则将其导入。如果您从FITS文件开始:

from astropy.io import fits
filename = 'your_image_file.fits'
image = fits.getdata(filename)

要提取您的个人资料并获取FWHM:

import numpy as np
from scipy.interpolate import UnivariateSpline

def profiles(image):
    ypix, xpix = np.where(image==1)
    x = np.take(image, ypix[0], axis=0)
    y = np.take(image, xpix[0], axis=1)

    return x, y #these are the horizontal and vertical profiles through the star's centroid

def interpolate_width(axis):
    half_max = 1/2
    x = np.linspace(0, len(axis), len(axis))

    # Do the interpolation
    spline = UnivariateSpline(x, axis-half_max, s=0)
    r1, r2 = spline.roots()

    return r2-r1 #this is the FWHM along the specified axis

horizontal, vertical = profiles(image)
fwhm_x = interpolate_width(horizontal)
fwhm_y = interpolate_width(vertical)

这是假设恒星未旋转-或者,如果只是旋转,则只需要沿水平轴和垂直轴的FWHM。如果星形相对于水平方向旋转,并且您希望FWHM沿着半长轴和半短轴,则必须通过选取由两个点连接的线段来提取轮廓。然后,您可以使用interpolate_width函数以相同的方式获得FWHM。有关此方法的配置文件提取部分,请参见此处:How to extract an arbitrary line of values from a numpy array?