photometry op• 数据种类:image2d × keypoints → table
• 调用: import fullseye as fs; fs.ledger.psf_fit(image, centers, model='gaussian', box=11, max_iter=200)(要直接调用实现,import astrostack; astrostack.psf_fit(image, centers, model='gaussian', box=11, max_iter=200);从台账取用则 opsastrostack.get("psf_fit"))
对星像拟合 PSF,得到中心与 FWHM。
*model* "gaussian" 是椭圆高斯 bkg + amp * exp(-((dr/sr)^2 + (dc/sc)^2)/2) 的 6 参数拟合,圆度(roundness = min(sr,sc)/max(sr,sc))作为副产品给出 —— 因跟踪误差或风而拉长的星像会体现在这里。"moffat" 是圆对称的 bkg + amp * (1 + r^2/alpha^2)^(-beta)(Moffat 1969),beta 也是
自由参数。最小二乘用 scipy.optimize.least_squares (Trust Region Reflective),初值是由 2 阶矩构造的确定值 —— 不使用随机数,所以同样的输入得到同样的答案。
FWHM 是由拟合参数得到的闭式:高斯为 2 sqrt(2 ln 2) * sqrt(sr*sc)(几何平均),Moffat 为 2 alpha sqrt(2^(1/beta) - 1)。
总会因像素的箱而偏宽。 这里拟合的是*连续的* 高斯,而图像的每个像素是连续分布在 1 像素箱上的积分值。宽度 1 的均匀箱的方差是 1/12,所以返回的 sigma 不是真实 sigma,而是 sqrt(sigma^2 + 1/12) —— 这不是估计误差,而是图像本来就是这样构成的。实测与这一预测吻合良好::
真实 FWHM 预测 = 2.3548*sqrt(sigma^2+1/12) 实测(中位数)
2.5 2.5908 2.5930
3.5 3.5654 3.5625
5.0 5.0460 5.0145
想要真实 sigma,可按 sqrt(sigma_fit^2 - 1/12) 减去,但 默认不减 —— 星体测量中通常所说的“FWHM”是图像上表观的宽度,若默默加入校正,就会与其他工具的值对不上。
Returns 每颗星一个 dict 的 list(table 词汇)。键为 row / col(拟合的中心)、fwhm_px、amplitude、background、roundness、rms(残差 RMS)、converged(bool)、model,以及依 model 而定的 sigma_row_px / sigma_col_px 或 alpha_px / beta。窗口超出图像的星、拟合未收敛的星也不舍弃,以 converged=False 返回 —— 若默默删除,谁也无法察觉“星变少了”。
Raises ValueError:*model* 不在 PSF_MODELS 中 / *box* 小于 5 或为偶数 / *centers* 不是 (N, 2) 时。
• 示例数据目录(下载 URL / 许可证) —— 2-D 用 skimage.data(BSD/公有领域)加合成图,3-D 给出真实数据源(Stanford/PDS 等)的下载 URL。
• 算子来历与参考文献 —— 该算子族所依据的研究/方法出处。
• 算法的正典(作者、年份)与用途见上面的族使用指南。
• astro_stacking — py -3.11 examples/astro_stacking.py
• poc_star_astrometry — py -3.11 examples/poc_star_astrometry.py
table 作为输入)—
photometry)star_detect · aperture_photometry
*Provenance: astrostack.py — ASTROSTACK 算子登记表。本条目由 tools/opdocs.py md 自动生成(请勿手工编辑)。*
© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.