mean_reprojection_error — 3D bundle_adjust op

• Data kinds: pose × points → measurement

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

Usage

The RMS reprojection error (in pixels).

For every observation k, takes the difference (du, dv) between project(points[obs_pt[k]], cameras[obs_cam[k]]) and obs_uv[k] and returns as a float sqrt(mean_k(du² + dv²)) = the square root of the mean of the 2nd powers of the per-observation reprojection distance (the implementation is the square root of the mean of r.reshape(-1,2)**2 * 2, the same quantity). The unit follows obs_uv and K, in pixels.

• cameras: (nc,6) [rvec(3) | t(3)] (X_cam = R X + t).

• points: (m,3) 3D points.

• obs_cam / obs_pt: camera index and point index of each observation (int). obs_uv: (K,2) observed pixels.

• K: (3,3) intrinsic matrix shared by all cameras.

Same computation as the rmse returned by bundle_adjust; use it to compare before and after optimisation. With 0 observations the mean of an empty array gives NaN (length validation lives in bundle_adjust; this function alone does not do it). Points behind the camera are also projected as-is by project, so the caller must guarantee visibility.

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 measurement as input)

vol_gaussian_psf · fuse_to_voxel · fresnel_reflectance · snell_angle

Same category (bundle_adjust)

bundle_adjust · 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.