stack op• データ種: images → image2d
• 呼び出し: import fullseye as fs; fs.ledger.sigma_clip_stack(frames, mode='sigma_clip', kappa=3.0, iters=5, center='median', scale='mad') (実装を直接呼ぶなら import astrostack; astrostack.sigma_clip_stack(frames, mode='sigma_clip', kappa=3.0, iters=5, center='median', scale='mad')、台帳から引くなら opsastrostack.get("sigma_clip_stack"))
• 台帳経由の戻り値: fullseye.ledger.sigma_clip_stack(...) は宣言 out 型 image2d の値だけを返す(本体は補助情報も返す)。捨てられた側が要るときは fullseye.ledger.sigma_clip_stack.raw(...)、または astrostack.sigma_clip_stack を直接呼ぶ。
• 本体の返り: (stack, accepted) -> image2d
フレーム列を合成する(平均 / 中央値 / κ-σ クリップ)。採否マスクつき。
*mode*:
• "mean" —— 単純平均。雑音は sqrt(N) で下がるが、外れ値(宇宙線・人工衛星の航跡)は 1/N しか薄まらず必ず残る。
• "median" —— 中央値。外れ値に強い代わりに、正規分布のとき雑音は平均の sqrt(pi/2) = 1.2533 倍しか下がらない(= 実効的に 36 % 枚数を捨てている)。
• "sigma_clip" —— 中央値を中心、scale を尺度として |x - center| > kappa * scale を落とし、残りで平均を取る。これを iters 回。外れ値に強く、かつ生き残った画素は平均されるので雑音も sqrt(N_accepted) で下がる —— 実用の既定。
破綻点は 50 %。 中心を中央値、尺度を MAD で取る以上、汚染フレームが半数を超えた画素では中央値そのものが汚染側に乗り、クリップは正しい方を捨てる。これはこの実装の不具合ではなく中央値の定義そのもので、center="mean" にすればもっと早く(汚染 1 枚でも)壊れる。テストは 0〜60 % の汚染率で誤差を測り、壊れる側もそのまま残してある。
scale の既定が "mad" なのは実測の結果。 scale="std" は「外れ値を見つけるための尺度を、その外れ値自身が膨らませる」ので、汚染が増えるとむしろ何も落とさなくなる —— 24x24 の平坦場(真値 100、σ=2)20 枚のうち 4 枚(20 %)に +500 の汚染を入れた実測では、scale="std" は棄却率 0.0 % で誤差 +99.9975(= 単純平均と小数点以下まで完全に同じ)、scale="mad" は棄却率 22.0 % で誤差 -0.019。破綻点は std が 10〜20 % の間、mad がちょうど 50 % で、5 倍近く違う。
Returns (stack, accepted):
• stack —— (H, W) float64。
• accepted —— (N, H, W) bool、True = 採用した画素。mode="mean" / "median" では全 True(どちらもクリップしないので、「採否」の概念が無いことを False が 1 つも無いことで示す)。
Raises ValueError: *frames* が list / tuple でない / 枚数が 2 未満 / 形が揃っていない / *mode* が STACK_MODES にない / *kappa* が非正 / *center* が "median" / "mean" 以外 / *scale* が "std" / "mad" 以外の場合。
• サンプルデータ カタログ(DL URL / ライセンス) — 2-D は skimage.data(BSD/public)+ 合成、3-D は実データ源(Stanford/PDS 等)の DL URL。
• 演算子の来歴・参考文献 — この op 族の元になった研究/手法の出典。
• アルゴリズムの正典(著者・年)と用途は上記ファミリ使い方ガイドに記載。
• astro_stacking — py -3.11 examples/astro_stacking.py
• poc_astro_photometry — py -3.11 examples/poc_astro_photometry.py
• poc_exoplanet_transit — py -3.11 examples/poc_exoplanet_transit.py
• poc_river_surface_velocity — py -3.11 examples/poc_river_surface_velocity.py
image2d を入力に取れる)frame_quality · noise_sigma · cosmic_ray_reject · star_detect · psf_fit · aperture_photometry · frame_align
stack)*Provenance: astrostack.py — ASTROSTACK operator registry. この per-op ノートは tools/opdocs.py md が自動生成(手編集しない)。*
© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.