psf_fit — ASTROSTACK 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.