triangulate_column — 3D structured_light op

資料種類:image2ddepth

呼叫: import fullseye as fs; fs.ledger.triangulate_column(column, k_cam, k_proj, rot, trans) -> 'np.ndarray'(要直接呼叫實作,import fringe; fringe.triangulate_column(column, k_cam, k_proj, rot, trans) -> 'np.ndarray';從台帳取用則 ops3d.get("triangulate_column"))

用法

由每個相機像素的「投影機行號」三角測量出深度 Z(結構光的最後一段)。

> 以下的詳細說明為原文 —— 摘要與標題已翻譯。

構造化光スキャナの幾何そのもの: カメラ画素 (u,v) は 1 本の視線を張り、投影機のコラム

番号 u_p は 1 枚の平面(投影機中心とそのコラムを含む平面)を張る。視線と平面の交点が

表面の 3D 点で、そのカメラ系 Z が深度になる。閉じた式なので反復も最適化も要らない。

column: (H, W) の投影機コラム番号(サブピクセル実数)。位相から出した値をそのまま

渡せる。NaN = 未確定画素(出力も NaN)。

k_cam: カメラ内部行列 3x3(fx, fy, cx, cy[, skew])。画素中心は整数座標

(render3d.render_mesh / camera.depth_to_points と同じ約束)。

k_proj: 投影機内部行列 3x3。使うのは第 0 行(コラム方向)と第 2 行だけ。

rot: 3x3 回転。カメラ系 → 投影機系(X_proj = rot·X_cam + trans)。

trans: 長さ 3 の並進(同上、単位はシーンと同じ)。ゼロベクトルは禁止

(基線 0 = カメラと投影機が同一点。平面と視線が交わらず深度が定義できない)。

返り値: (H, W) float64 の深度マップ(カメラ前方の Z、render_mesh の depth と同じ量)。

交点が後方(Z<=0)や視線が平面と平行な画素は NaN。

導出: X_cam = Z·d(d = K_cam⁻¹[u,v,1])。投影機側のコラム条件は

(K_proj[0] − u_p·K_proj[2])·X_proj = 0。X_proj = rot·X_cam + trans を代入して

Z について解くと Z = −(a·trans) / (a·(rot·d))、a = K_proj[0] − u_p·K_proj[2]。

Raises: 形状・行列不正、基線ゼロ、特異なカメラ行列で ValueError。

来歴(公開文献): 光線と平面の交点による構造化光三角測量 — Hartley & Zisserman,

*Multiple View Geometry* 2nd ed. §12(射影幾何の交わり)/ Salvi et al.,

*Pattern Recognition* 43 2010(構造化光パターンの分類と復号)。

背景知識指南(該運算子背後的物理與規範)

depth_sensors — 深度センサの知識 — 測距原理・実機の値・欠測の出方

參考(範例資料・文獻)

• 範例資料目錄(下載 URL / 授權) —— 2-D 用 skimage.data(BSD/公有領域)加合成圖,3-D 給出真實資料源(Stanford/PDS 等)的下載 URL。

• 運算子來歷與參考文獻 —— 該運算子族所依據的研究/方法出處。

可執行的範例(實際呼叫該運算子並已驗證的樣例)

structured_light_scanpy -3.11 examples_3d/structured_light_scan.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 · decode_fringe · synthesize_fringes · absolute_phase


*Provenance: fringe.py — 3D 運算子登記表。本條目由 tools/opdocs.py md 自動產生(請勿手動編輯)。*

© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.