project — 3D bundle_adjust op

• Data kinds: points → keypoints

• Call: import fullseye as fs; fs.ledger.project(points, rvec, t, K) (to call the implementation directly, import bundle3d; bundle3d.project(points, rvec, t, K); from the registry, ops3d.get("project"))

Usage

Project 3-D points (n,3) to 2-D (n,2) with a camera (rvec, t, K) (perspective division).

Computes X_cam = R(rvec) @ X + t, x = K @ X_cam, uv = x[:2] / x[2] for all points at once (same convention as project_points). rvec is a rotation vector (axis × angle [rad], scipy's Rotation.from_rotvec), t is a (3,) translation and K a (3,3) intrinsic matrix. The return value is (n,2) float with column 0 = u (horizontal, column direction) and column 1 = v (vertical, row direction), in pixels following K.

Caution (no validation): points behind the camera or on the image plane (Z_cam <= 0) are not rejected and are divided as-is. Z_cam = 0 gives inf/NaN from division by 0, and a negative Z gives false coordinates that appear inside the image, so visibility must be judged by the caller. Shapes are not validated either (only converted to float with np.asarray). The reprojection residuals of bundle_adjust / mean_reprojection_error are produced by this function.

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

fuse_to_voxel · dlt_pose · pnp_ransac · reprojection_error

Same category (bundle_adjust)

bundle_adjust · mean_reprojection_error


*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.