synth_starfield — ASTROSTACK synth op

数据种类:image2d(仅由参数决定的算子 —— 不接受图像或数据输入)

调用:import astrostack; astrostack.synth_starfield(shape=(128, 128), n_stars=30, flux_min=400.0, flux_max=9000.0, fwhm_px=3.2, psf='gaussian', moffat_beta=2.5, sky=60.0, read_sigma=6.0, shift_row=0.0, shift_col=0.0, n_cosmic=0, cosmic_flux=4000.0, margin_px=6.0, seed=0, field_seed=None, noise=True)(或 opsastrostack.get("synth_starfield"))

用法

合成一张已知的星场 —— 这一族真值的来源

> 以下的详细说明为原文 —— 摘要与标题已翻译。

星は `flux_minflux_max` の対数一様分布から総フラックス(電子)を引き、

画像の縁から `margin_px 以上内側に一様に置く。*psf* が "gaussian"` の

ときは :func:scipy.special.erf による画素の厳密な積分なので、星 1 個の

総和は与えたフラックスに(画像の外へ出た分を除いて)厳密に一致する。

`"moffat"` は Moffat, *A Theoretical Investigation of Focal Stellar Images*,

A&A 3, 455 (1969) の `(1 + (r/alpha)^2)^(-beta)` で、地上の大気が支配する

星像の標準モデル(回折限界の兄弟は :func:optics.airy_pattern)。

ノイズは 1 つの理論しか持たない ——

`Poisson(星 + sky)(:func:photoncount.photon_sample` を

`photons_per_unit=1.0` で呼ぶ)に、その後で宇宙線を足し、最後

加法ガウスの読み出しノイズ `read_sigma` を足す。順序は物理どおりで、

宇宙線は光子ではない(Poisson 標本化を通さない)。宇宙線の位置

:func:defectgen.defect_pits の一様点過程に任せる —— 「稀で小さく鋭い、

位置がランダムな付着」は孔食と同じ確率幾何であって、二つ目のモデルを

書く理由が無い。

*shift_row* / *shift_col* は星野全体を副画素で動かす(ディザ)。合成した

真値の座標もその分だけ動くので、位置合わせと drizzle の検算に使える。

Returns `(frame, truth)`:

• `frame —— (H, W)` float64、単位は電子

• `truth —— dict。rows / cols (N,)` は星の真の中心(整数座標が

画素中心の規約)、`fluxes (N,) は真の総フラックス、fwhm_px` /

`sigma_px / alpha_px / beta は PSF、sky / read_sigma` は

雑音、`cosmic_mask (H, W) bool は宇宙線の画素、noiseless`

`(H, W)` はノイズを載せる前の期待値(検算用)。

seed は 2 本ある。 `field_seed` が星野(座標とフラックス)を、

`seed` がその回の観測(ショットノイズ・読み出しノイズ・宇宙線の位置)を

決める。`field_seed=None なら seed` と同じ値になる。分けてある理由は

実測で見つけた事故で、1 本にしていた最初の版では

:func:synth_frame_series がフレームごとに `seed` を変えた結果

星野そのものが毎フレーム別物になり、位置合わせが 1 対応しか見つけられず

(`frame_align` が正しく fail-closed した)、フレーム間の宇宙線除去は

「全画素が外れ値」を返した。同じ空を撮り直すのと、別の空を撮るのは、

引数 1 つで取り違えられる —— だから型ではなく名前で分ける。

乱数はどちらも `numpy.random.default_rng` なので、同じ seed 対なら

どの機械でも同じフレーム。

Ground truth it reproduces(`tests/test_astrostack.py` で固定):

`noise=Falsesky=0fwhm_px=3.0` の 1 星フレーム(64x64、

フラックス 5000 e-)では、画像全体の総和と与えたフラックスの相対誤差が

1.8e-16 —— float64 の丸め 1 回ぶんで、「ほぼ保存」ではなく保存。

半径 `r の円形開口が拾う割合は 1 - exp(-r^2/(2 sigma^2))` で、

`r = 2 sigma なら 0.8647、r = 3 sigma` なら 0.98889。

Raises `ValueError`: *shape* が小さすぎる / *n_stars* が非負整数でない /

`flux_min > flux_max / *psf* が :data:PSF_MODELS` にない /

`moffat_beta <= 1(積分が発散する)/ margin_px` が画像より大きい /

*seed* が非負整数でない場合。

参考(示例数据・文献)

• 示例数据目录(下载 URL / 许可证) —— 2-D 用 skimage.data(BSD/公有领域)加合成图,3-D 给出真实数据源(Stanford/PDS 等)的下载 URL。

• 算子来历与参考文献 —— 该算子族所依据的研究/方法出处。

• 算法的正典(作者・年份)与用途见上面的族使用指南

可运行的示例(实际调用该算子并已验证的样例)

astro_stackingpy -3.11 examples/astro_stacking.py

poc_astro_photometrypy -3.11 examples/poc_astro_photometry.py

类型可衔接的下一个算子(可接受 image2d 作为输入)

frame_quality · noise_sigma · cosmic_ray_reject · star_detect · psf_fit · aperture_photometry · frame_align

同类别(synth)

synth_frame_series


*Provenance: astrostack.py — ASTROSTACK 算子登记表。本条目由 tools/opdocs.py md 自动生成(请勿手工编辑)。*

© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.