unwrap_phase_2d — 3D 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.