fullseye

synth_starfield — ASTROSTACK synth op

使い方

既知の星野を 1 枚合成する —— この族の正解の供給源

星は 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_samplephotons_per_unit=1.0 で呼ぶ)に、その後で宇宙線を足し、最後に 加法ガウスの読み出しノイズ read_sigma を足す。順序は物理どおりで、 宇宙線は光子ではない(Poisson 標本化を通さない)。宇宙線の位置は :func:defectgen.defect_pits の一様点過程に任せる —— 「稀で小さく鋭い、 位置がランダムな付着」は孔食と同じ確率幾何であって、二つ目のモデルを 書く理由が無い。

shift_row / shift_col は星野全体を副画素で動かす(ディザ)。合成した 真値の座標もその分だけ動くので、位置合わせと drizzle の検算に使える。

Returns (frame, truth):

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 が非負整数でない場合。

参考(サンプルデータ・文献)

実行できる例(この op を実際に呼ぶ検証済みサンプル)

型が繋がる次の op(image2d を入力に取れる)

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

同カテゴリ(synth)

synth_frame_series


Provenance: astrostack.py — ASTROSTACK operator registry. この per-op ノートは tools/opdocs.py md が自動生成(手編集しない)。

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