bundle_adjust — 3D bundle_adjust op

• 데이터 종류: pose × points → table

• 호출: import fullseye as fs; fs.ledger.bundle_adjust(cameras, points, obs_cam, obs_pt, obs_uv, K, fix_first=True, max_iter=200)(구현을 직접 호출하려면 import bundle3d; bundle3d.bundle_adjust(cameras, points, obs_cam, obs_pt, obs_uv, K, fix_first=True, max_iter=200), 원장에서 가져오려면 ops3d.get("bundle_adjust"))

사용법

재투영 오차 최소로 카메라 자세와 3D 점을 동시에 최적화. → dict{cameras, points, rmse, cost}.

cameras (nc,6)=[rvec(3)|t(3)] 의 초기값, points (m,3) 의 초기값, 관측 obs_cam/obs_pt/obs_uv. fix_first=True 로 첫 카메라를 [I|0] 상당(초기값 그대로)으로 고정하여 gauge 를 제거한다.

scale gauge: 재투영 오차는 "카메라 0 의 중심을 기준으로 장면 전체를 닮음 확대"해도엄밀히 변하지 않으므로, 그것만으로는 해의 scale 이 정해지지 않아 LM 이 임의의 배율로 미끄러진다(실측 ×0.7〜×213, rmse≈0 인 채로). 본 함수는 구조의 카메라 0 중심으로부터의 RMS 거리(scale_anchor)를 초기값으로 유지하는 잔차 w·(rms/rms0 − 1) 를 1 개 추가하여 고정한다. 재투영 비용은 scale 방향으로 기울기가 0 이므로, 이 잔차는 최적해에서 엄밀히 0 이 되고, 반환되는 scale 은 초기 구조의 것과 일치한다(기선 길이 ‖t₁‖ 로 고정하는 것보다, 점 수로평균되는 만큼 초기 섭동의 영향이 작다). 초기 구조가 퇴화(모든 점이 카메라 0 중심과일치)해 있으면 구속을 걸지 않는다. 반환 dict 의 scale_anchor 에 채택한 RMS 거리를 싣는다.

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

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

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

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

• bundle_adjust — py -3.11 examples_3d/bundle_adjust.py

타입이 이어지는 다음 연산자(table 를 입력으로 받는 것)

fuse_to_voxel · mesh_select_lod

같은 카테고리(bundle_adjust)

mean_reprojection_error · project


*Provenance: bundle3d.py — 3D 연산자 레지스트리. 이 op 노트는 tools/opdocs.py md 가 자동 생성합니다(직접 편집하지 마세요).*

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