bundle_adjust — 3D bundle_adjust op

• Data kinds: pose × points → table

• Call: import fullseye as fs; fs.ledger.bundle_adjust(cameras, points, obs_cam, obs_pt, obs_uv, K, fix_first=True, max_iter=200) (to call the implementation directly, import bundle3d; bundle3d.bundle_adjust(cameras, points, obs_cam, obs_pt, obs_uv, K, fix_first=True, max_iter=200); from the registry, ops3d.get("bundle_adjust"))

Usage

Optimise camera poses and 3-D points jointly by minimising the reprojection error. → dict{cameras, points, rmse, cost}.

cameras (nc,6)=[rvec(3)|t(3)] initial values, points (m,3) initial values, observations obs_cam/obs_pt/obs_uv. fix_first=True fixes the first camera at the equivalent of [I|0] (its initial value) to remove the gauge.

scale gauge: the reprojection error is exactly unchanged by "a similarity scaling of the whole scene about the centre of camera 0", so on its own the solution scale is undetermined and LM slides to an arbitrary factor (measured ×0.7 to ×213, with rmse≈0 throughout). This function fixes it by adding 1 residual, a residual that keeps the RMS distance of the structure from the centre of camera 0 (scale_anchor) at its initial value, w·(rms/rms0 − 1). The reprojection cost has zero gradient in the scale direction, so this residual is exactly 0 at the optimum, and the returned scale matches that of the initial structure (compared with fixing it by the baseline length ‖t₁‖, the effect of the initial perturbation is smaller because it is averaged over the points). If the initial structure is degenerate (all points coincide with the centre of camera 0), no constraint is applied. The RMS distance used is reported as scale_anchor in the returned dict.

References (sample data, literature)

• Sample-data catalog (download URLs / licences) — 2-D uses skimage.data (BSD/public domain) plus synthetic images; 3-D lists download URLs for real data sources (Stanford, PDS, …).

• Operator provenance and references — the sources of the research/methods this op family came from.

Runnable examples (verified samples that actually call this op)

• bundle_adjust — py -3.11 examples_3d/bundle_adjust.py

Ops the type connects to (they accept table as input)

fuse_to_voxel · mesh_select_lod

Same category (bundle_adjust)

mean_reprojection_error · project


*Provenance: bundle3d.py — 3D operator registry. This per-op note is generated by tools/opdocs.py md (do not hand-edit).*

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