cosmic_ray_reject_stack — ASTROSTACK cosmic op

• Datenarten: images → images

• Aufruf: import fullseye as fs; fs.ledger.cosmic_ray_reject_stack(frames, kappa=5.0, min_frames=3, read_sigma=None, gain=1.0) (die Implementierung direkt: import astrostack; astrostack.cosmic_ray_reject_stack(frames, kappa=5.0, min_frames=3, read_sigma=None, gain=1.0); aus dem Register: opsastrostack.get("cosmic_ray_reject_stack"))

• Rückgabewert über das Register: fullseye.ledger.cosmic_ray_reject_stack(...) liefert nur den Wert des deklarierten Out-Typs images (die zugrunde liegende Funktion gibt zusätzlich Hilfsinformationen zurück). Wird das Verworfene gebraucht, nutze fullseye.ledger.cosmic_ray_reject_stack.raw(...) oder rufe astrostack.cosmic_ray_reject_stack direkt auf.

• Rückgabe der Funktion: (cleaned, masks) -> images

Verwendung

Entfernung kosmischer Strahlen durch Bildvergleich — dieselbe Stelle wird nie zweimal getroffen.

Kosmische Strahlung ist in einem Einzelframe schwer zu erkennen, weil "auch Sterne spitz sind", doch mit vielen ausgerichteten Frames wird es einfach: ein Stern liegt jedes Mal auf demselben Pixel, ein Treffer kosmischer Strahlung kommt nur einmal. Daher werden pro Pixel Median und MAD entlang der Frame-Achse bestimmt, nur Frames mit value > median + kappa * sigma verworfen und mit dem Median gefüllt (die Unterseite wird nicht verworfen —— kosmische Strahlung ist stets ein Ausreißer in addierender Richtung, und das Verwerfen der Unterseite würde sogar fehlende Pixel löschen).

Unter min_frames Frames sind weder Median noch MAD sinnvoll, daher wird abgelehnt (3 Frames sind das Minimum: bei 2 ist nicht entscheidbar, welcher der Ausreißer ist). Die Frames müssen ausgerichtet sein —— unausgerichtet übergeben "kommen" die Sterne "nur einmal", und es sind die Sterne, die verschwinden.

Gemessen: bei wenigen Frames ist schon die MAD unzuverlässig. Auf einem Hintergrund aus 8 Frames lag die MAD-Schätzung bei 7.89 gegenüber dem wahren σ 9.22 (-14.5 %) und streut zudem stark von Pixel zu Pixel, sodass ein beabsichtigtes kappa=5 effektiv 4.3 war und falsch positive Pixel 2.4-mal so viele wie richtig positive (546 zu 227 Pixel) auftraten. Zudem lagen die falsch positiven nicht auf Sternen, sondern auf dem Hintergrund (Median der Ground Truth der falsch positiven Pixel 60 = der Himmel selbst), also erklärt "weil Sterne spitz sind" es nicht —— Ursache ist, dass die MAD kleiner Stichproben pro Pixel stark streut. 2 Gegenmaßnahmen sind übereinandergelegt:

1. Die Kleinstichproben-Korrektur von _mad_correction (Croux & Rousseeuw 1992) wird angewandt.

2. Wird *read_sigma* übergeben, dient das einzige Rauschmodell dieses Moduls sigma = sqrt(median/gain + read_sigma^2) als Untergrenze der Skala. Es ist dasselbe "Poisson(Signal) + Gauss(Auslesen)", das synth_starfield verwendet, keine zweite Theorie. Mit der Untergrenze werden Pixel, deren MAD durch Stichprobenschwankung zufällig klein ausfiel, nicht mehr zu kosmischer Strahlung.

Gemessene Wirkung (128x128 / 25 Sterne / 10 Treffer pro Frame / 8 Frames, wahre kosmische Strahlung 227 Pixel, kappa=5)::

read_sigma=None -> 594 px erkannt, falsch positiv 367, Präzision 0.382

read_sigma=5.0 -> 228 px erkannt, falsch positiv 1, Präzision 0.996

Die Trefferquote ist in beiden Fällen 1.000 (kein einziges Pixel verpasst). Die Untergrenze wirkt nicht in Richtung übersehener Treffer —— kosmische Strahlung liegt um das Zig-fache über dem Rauschen; selbst wenn die Untergrenze um einige e- steigt, wird sie überschritten.

Returns (cleaned, masks):

• cleaned —— list der Länge N, jeweils (H, W) float64 (Vokabular images).

• masks —— (N, H, W) bool, True = als kosmische Strahlung beurteiltes Pixel.

Raises ValueError: wenn *frames* keine list / tuple ist / die Anzahl der Frames kleiner als *min_frames* ist / die Formen nicht übereinstimmen / *kappa* nicht positiv / *gain* nicht positiv / *read_sigma* negativ ist.

Referenzen (Beispieldaten, Literatur)

• Katalog der Beispieldaten (Download-URLs / Lizenzen) — 2-D nutzt skimage.data (BSD/Public Domain) plus synthetische Bilder, 3-D nennt Download-URLs echter Datenquellen (Stanford, PDS, …).

• Herkunft und Literatur der Operatoren — die Quellen der Forschung/Verfahren, auf denen diese Operatorfamilie beruht.

• Der kanonische Algorithmus (Autor, Jahr) und seine Anwendungen stehen im Familienleitfaden oben.

Ausführbare Beispiele (verifizierte Samples, die diesen Operator wirklich aufrufen)

• astro_stacking — py -3.11 examples/astro_stacking.py

Typkompatible Folge-Operatoren (nehmen images als Eingabe)

lucky_select · sigma_clip_stack · drizzle_resample · align_frames

Gleiche Kategorie (cosmic)

cosmic_ray_reject


*Provenance: astrostack.py — ASTROSTACK Operator-Registry. Diese Notiz wird von tools/opdocs.py md erzeugt (nicht von Hand bearbeiten).*

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