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 不變)。本函式加入 1 個使結構到相機 0 中心的 RMS 距離(scale_anchor)保持初始值的殘差 w·(rms/rms0 − 1) 來固定它。重投影代價在 scale 方向上梯度為零,因此該殘差在最佳解處嚴格為 0, 回傳的 scale 與初始結構的一致(與用基線長度 ‖t₁‖ 固定相比,由於依點數取平均,初始擾動的影響更小)。若初始結構退化(所有點都與相機 0 的中心重合),則不施加約束。所採用的 RMS 距離記錄在回傳 dict 的 scale_anchor 中。

參考(範例資料、文獻)

• 範例資料目錄(下載 URL / 授權) —— 2-D 用 skimage.data(BSD/公有領域)加合成圖,3-D 給出真實資料源(Stanford/PDS 等)的下載 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 運算子登記表。本條目由 tools/opdocs.py md 自動產生(請勿手動編輯)。*

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