align op• Datenarten: images → images
• Aufruf: import fullseye as fs; fs.ledger.align_frames(frames, reference=0, order=3, **align_kw) (die Implementierung direkt: import astrostack; astrostack.align_frames(frames, reference=0, order=3, **align_kw); aus dem Register: opsastrostack.get("align_frames"))
• Rückgabewert über das Register: fullseye.ledger.align_frames(...) 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.align_frames.raw(...) oder rufe astrostack.align_frames direkt auf.
• Rückgabe der Funktion: (aligned, matrices) -> images
Registriert eine Bildfolge auf eine Referenz.
Für jeden Frame wird die Transformation mit frame_align geschätzt, und scipy.ndimage.affine_transform führt inverse Abbildung und Neuabtastung aus.
Ein ehrlicher Hinweis: Interpolation erhält das Bild nicht. Rauschfreie 64x64 / 12 Sterne, um (0.5, 0.5) px verschoben und zurückgeschoben, gemessen::
order=1 (bilinear) Gesamtfluss -0.016 % Sternspitze -11.437 %
order=3 (Spline) Gesamtfluss -0.016 % Sternspitze -0.312 %
Der Gesamtfluss bleibt in beiden Fällen nahezu erhalten, doch bilinear fällt die Sternspitze um mehr als ein Zehntel —— eine Verschiebung um 0.5 px ist die ungünstigste Phase für bilinear, da sie zum einfachen Mittel von 4 benachbarten Pixeln wird. Der Default order=3 beruht auf dieser Messung (order=3 erzeugt einen winzigen negativen Saum um Sterne, aber in der obigen Messung war das Minimum -0.0000, keine sichtbare Größe).
Wer Fluss und Spitze exakt erhalten will, interpoliert nicht, sondern übergibt an drizzle_resample —— nicht zu interpolieren ist der eigentliche Daseinszweck von drizzle. Allerdings dürfen die geschätzten Verschiebungen nicht unverändert übergeben werden: die Translation der hier gelieferten matrices zeigt "zurück zur Referenz", mit umgekehrtem Vorzeichen gegenüber dem, was drizzle braucht.
Über drizzle_shifts leiten::
aligned, mats = align_frames(frames)
sci, wht = drizzle_resample(frames, drizzle_shifts(mats), scale=2.0)
Returns (aligned, matrices):
• aligned —— list der Länge N, jeweils (H, W) float64 (Vokabular images). Der Referenzframe wird ohne Transformation unverändert zurückgegeben (selbst die Identität macht das Bild durch Interpolation unschärfer, daher gibt es keinen Grund, ihn durchzuschicken).
• matrices —— list der Länge N, jeweils (3, 3). Die Referenz erhält die Einheitsmatrix.
Raises ValueError: wenn *frames* keine list / tuple ist / weniger als 2 Frames / *reference* außerhalb des Bereichs / *order* außerhalb von 0 bis 5 / frame_align bei irgendeinem 1 Frame scheitert (ein Fehlschlag wird nicht still zur Identität).
• 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
images als Eingabe)lucky_select · sigma_clip_stack · drizzle_resample · cosmic_ray_reject_stack
align)*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.