stack op• Datenarten: images → image2d
• Aufruf: import fullseye as fs; fs.ledger.sigma_clip_stack(frames, mode='sigma_clip', kappa=3.0, iters=5, center='median', scale='mad') (die Implementierung direkt: import astrostack; astrostack.sigma_clip_stack(frames, mode='sigma_clip', kappa=3.0, iters=5, center='median', scale='mad'); aus dem Register: opsastrostack.get("sigma_clip_stack"))
• Rückgabewert über das Register: fullseye.ledger.sigma_clip_stack(...) liefert nur den Wert des deklarierten Out-Typs image2d (die zugrunde liegende Funktion gibt zusätzlich Hilfsinformationen zurück). Wird das Verworfene gebraucht, nutze fullseye.ledger.sigma_clip_stack.raw(...) oder rufe astrostack.sigma_clip_stack direkt auf.
• Rückgabe der Funktion: (stack, accepted) -> image2d
Kombiniert eine Bildfolge (Mittelwert / Median / κ-σ-Clipping), mit Annahme-/Verwerfungsmaske.
*mode*:
• "mean" —— einfacher Mittelwert. Das Rauschen sinkt mit sqrt(N), aber Ausreißer (kosmische Strahlung, Satellitenspuren) werden nur um 1/N verdünnt und bleiben immer übrig.
• "median" —— Median. Robust gegen Ausreißer, dafür sinkt bei Normalverteilung das Rauschen nur auf das sqrt(pi/2) = 1.2533-Fache des Mittelwerts (= effektiv werden 36 % der Frames verworfen).
• "sigma_clip" —— mit dem Median als Zentrum und scale als Maßstab wird |x - center| > kappa * scale verworfen und der Rest gemittelt. Das iters-mal. Robust gegen Ausreißer, und da die überlebenden Pixel gemittelt werden, sinkt auch das Rauschen mit sqrt(N_accepted) —— der praktische Default.
Der Bruchpunkt liegt bei 50 %. Solange das Zentrum der Median und der Maßstab die MAD ist, liegt bei Pixeln, bei denen kontaminierte Frames mehr als die Hälfte ausmachen, der Median selbst auf der kontaminierten Seite, und das Clipping verwirft die richtige Seite. Das ist kein Fehler dieser Implementierung, sondern die Definition des Medians selbst; mit center="mean" bricht es viel früher (schon bei 1 kontaminierten Frame). Der Test misst den Fehler bei Kontaminationsraten von 0–60 % und behält auch die versagende Seite unverändert bei.
Dass der Default von scale "mad" ist, ist ein Messergebnis. Bei scale="std" "blähen die Ausreißer selbst den Maßstab auf, mit dem Ausreißer gefunden werden sollen", sodass bei zunehmender Kontamination sogar nichts mehr verworfen wird —— gemessen an 20 flachen Feldern 24x24 (Ground Truth 100, σ=2), von denen 4 (20 %) mit +500 kontaminiert wurden:
scale="std" hat Verwerfungsrate 0.0 % und Fehler +99.9975 (= bis in die Nachkommastellen identisch mit dem einfachen Mittel), scale="mad" hat Verwerfungsrate 22.0 % und Fehler -0.019. Der Bruchpunkt liegt bei std zwischen 10–20 %, bei mad genau bei 50 %, fast ein Faktor 5 Unterschied.
Returns (stack, accepted):
• stack —— (H, W) float64.
• accepted —— (N, H, W) bool, True = akzeptiertes Pixel. Bei mode="mean" / "median" alle True (beide clippen nicht, daher wird das Fehlen eines "Annehmen/Verwerfen"-Konzepts dadurch angezeigt, dass es kein einziges False gibt).
Raises ValueError: *frames* keine list / tuple / weniger als 2 Frames / Formen stimmen nicht überein / *mode* nicht in STACK_MODES / *kappa* nicht positiv / *center* weder "median" noch "mean" / *scale* weder "std" noch "mad".
• 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.
• 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 als Eingabe)frame_quality · noise_sigma · cosmic_ray_reject · star_detect · psf_fit · aperture_photometry · frame_align
stack)*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.