lucky_select — ASTROSTACK quality op

• Datenarten: images → indices

• Aufruf: import fullseye as fs; fs.ledger.lucky_select(frames, keep_fraction=0.3, min_keep=1, **quality_kw) (die Implementierung direkt: import astrostack; astrostack.lucky_select(frames, keep_fraction=0.3, min_keep=1, **quality_kw); aus dem Register: opsastrostack.get("lucky_select"))

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

Verwendung

Behält nur die besten keep_fraction nach Qualitätsbewertung — der Lucky-Imaging-Schnitt.

Die Zahl der behaltenen Frames ist max(min_keep, ceil(keep_fraction * N)). Mindestens 1 Frame bleibt immer erhalten, daher wird das Ergebnis nie leer, wie klein keep_fraction auch ist (einen leeren Stack an nachgelagerte Stufen zu geben, wäre der größere Unfall). Sortiert wird absteigend nach Score, stabil, sodass bei Gleichstand die ursprüngliche Reihenfolge erhalten bleibt —— dieselbe Eingabe liefert dieselbe Reihenfolge.

Returns (indices, scores):

• indices —— (K,) int64, Indizes der behaltenen Frames, die besten zuerst (indices-Vokabular). [frames[i] for i in indices] lässt sich direkt an sigma_clip_stack übergeben.

• scores —— (N,) float64, Scores aller Frames (einschließlich der verworfenen). Damit sich der Grund für das Verwerfen darstellen lässt, wird das Material statt des Auswahlergebnisses zurückgegeben.

Ground truth it reproduces (tests/test_astrostack.py): Bei einer Frame-Serie desselben Sternfelds, nur mit veränderter FWHM aufgenommen, sinkt der Score mit der FWHM. Gemessen an 12 Frames 96x96 mit 20 Sternen und FWHM variiert über 3.462–6.080 px:

corr(fwhm, score) = -0.925. Nimmt man die besten 25 % (3 Frames) und mittelt sie, sinkt die FWHM nach dem Stacking gegenüber dem Mittel aller 12 Frames von 4.403 → 3.672 px, eine Verbesserung um 16.6 % —— obwohl die Frame-Zahl auf 1/4 reduziert wird, wird das Bild schärfer; genau das ist die Aussage des Lucky Imaging (dafür wird das Rauschen sqrt(4) = 2-mal größer).

Raises ValueError: *frames* keine list / tuple (ein 3-D-Array wird explizit abgewiesen) / weniger als 1 Frame / keep_fraction außerhalb von (0, 1] / *min_keep* übersteigt die Frame-Anzahl.

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

• poc_astro_photometry — py -3.11 examples/poc_astro_photometry.py

Typkompatible Folge-Operatoren (nehmen indices als Eingabe)

—

Gleiche Kategorie (quality)

frame_quality · noise_sigma


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