absolute_phase — 3D structured_light op

• Datenarten: image2d × image2d → image2d

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

Verwendung

Macht aus einer eingewickelten Phase eine absolute, indem die Streifenordnung aus einer groben, aber absoluten Phasenschätzung festgelegt wird.

Φ = wrapped + 2π·round((coarse − wrapped) / 2π)

wrapped: Ausgabe von wrapped_phase, ein 2D-Array in (-π,π] (hochgenau, ohne absolute Ordnung).

coarse: 2D-Array gleicher Form. Eine absolute, aber grobe Phasenschätzung [rad]. Typisch ist die per Gray-Code dekodierte

Projektorspaltennummer, in Phase umgerechnet (2π·freq·col/width). NaN erlaubt (Ausgabe ebenfalls NaN).

Rückgabewert: absolute Phase [rad] (2D float64). Ungültige Pixel (eines von beiden NaN) sind NaN.

Warum nötig (Unterschied zum räumlichen Entfalten): unwrap_phase_2d folgt benachbarten Pixeln, um 2π-Sprünge zu überbrücken, daher (a) bleibt ein globaler Offset +2πm, und (b) kann die Ordnung zwischen durch Verdeckung getrennten Inseln nicht weitergegeben werden. Diese Op bestimmt die Ordnung pixelweise unabhängig und ist daher auch in in Inseln zerfallenen Szenen absolut, und braucht keine Weitergabe. Im Gegenzug muss der Fehler von coarse kleiner als eine halbe Periode (π) sein.

Anforderung (fail-closed): |coarse − Φ_true| < π. Wird sie verletzt, wählt round die benachbarte Ordnung, und nur dieses Pixel verschiebt sich stillschweigend um 2π (= die Tiefe von 1 Streifen). Die Streifenzahl freq so wählen, dass die Grobheit des Gray-Codes (±0.5 Spalte), in Phase umgerechnet, eine halbe Periode nicht überschreitet (z. B. Projektorbreite 512 px, freq 24 → 1 Periode 21.3 px, Grays ±0.5 px liegen bequem innerhalb).

Raises: ValueError bei Formabweichung, nicht 2D oder wenn wrapped weit außerhalb von (-π,π] liegt.

Herkunft (öffentliche Literatur): das kombinierte Verfahren, das aus Gray-Code und Phasenverschiebung die absolute Phase gewinnt -- Sansoni et al., *Appl. Opt.* 38(31) 1999 / Zhang, *Opt. Lasers Eng.* 48 2010 (Übersicht). Projektion des Gray-Codes selbst: Inokuchi et al., *ICPR* 1984.

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_scan — py -3.11 examples_3d/structured_light_scan.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 · unwrap_phase_2d · graycode_decode · decode_fringe · synthesize_fringes · 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.