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) (implementation को सीधे call करना हो तो import bundle3d; bundle3d.bundle_adjust(cameras, points, obs_cam, obs_pt, obs_uv, K, fix_first=True, max_iter=200), registry से लेना हो तो ops3d.get("bundle_adjust"))
reprojection error को न्यूनतम करके camera poses और 3D points को एक साथ optimise करता है। → dict{cameras, points, rmse, cost}।
cameras (nc,6)=[rvec(3)|t(3)] के प्रारंभिक मान, points (m,3) के प्रारंभिक मान, observation obs_cam/obs_pt/obs_uv। fix_first=True पर पहला camera [I|0] के समकक्ष (प्रारंभिक मान जैसा ही) स्थिर रखा जाता है और gauge हटाया जाता है।
scale gauge: reprojection error "camera 0 के केंद्र को आधार मानकर पूरे scene को similarity scaling" करने पर भी बिल्कुल नहीं बदलता, इसलिए अकेले इससे solution का scale तय नहीं होता और LM किसी भी गुणक पर फिसल जाता है (measured ×0.7 से ×213, rmse≈0 रहते हुए)। यह function structure की camera 0 केंद्र से RMS दूरी (scale_anchor) को प्रारंभिक मान पर रखने वाला residual w·(rms/rms0 − 1) 1 जोड़कर इसे स्थिर करता है। reprojection cost का scale दिशा में gradient शून्य है, इसलिए यह residual optimum पर ठीक 0 होता है, और लौटाया गया scale प्रारंभिक structure के scale से मेल खाता है (baseline लंबाई ‖t₁‖ से स्थिर करने की तुलना में, points की संख्या पर औसत होने के कारण प्रारंभिक perturbation का असर कम होता है)। अगर प्रारंभिक structure degenerate है (सारे point camera 0 के केंद्र से मेल खाते हैं) तो कोई constraint नहीं लगाया जाता। अपनाई गई RMS दूरी लौटाए गए dict के scale_anchor में रखी जाती है।
• Sample data catalog (DL URL / license) — 2-D के लिए skimage.data (BSD/public) + synthetic, 3-D के लिए real data sources (Stanford/PDS आदि) के DL URL।
• Operators का स्रोत और संदर्भ — इस op family के मूल research/methods के स्रोत।
• bundle_adjust — py -3.11 examples_3d/bundle_adjust.py
table को input के रूप में लेते हैं)fuse_to_voxel · mesh_select_lod
bundle_adjust)mean_reprojection_error · project
*Provenance: bundle3d.py — 3D operator registry. यह per-op note tools/opdocs.py md से अपने-आप generate होता है (हाथ से edit न करें)।*
© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.