stack opimages → image2dimport 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 が :data:STACK_MODES にない / kappa が非正 /
center が "median" / "mean" 以外 / scale が "std" /
"mad" 以外の場合。
py -3.11 examples/astro_stacking.pypy -3.11 examples/poc_astro_photometry.pypy -3.11 examples/poc_exoplanet_transit.pypy -3.11 examples/poc_river_surface_velocity.pyimage2d を入力に取れる)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.