structured_light op• 資料種類:image2d → image2d
• 呼叫: import fullseye as fs; fs.ledger.unwrap_phase_2d(wrapped, mask=None) -> 'np.ndarray'(要直接呼叫實作,import fringe; fringe.unwrap_phase_2d(wrapped, mask=None) -> 'np.ndarray';從台帳取用則 ops3d.get("unwrap_phase_2d"))
用 skimage.restoration.unwrap_phase 把捲繞相位展開為連續相位。
wrapped:wrapped_phase 的輸出(2D)。可以含 NaN(作為無效像素處理)。
mask: 可省略。True = 有效像素(與 numpy masked array 的慣例相反的直觀方向)。
NaN 像素和 mask=False 像素視為無效,從相位展開中排除,輸出中回傳 NaN。
回傳值:連續相位(2D float)。無效像素為 NaN。全域偏移(+2πm)的不確定性仍然存在。
步驟:若沒有無效像素(wrapped 的非有限值 ∪ mask == False),則直接呼叫 skimage.restoration.unwrap_phase(arr)。若有,則把無效像素以 0 填充後作為 numpy.ma 的 masked array 傳入(skimage 會把 masked 像素從展開中排除),再把輸出的無效像素恢復為 NaN。
驗證:在無法 import scikit-image 的環境中拋出 RuntimeError(而不是 ImportError)。wrapped 不是 2-D、mask 形狀不同、全部像素無效 (沒有可展開的像素)時拋出 ValueError。
前提(Itoh 條件):相鄰有效像素的真實相位差小於 π。在陡峭階躍、深孔、遮擋邊界處會誤判 2π 跳變,其後的整個區域偏移 2πm。被遮罩分成孤島的區域之間的相對級次無法確定(每個孤島有獨立的偏移)。需要絕對性時,請使用 graycode_decode → absolute_phase 的逐像素獨立級次確定。
用法:wrapped_phase → 本 op → phase_to_height(同模組的函式,height = k (phase - ref_phase))。以相同步驟展開參考面並相減, 全域偏移即被抵消。decode_fringe 以 1 次呼叫完成這一鏈條。
• depth_sensors — 深度感測器知識 —— 測距原理、實機數值、缺測的表現
• 範例資料目錄(下載 URL / 授權) —— 2-D 用 skimage.data(BSD/公有領域)加合成圖,3-D 給出真實資料源(Stanford/PDS 等)的下載 URL。
• 運算子來歷與參考文獻 —— 該運算子族所依據的研究/方法出處。
• structured_light — py -3.11 examples_3d/structured_light.py
image2d 作為輸入)fuse_to_voxel · fit_poly_surface · eval_poly_surface · surface_form_error · background_flatten · polar_unwrap · fit_zernike · matcap_shade
structured_light)wrapped_phase · graycode_decode · decode_fringe · synthesize_fringes · absolute_phase · triangulate_column
*Provenance: fringe.py — 3D 運算子登記表。本條目由 tools/opdocs.py md 自動產生(請勿手動編輯)。*
© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.