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

참고(샘플 데이터·문헌)

• 샘플 데이터 카탈로그(DL URL / 라이선스) —— 2-D 는 skimage.data(BSD/public)+ 합성, 3-D 는 실데이터 소스(Stanford/PDS 등)의 DL 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 연산자 레지스트리. 이 op 노트는 tools/opdocs.py md 가 자동 생성합니다(직접 편집하지 마세요).*

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