stack op• Data kinds: images → image2d
• Call: import fullseye as fs; fs.ledger.sigma_clip_stack(frames, mode='sigma_clip', kappa=3.0, iters=5, center='median', scale='mad') (implementation को सीधे call करना हो तो import astrostack; astrostack.sigma_clip_stack(frames, mode='sigma_clip', kappa=3.0, iters=5, center='median', scale='mad'), registry से लेना हो तो opsastrostack.get("sigma_clip_stack"))
• Ledger के ज़रिए return value: fullseye.ledger.sigma_clip_stack(...) केवल घोषित out type image2d का value लौटाता है (मूल function सहायक जानकारी भी लौटाता है)। जो हिस्सा छोड़ दिया गया है उसकी ज़रूरत हो तो fullseye.ledger.sigma_clip_stack.raw(...) का उपयोग करें, या astrostack.sigma_clip_stack को सीधे call करें।
• मूल function का return: (stack, accepted) -> image2d
frame की श्रृंखला को combine करता है (mean / median / κ-σ clipping), स्वीकार/अस्वीकार mask सहित।
*mode*:
• "mean" —— सादा mean। noise sqrt(N) से घटता है, लेकिन outliers (cosmic rays, satellite trails) केवल 1/N से पतले होते हैं और हमेशा बने रहते हैं।
• "median" —— median। outliers के प्रति robust, लेकिन normal distribution के लिए noise mean की तुलना में sqrt(pi/2) = 1.2533 गुना कम घटता है (= व्यावहारिक रूप से 36 % frames को फेंक देने के बराबर)।
• "sigma_clip" —— median को केंद्र और scale को scale मानकर, |x - center| > kappa * scale को हटाता है और बाकी का औसत लेता है। यह iters बार दोहराया जाता है। outliers के प्रति robust, और चूँकि बचे pixels का औसत लिया जाता है, noise भी sqrt(N_accepted) से घटता है —— व्यावहारिक default।
Breakdown point 50 % है। जब तक केंद्र median और scale MAD है, जिस pixel पर दूषित frames आधे से अधिक हों, वहाँ median स्वयं दूषित पक्ष पर होता है, और clip सही पक्ष को फेंक देता है। यह इस implementation का दोष नहीं बल्कि median की परिभाषा ही है; center="mean" के साथ यह बहुत पहले टूट जाता है (1 दूषित frame पर भी)। test 0–60 % की contamination rates पर error मापता है, और टूटने वाले पक्ष को जैसा है वैसा रखता है।
scale का default "mad" होना माप का परिणाम है। scale="std" के साथ, "outliers स्वयं उस scale को फुला देते हैं जिससे outliers खोजे जाते हैं", इसलिए contamination बढ़ने पर यह वास्तव में कुछ भी नहीं हटाता —— 24x24 के 20 flat fields (ground truth 100, σ=2) पर, जिनमें से 4 में (20 %) +500 contamination था, मापा गया:
scale="std" की rejection rate 0.0 % और error +99.9975 (= दशमलव तक सादे mean के ठीक समान), scale="mad" की rejection rate 22.0 % और error -0.019। breakdown point std के लिए 10–20 % के बीच और mad के लिए ठीक 50 % है, लगभग 5 गुना का अंतर।
(stack, accepted) लौटाता है:
• stack —— (H, W) float64।
• accepted —— (N, H, W) bool, True = pixel स्वीकार किया गया। mode="mean" / "median" के लिए सभी True (दोनों में से कोई clip नहीं करता, इसलिए "स्वीकार/अस्वीकार" अवधारणा की अनुपस्थिति इस बात से दिखाई जाती है कि कोई False है ही नहीं)।
Raises ValueError: *frames* list / tuple नहीं / 2 से कम frames / shapes मेल नहीं खाते / *mode* STACK_MODES में नहीं / *kappa* धनात्मक नहीं / *center* "median" / "mean" के अलावा / *scale* "std" / "mad" के अलावा।
• Sample data catalog (DL URL / license) — 2-D के लिए skimage.data (BSD/public) + synthetic, 3-D के लिए real data sources (Stanford/PDS आदि) के DL URL।
• Operators का स्रोत और संदर्भ — इस op family के मूल research/methods के स्रोत।
• Algorithm का मानक स्रोत (लेखक, वर्ष) और उपयोग ऊपर की family usage guide में दिए गए हैं।
• 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 को input के रूप में लेते हैं)frame_quality · noise_sigma · cosmic_ray_reject · star_detect · psf_fit · aperture_photometry · frame_align
stack)*Provenance: astrostack.py — ASTROSTACK operator registry. यह per-op note tools/opdocs.py md से अपने-आप generate होता है (हाथ से edit न करें)।*
© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.