unwrap_phase_2d — 3D structured_light op

• Datenarten: image2d → image2d

• Aufruf: import fullseye as fs; fs.ledger.unwrap_phase_2d(wrapped, mask=None) -> 'np.ndarray' (die Implementierung direkt: import fringe; fringe.unwrap_phase_2d(wrapped, mask=None) -> 'np.ndarray'; aus dem Register: ops3d.get("unwrap_phase_2d"))

Verwendung

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.

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)). Entfaltet man die Referenzfläche mit demselben Verfahren und zieht sie ab, hebt sich der globale Offset auf. decode_fringe erledigt diese Kette in 1 Aufruf.

Hintergrundwissen (Physik und Konventionen hinter diesem Operator)

• depth_sensors — Tiefensensoren — Messprinzipien, Werte realer Geräte, wie Messlücken entstehen

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.

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

• structured_light — py -3.11 examples_3d/structured_light.py

Typkompatible Folge-Operatoren (nehmen image2d als Eingabe)

fuse_to_voxel · fit_poly_surface · eval_poly_surface · surface_form_error · background_flatten · polar_unwrap · fit_zernike · matcap_shade

Gleiche Kategorie (structured_light)

wrapped_phase · graycode_decode · decode_fringe · 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.