triangulate_column — 3D structured_light op

• 데이터 종류: image2d → depth

• 호출: 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: 형상·행렬 불량, 기선 0, 특이한 카메라 행렬에서 ValueError.

출처(공개 문헌): 광선과 평면의 교점에 의한 구조광 삼각측량 — Hartley & Zisserman, *Multiple View Geometry* 2nd ed. §12(사영 기하의 교차)/ Salvi et al., *Pattern Recognition* 43 2010(구조광 패턴의 분류와 복호).

배경 지식 가이드(이 연산자 앞에 있는 물리·규약)

• depth_sensors — 깊이 센서 지식 — 측거 원리·실기 수치·결측이 나타나는 방식

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

• 샘플 데이터 카탈로그(DL URL / 라이선스) —— 2-D 는 skimage.data(BSD/public)+ 합성, 3-D 는 실데이터 소스(Stanford/PDS 등)의 DL URL.

• 연산자의 내력·참고문헌 —— 이 연산자 족의 바탕이 된 연구/기법의 출처.

실행 가능한 예제(이 연산자를 실제로 호출하는 검증된 샘플)

• structured_light_scan — py -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 연산자 레지스트리. 이 op 노트는 tools/opdocs.py md 가 자동 생성합니다(직접 편집하지 마세요).*

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