structured_light op• Datenarten: images → depth
• Aufruf: import fullseye as fs; fs.ledger.decode_fringe(phase_shift_images, ref_phase=None, k=1.0, mask=None, min_modulation=None) -> 'np.ndarray' (die Implementierung direkt: import fringe; fringe.decode_fringe(phase_shift_images, ref_phase=None, k=1.0, mask=None, min_modulation=None) -> 'np.ndarray'; aus dem Register: ops3d.get("decode_fringe"))
Decodiert eine Phasenschiebe-Bildserie in einem Zug: wrapped → Entfaltung → (per Referenzsubtraktion) Höhe.
phase_shift_images: N-Step-Folge phasenverschobener Streifenbilder ((N,H,W) oder Sequenz der Länge N).
ref_phase: entfaltete Phase der Referenzebene (Höhe 0). Bei None ist Höhe = k·(unwrapped).
k: Kalibrierkonstante Phase→Höhe.
mask: optional. True=gültiges Pixel. Ungültige Pixel sind NaN.
min_modulation: optional. Falls angegeben, werden Pixel mit modulation < diesem Wert als wenig vertrauenswürdig ungültig gemacht.
Rückgabewert: Höhenkarte (2D float). Bei ref_phase=None wird die mit k multiplizierte stetige Phase zurückgegeben. Ungültige Pixel sind NaN.
Vorgehen (wie implementiert): wrapped_phase → Vertrauensmaske bilden (falls min_modulation gegeben, modulation(stack) >= min_modulation; falls mask gegeben, AND damit) → unwrap_phase_2d(wrapped, mask=Vertrauensmaske) → ist ref_phase None, k * unwrapped, sonst phase_to_height (k * (unwrapped - ref_phase)).
Argumente:
• phase_shift_images: (N, H, W), N >= 3, gleichabständige Phasenverschiebungen.
• ref_phase: Skalar oder (H, W). Die Phase der Referenzfläche übergeben, mit demselben Verfahren entfaltet (damit der globale Offset von unwrap_phase_2d in beiden gleich behandelt wird, ist es am sichersten, auch für die Referenz das Ergebnis der Dekodierung mit dieser Op und ref_phase=None zu verwenden).
• k: Kalibrierkonstante Phase→Höhe (Einheit/rad). Entspricht dem Kehrwert von phase_gain aus synthesize_fringes.
• mask: (H, W) bool, True = gültig. min_modulation: Untergrenze der Modulationstiefe (etwa [0, 1]; verwirft Pixel in Schatten und Sättigung).
Prüfung (ValueError): Bildfolge nicht 3-D, N < 3, nicht endlich / mask mit anderer Form / ref_phase mit anderer Form / null gültige Pixel. Ohne scikit-image RuntimeError.
Rückgabewert: (H, W) float64. Ungültige Pixel sind NaN. Die Einheit ist die Einheit von k.
Achtung: es beruht auf räumlichem Entfalten; in Szenen, die durch Stufen oder Verdeckung in Inseln zerfallen, kann pro Insel ein Höhenoffset von 2πm k verbleiben. Wird absolute Höhe benötigt, ist der Pfad graycode_decode → absolute_phase → triangulate_column.
• 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
depth als Eingabe)depth_to_points · tsdf_from_depth · to_points · fuse_to_voxel · depth_to_organized_points · normals_from_depth · occlusion_edges · bearing_angle_image
structured_light)wrapped_phase · unwrap_phase_2d · graycode_decode · 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.