structured_light op• データ種: images → depth
• 呼び出し: import fullseye as fs; fs.ledger.decode_fringe(phase_shift_images, ref_phase=None, k=1.0, mask=None, min_modulation=None, method='general') -> 'np.ndarray' (実装を直接呼ぶなら import fringe; fringe.decode_fringe(phase_shift_images, ref_phase=None, k=1.0, mask=None, min_modulation=None, method='general') -> 'np.ndarray'、台帳から引くなら ops3d.get("decode_fringe"))
• GPU: なし(CPU 参照実装のみ)
位相シフト画像列を一括復号: wrapped → unwrap →(参照減算で)高さ。
phase_shift_images: N-step 位相シフト縞画像列((N,H,W) または長さ N のシーケンス)。
ref_phase: 参照平面(高さ 0)のアンラップ済み位相。None なら高さ = k·(unwrapped)。
k: 位相→高さ較正定数。
mask: 省略可。True=有効画素。無効画素は NaN。
min_modulation: 省略可。指定すると modulation < この値の画素を低信頼として無効化。
返り値: 高さマップ(2D float)。ref_phase=None のときは k を掛けた連続位相を返す。無効画素は NaN。
手順(実装どおり): wrapped_phase → 信頼マスクを組む(min_modulation があれば modulation(stack) >= min_modulation、mask があればそれと AND)→ ref_phase が None なら k * unwrap_phase_2d(wrapped, mask=信頼マスク)、あれば k * unwrap_phase_2d(wrap(wrapped − ref_phase), mask=信頼マスク) (大域の 2πm は中央値を [−π, π] に入れる分岐)。
引数:
• phase_shift_images: (N, H, W)、N >= 3、等間隔位相シフト。
• ref_phase: スカラまたは (H, W)。参照面(高さ 0)の位相 —— 本 op で ref_phase=None, k=1 として復号した結果でも、解析的な位相でもよい。
★差を先に取ってから展開する: Δ = wrap(wrapped − ref_phase) を 1 回だけ
unwrap_phase_2d し、ref_phase の 2πm のずれは wrap で消える。
残る展開の大域の 2πm は「有効画素の中央値が [−π, π] に入る」分岐に
揃える(視野の過半が参照面から位相で π 未満の高さにある、という前提)。
2026-11-05 まで計測面と参照面を別々に展開して引いていて、展開の起点の分岐が
両者で違うと高さが k·2πm ずれた(60 条件中 24)。
• k: 位相→高さの較正定数(単位/rad)。synthesize_fringes の phase_gain の逆数に対応。
• mask: (H, W) の bool、True = 有効。min_modulation: 変調度の下限([0, 1] 程度。影・飽和の画素を落とす)。
検証(ValueError): 画像列が 3-D でない・N < 3・非有限 / mask の形が違う / ref_phase の形が違う / 有効画素がゼロ。scikit-image が無ければ RuntimeError。
返り値: (H, W) float64。無効画素は NaN。単位は k の単位。
注意: 空間アンラップに依存するので、段差・オクルージョンで島に分かれた場面では島ごとに 2πm k の高さオフセットが残りうる。絶対高さが要る場面は graycode_decode → absolute_phase → triangulate_column の経路。
• depth_sensors — 深度センサの知識 — 測距原理・実機の値・欠測の出方
• サンプルデータ カタログ(DL URL / ライセンス) — 2-D は skimage.data(BSD/public)+ 合成、3-D は実データ源(Stanford/PDS 等)の DL URL。
• 演算子の来歴・参考文献 — この op 族の元になった研究/手法の出典。
• structured_light — py -3.11 examples_3d/structured_light.py
depth を入力に取れる)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 · fringe_ftp_phase · depth_from_focus · synthesize_fringes · absolute_phase · triangulate_column
*Provenance: fringe.py — 3D operator registry. この per-op ノートは tools/opdocs.py md が自動生成(手編集しない)。*
© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.