cosmic_ray_reject_stack — ASTROSTACK cosmic op

• Data kinds: images → images

• Call: import fullseye as fs; fs.ledger.cosmic_ray_reject_stack(frames, kappa=5.0, min_frames=3, read_sigma=None, gain=1.0) (implementation को सीधे call करना हो तो import astrostack; astrostack.cosmic_ray_reject_stack(frames, kappa=5.0, min_frames=3, read_sigma=None, gain=1.0), registry से लेना हो तो opsastrostack.get("cosmic_ray_reject_stack"))

• Ledger के ज़रिए return value: fullseye.ledger.cosmic_ray_reject_stack(...) केवल घोषित out type images का value लौटाता है (मूल function सहायक जानकारी भी लौटाता है)। जो हिस्सा छोड़ दिया गया है उसकी ज़रूरत हो तो fullseye.ledger.cosmic_ray_reject_stack.raw(...) का उपयोग करें, या astrostack.cosmic_ray_reject_stack को सीधे call करें।

• मूल function का return: (cleaned, masks) -> images

उपयोग

frame की तुलना से cosmic ray हटाना — एक ही जगह पर दो बार नहीं लगती।

एक frame में cosmic rays पहचानना कठिन है क्योंकि "तारे भी नुकीले होते हैं", लेकिन कई aligned frames के साथ यह सरल हो जाता है: तारा हर बार उसी pixel पर होता है, और cosmic ray केवल एक बार आती है। इसलिए हर pixel के लिए frame axis के साथ median और MAD लिए जाते हैं, और केवल value > median + kappa * sigma वाले frames हटाए जाते हैं और median से भरे जाते हैं (निचली ओर नहीं हटाई जाती —— cosmic rays हमेशा जोड़ने की दिशा में outliers होती हैं, और निचली ओर हटाने से missing pixels भी मिट जाएँगे)।

min_frames frames से कम पर न median का कोई अर्थ है न MAD का, इसलिए इसे अस्वीकार किया जाता है (3 frames न्यूनतम है: 2 के साथ यह तय नहीं हो सकता कि outlier कौन है)। Frames aligned होने चाहिए —— misaligned देने पर, तारे "केवल एक बार आते हैं" और गायब होने वाले तारे ही होते हैं।

मापा गया: कम frames के साथ MAD पर ही भरोसा नहीं किया जा सकता। 8 frames के background पर MAD अनुमान सही σ 9.22 के मुकाबले 7.89 था (-14.5 %), और यह pixel दर pixel बहुत बिखरता है, इसलिए इच्छित kappa=5 व्यावहारिक रूप से 4.3 था, और false positives true positives के 2.4 गुना आए (546 बनाम 227 pixels)। इसके अलावा false positives तारों पर नहीं, background पर थे (false-positive pixels का median ground truth 60 था = स्वयं आकाश), इसलिए "क्योंकि तारे नुकीले होते हैं" इसकी व्याख्या नहीं करता —— कारण यह है कि छोटे sample का MAD हर pixel पर बहुत बिखरता है। 2 उपाय एक साथ लगाए गए हैं:

1. _mad_correction (Croux & Rousseeuw 1992) का small-sample correction लागू करें।

2. *read_sigma* देने से इस module का एकमात्र noise model, sigma = sqrt(median/gain + read_sigma^2), scale का floor बन जाता है। यह वही "Poisson(signal) + Gauss(readout)" है जो synth_starfield उपयोग करता है, कोई दूसरा सिद्धांत नहीं। floor के साथ, वे pixels जिनका MAD sampling उतार-चढ़ाव से संयोगवश छोटा आया, अब cosmic rays में नहीं बदलते।

मापा गया प्रभाव (128x128 / 25 तारे / प्रति frame 10 cosmic rays / 8 frames, सही cosmic rays 227 pixels, kappa=5)::

read_sigma=None -> 594 px detected, false positives 367, precision 0.382

read_sigma=5.0 -> 228 px detected, false positives 1, precision 0.996

दोनों मामलों में recall 1.000 है (1 pixel भी नहीं छूटा)। floor cosmic rays को छोड़ने की दिशा में काम नहीं करता —— cosmic rays noise से दसियों गुना होती हैं, इसलिए floor कुछ e- बढ़ जाए तब भी वे उसे पार कर जाती हैं।

(cleaned, masks) लौटाता है:

• cleaned —— लंबाई N की list, हर एक (H, W) float64 (images vocabulary)।

• masks —— (N, H, W) bool, True = cosmic ray माना गया pixel।

Raises ValueError: यदि *frames* list / tuple नहीं / frames की संख्या *min_frames* से कम / shapes मेल नहीं खाते / *kappa* non-positive / *gain* non-positive / *read_sigma* ऋणात्मक है।

संदर्भ (sample data, साहित्य)

• 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 में दिए गए हैं।

चलाए जा सकने वाले उदाहरण (verified samples जो सच में यह op call करते हैं)

• astro_stacking — py -3.11 examples/astro_stacking.py

वे अगले ops जिनसे type जुड़ता है (images को input के रूप में लेते हैं)

lucky_select · sigma_clip_stack · drizzle_resample · align_frames

इसी category के (cosmic)

cosmic_ray_reject


*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.