wrapped_phase — 3D structured_light op

• Datenarten: images → image2d

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

Verwendung

Berechnet die eingewickelte Phase (−π, π] aus einer N-Schritt-phasenverschobenen Streifenbildserie.

Standard-N-Step-Formel φ = atan2(Σ_n I_n sin(2πn/N), Σ_n I_n cos(2πn/N)). Setzt N >= 3 gleichabständige Phasenverschiebungen voraus. Rückgabewert ist ein 2D-Array der gewickelten Phase (-π,π] an jedem Pixel.

images: Sequenz der Länge N (jeweils ein 2D-[0,1]-Bild) oder ein (N, H, W)-Array.

Berechnung: mit gleichabständigen Phasenverschiebungen δ_n = 2πn/N (n = 0..N-1) werden s = Σ_n I_n sin δ_n und c = Σ_n I_n cos δ_n per tensordot bestimmt, dann np.arctan2(s, c). Beim Modell I_n = a + b cos(φ - δ_n) (dieselbe Vorzeichenkonvention wie synthesize_fringes) kommt φ ohne Vorzeichenumkehr zurück. Die mittlere Leuchtdichte a fällt heraus, daher ist das Ergebnis unabhängig vom Bias.

Eingabe und Prüfung (ValueError): None / nicht in 3-D (N, H, W) umwandelbar / N < 3 / enthält NaN oder Inf. Der Wertebereich [0, 1] ist Voraussetzung, wird aber nicht geprüft (auch außerhalb läuft die Berechnung durch).

Rückgabewert: (H, W) float64, Wertebereich (-π, π]. Pixel mit s = c = 0 (keine Streifen, Modulation null) liefern arctan2(0, 0) = 0 und weder Fehler noch NaN -- um verlässliche Pixel auszuwählen, die Modulationstiefe mit modulation (Funktion desselben Moduls) betrachten (min_modulation von decode_fringe tut genau das).

Achtung: übergibt man eine Bildfolge mit nicht gleichabständigen Phasenverschiebungen oder unpassender Anzahl und Reihenfolge, gibt es keinen Fehler, sondern eine "plausibel falsche" Phase. Der nächste Schritt ist unwrap_phase_2d (räumliches Entfalten) oder absolute_phase (Ordnung über eine grobe absolute Phase festlegen).

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

• 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)

unwrap_phase_2d · 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.