光束法平差
光束法平差(bundle adjustment)是讓運動回復結構與視覺 SLAM 變準確的最後一步——一次性的全面打磨。當你對每台相機的位姿與每個三維點都有了粗略估計後,光束法平差同時微調它們全部,使重建達到最大的自洽。這個名字來自匯聚於每個相機中心的光束(bundles of rays):你是在一起調整所有這些光束,使它們最符合相機實際拍到的影像。
它最小化的量是總重投影誤差。對每一個觀測——每一次某個特定三維點在某張特定影像中被看到——你拿現在的三維點、經由現在的相機模型投影,並量測該預測與實際偵測到的特徵之間的像素距離。光束法平差一次找出讓所有這些平方像素誤差之和最小的相機參數與點座標。這是單一一個非常龐大的非線性最小平方問題;變數是所有相機位姿(可選地含內參)加上所有三維點,數量常達數百萬。
天真地求解會是絕望的,但這問題有一個救命的結構:每個三維點通常只被少數幾台相機看到,因此這個巨大的方程組極度稀疏。標準求解器 Levenberg-Marquardt 用 Schur 補(Schur complement)技巧利用這點:它在一個區塊步驟中消去眾多的點變數,留下一個僅含相機變數、小得多的稠密系統來解,再回代求出點。Ceres Solver、g2o 與 GTSAM 等函式庫高效實作了這點,而正是這個結構讓光束法平差能擴展到城市規模的重建。
有兩點要當心。第一,它是局部最佳化器:它精煉一個良好的初始猜測,卻可能被壞的初始值困住,這正是增量式 SfM 把它與謹慎初始化交錯進行的原因。第二,平方誤差目標對離群值敏感——少數錯誤的特徵匹配就能把整個解拖偏——所以實務上的光束法平差會使用穩健損失函數(Huber、Cauchy)來限制大殘差的影響。做對了,光束法平差就是把一個會漂移、僅局部自洽的猜測,轉變成全域準確模型的關鍵。
光束法平差最佳化的是幾何,而非規範自由度:解只被定義到一個全域相似變換(單眼情形還含尺度)。求解器藉由固定一台相機或鎖定尺度來處理這點,否則最佳化器會沿著未受約束的方向漂移,使共變異數變得奇異。