structured_light op• Datenarten: image2d → image2d
• Aufruf: import fullseye as fs; fs.ledger.unwrap_phase_2d(wrapped, mask=None, crop_valid=False) -> 'np.ndarray' (die Implementierung direkt: import fringe; fringe.unwrap_phase_2d(wrapped, mask=None, crop_valid=False) -> 'np.ndarray'; aus dem Register: ops3d.get("unwrap_phase_2d"))
• GPU: nein (nur CPU-Referenzimplementierung)
Entfaltet eine eingewickelte Phase mit skimage.restoration.unwrap_phase zu einer stetigen.
wrapped: Ausgabe von wrapped_phase (2D). Darf NaN enthalten (als ungültige Pixel behandelt).
mask: optional. True = gültiges Pixel (die intuitive Richtung, umgekehrt zur Konvention von numpy masked array).
NaN-Pixel und mask=False-Pixel gelten als ungültig, werden vom Entfalten ausgeschlossen und in der Ausgabe als NaN zurückgegeben.
crop_valid: Optional (Standard False = Verarbeitung des ganzen Bildes). Bei True wird nur das umschließende Rechteck der gültigen Pixel an skimage übergeben, außerhalb bleibt NaN (schnellerer Alternativpfad für gerahmte Bilder mit vielen ungültigen Pixeln; die Phase der gültigen Pixel stimmt bis auf ein ganzzahliges Vielfaches von 2π je Insel mit der Vollbildverarbeitung überein; dieser Versatz kann je nach skimage-Version abweichen).
Rückgabewert: stetige Phase (2D float). Ungültige Pixel sind NaN. Die Mehrdeutigkeit eines globalen Offsets (+2πm) bleibt.
Vorgehen: gibt es keine ungültigen Pixel (nicht endliches wrapped ∪ mask == False), wird skimage.restoration.unwrap_phase(arr) direkt aufgerufen. Andernfalls werden die ungültigen Pixel mit 0 gefüllt und als numpy.ma-Masked-Array übergeben (skimage schließt maskierte Pixel vom Entfalten aus), und die ungültigen Pixel der Ausgabe werden wieder auf NaN gesetzt.
Prüfung: in einer Umgebung, in der scikit-image nicht importiert werden kann, RuntimeError (nicht ImportError). wrapped nicht 2-D, mask mit anderer Form oder alle Pixel ungültig (keine Pixel zum Entfalten) lösen ValueError aus.
Voraussetzung (Itoh-Bedingung): die wahre Phasendifferenz benachbarter gültiger Pixel ist kleiner als π. An steilen Stufen, tiefen Löchern und Verdeckungsgrenzen wird ein 2π-Sprung falsch beurteilt, und der gesamte Bereich dahinter verschiebt sich um 2πm. Die relative Ordnung zwischen Bereichen, die durch die Maske in Inseln zerfallen, ist nicht bestimmt (jede Insel hat einen eigenen Offset). Wird Absolutheit benötigt, graycode_decode → absolute_phase mit seiner pixelweise unabhängigen Ordnungsbestimmung verwenden.
Einsatz: wrapped_phase → diese Op → phase_to_height (Funktion desselben Moduls, height = k (phase - ref_phase)). ★Der globale Entfaltungs-Offset 2πm wird bei jeder Entfaltung festgelegt (der Startzweig hängt vom Eingangsphasenfeld ab), daher hebt er sich nicht auf, wenn man Referenz- und Messfläche getrennt entfaltet und abzieht (bis 2026-11-05 stand hier „hebt sich auf“, doch in 24 von 60 Fällen war die Höhe um k·2π verschoben). Zum Abziehen einer Referenz ref_phase von decode_fringe verwenden — es bildet zuerst die Differenz der gewickelten Phasen und entfaltet nur einmal.
Leere Eingabe (wrapped mit 0 Elementen) löst ValueError aus.
• depth_sensors — Tiefensensoren — Messprinzipien, Werte realer Geräte, wie Messlücken entstehen
• 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.
• structured_light — py -3.11 examples_3d/structured_light.py
image2d als Eingabe)fuse_to_voxel · fit_poly_surface · eval_poly_surface · surface_form_error · background_flatten · polar_unwrap · fit_zernike · matcap_shade
structured_light)wrapped_phase · graycode_decode · decode_fringe · fringe_ftp_phase · depth_from_focus · synthesize_fringes · absolute_phase · triangulate_column
*Provenance: fringe.py — 3D 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.