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으로 되돌린다.

검증: scikit-image를 import할 수 없는 환경에서는 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 — 깊이 센서 지식 — 측거 원리·실기 수치·결측이 나타나는 방식

참고(샘플 데이터·문헌)

• 샘플 데이터 카탈로그(DL URL / 라이선스) —— 2-D 는 skimage.data(BSD/public)+ 합성, 3-D 는 실데이터 소스(Stanford/PDS 등)의 DL 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 연산자 레지스트리. 이 op 노트는 tools/opdocs.py md 가 자동 생성합니다(직접 편집하지 마세요).*

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