structured_light op• 데이터 종류: images → image2d
• 호출: import fullseye as fs; fs.ledger.wrapped_phase(images) -> 'np.ndarray'(구현을 직접 호출하려면 import fringe; fringe.wrapped_phase(images) -> 'np.ndarray', 원장에서 가져오려면 ops3d.get("wrapped_phase"))
N-step 위상 이동 프린지 이미지에서 wrapped phase (-π, π] 를 구합니다.
표준 N-step 공식 φ = atan2(Σ_n I_n sin(2πn/N), Σ_n I_n cos(2πn/N)). N >= 3의 등간격 위상 시프트를가정. 반환값은 각 화소의 랩 위상 (-π,π]의 2D 배열.
images: 길이 N의 시퀀스(각각 2D [0,1] 영상) 또는 (N, H, W) 배열.
계산: 위상 시프트량을 등간격 δ_n = 2πn/N(n = 0..N-1)로 하고, s = Σ_n I_n sin δ_n, c = Σ_n I_n cos δ_n를 tensordot으로 구해 np.arctan2(s, c). I_n = a + b cos(φ - δ_n) 모델(synthesize_fringes 와 같은 부호 규약)이면 φ가 부호 반전 없이 돌아온다. 평균 휘도 a는 사라지므로바이어스의 영향을 받지 않는다.
입력과 검증(ValueError): None / 3-D (N, H, W)로 변환할 수 없음 / N < 3 / NaN·Inf 포함. 값 범위 [0, 1]은 전제이며 검사하지 않는다(범위 밖이라도 계산은 통과한다).
반환값: (H, W) float64, 값 범위 (-π, π]. s = c = 0인 화소(줄무늬가 없음· 변조 0)는 arctan2(0, 0) = 0을 반환하며, 오류도 NaN도 되지 않는다 — 신뢰할 수 있는 화소를 고르려면 modulation(같은 모듈의 함수)으로 변조도를 본다(decode_fringe의 min_modulation이 그것을 한다).
주의: 위상 시프트량이 등간격이 아니거나 장수와 순서가 맞지 않는 영상열을 넘기면, 오류가 나지 않고 "그럴듯하게 틀린" 위상이 나온다. 다음 단계는 unwrap_phase_2d(공간 언랩) 또는 absolute_phase(거친 절대 위상으로 차수 확정).
• 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
• structured_light_scan — py -3.11 examples_3d/structured_light_scan.py
image2d 를 입력으로 받는 것)fuse_to_voxel · fit_poly_surface · eval_poly_surface · surface_form_error · background_flatten · polar_unwrap · fit_zernike · matcap_shade
structured_light)unwrap_phase_2d · 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.