天天看點

bundle adjustment算法學習

BA簡介

BA疊代步長的數學推導

稀疏BA疊代步長的算法求解過程

1.BA簡介

   錄影機在靜态環境中移動,得到不同時刻拍攝的多幅圖像。假設這些圖像是同一剛性物體的投影,則可由圖像特征對應關系估計出錄影機的運動參數。在計算機視覺中 ,這一過程稱為運動分析或由運動重建物體結構(structure frommotion)。

   Bundle Adjustment即光束平差法,作為SFM這種多視重建視覺算法的最後一步,它利用LM算法使得觀測的圖像點坐标與預測的圖像點坐标之間的誤差最小。若給定圖像特征點的對應關系及初始三維點,BA可以同時精化這些特征點對應的3D坐标及相應的相機參數。

   Bundle Adjustment的名字由來于空間中每個物點和相機光學中心“發射”出的光束,人們可以根據這些光束對結構和視角參數進行調節,獲得空間結構及視角參數的最優解。

2.BA疊代步長的數學推導

   以下推導來自對希臘人論文的翻譯:”The Design andImplementation of a Generic Sparse Bundle Adjustment Software Package Based onthe Levenberg-Marquardt Algorithm”

   假設空間中有n個三維物點,現在圍繞這些物點拍攝了m張照片,則第j張圖檔上看到的第i個物點為xij。Bundle adjustment旨在優化初始多個相機與結構的參數估計,以便于找到合理的參數使得我們能夠精确計算出m張照片中n個物點的空間坐标。更具體的說,每個相機j用向量aj表示(内參和外參),每個三維物點i用向量bi表示。為了簡化問題,假設現在所有的圖檔中能看到所有物點(不看到也沒關系,後邊的矩陣相應位置為0呗)。BA的核心問題就是最小化下面的重投影誤差函數(非線性):

bundle adjustment算法學習

  函數Q(aj,bi)表示物點bi在相機aj下的投影坐标,也是我們的預測值。函數d(x,y)表示觀測的圖像坐标與預測的圖像坐标之間的歐氏距離。

  現在我們用向量P代表m個投影矩陣和n個三維物點所有參數:

bundle adjustment算法學習
bundle adjustment算法學習

    J是關于投影關系f的雅各比矩陣,是疊代步長,使得我們擷取合理的P讓殘差函數最小(阻尼因子的處理見後文)。上述方程同之前LM算法那篇文章裡的疊代公式幾乎一樣(因為此處的協方差矩陣是機關矩陣)。此外由于各個照片與三維物點之間的參數沒有交集,我們發現上述公式其實是非常稀疏的。簡便期間,我們舉個簡單的例子:

    假設現在有m=3張照片拍攝了n=4個物點,即觀測坐标X與參數幾何P分别為:

bundle adjustment算法學習

  由于各個照片與三維物點之間的參數沒有交集,比如對于不屬于目前相機的二維圖像坐标的偏導數為0,對于不屬于目前三維物點投影的二維圖像坐标的偏導數為0

bundle adjustment算法學習

  那麼對于投影函數關系X’=f(P),它的偏導數集合,也就是雅可比矩陣J可以寫成:

bundle adjustment算法學習

觀測矩陣X的協方差矩陣是對角塊結構的:

bundle adjustment算法學習

将協方差矩陣和雅可比矩陣代入LM的疊代方程,方程的左邊将是如下形式:

bundle adjustment算法學習

若定義:

bundle adjustment算法學習

  則LM疊代公式的左側可以寫成:

bundle adjustment算法學習

 LM疊代公式的右邊為:

bundle adjustment算法學習
bundle adjustment算法學習

    完整的LM疊代公式如下:

bundle adjustment算法學習

再次簡化,如果定義:

bundle adjustment算法學習

  那麼疊代方程可以進一步簡化成:

bundle adjustment算法學習
bundle adjustment算法學習

  将U*,W,V*代入(1),那麼(1)的左邊為:

bundle adjustment算法學習
bundle adjustment算法學習
bundle adjustment算法學習

    反過來倒過去的定義,隻是為了公式更清晰的展示,發現規律:我們發現對于任意數量的n物點和m照片均可以求解 LM的疊代步長。如果點k沒有在照片l中出現,那麼Akl=0并且Bkl=0.接下來我們介紹下基于LM的稀疏BA的疊代步長的算法流程。

3.稀疏BA疊代步長的算法求解過程

算法輸入:

m個初始相機參數aj,j=1,…,m;n個初始三維物點坐标bi,i=1,…,n,觀測的特征點坐标xij(第j張圖第i個點),LM算法的阻尼因子μ

算法輸出:

基于LM的稀疏BA的疊代步長的解

算法流程:

  計算偏導數矩陣,Q表示投影函數,i=1,…,n,j=1,…,m

bundle adjustment算法學習

 将Uj和Vi的主對角線元素上加上阻尼因子μ,我們得到Uj*和Vi

  計算Yij=WijVi*-1

  按照(1)(2)式計算LM疊代步長:

bundle adjustment算法學習

   現在有了疊代步長,我們把疊代步長的計算步驟嵌入标準的LM算法流程使得重投影殘差最小。至于阻尼因子是否要用信頼域的方法,随便吧,已經夠麻煩的了,反正代碼用現成的接口opencv和openmvg都有。

下面是我的想法:

 BA的目标是幫我們求得相機參數和三維坐标,每次LM疊代修改的都是參數集合P(由相機内外參數和三維點坐标組成),而觀測向量X每次都是恒定的。這裡初始參數P0作用和LM博文中函數拟合的初始參數一樣。

而初始參數P0是怎麼擷取的呢?

  當空間物體結構參數未知時,SFM問題可以分為兩類:單目視覺下的二維特征對應和多目視覺下的三維特征對應。

  采用二維特征對應關系估計相對運動需要給定先驗的空間尺度資訊, 這為單目視覺裡程計的實作帶來一定的不便(就是拿個相機對着某個物體不同角度拍N張照片,計算的3D點都是假的)。如果相機已經标定,可以利用各個照片上特征點的對應關系,并在極幾何性質幫助下,求出相機的外部參數R是真的,T隻是方向,反推的3D點也是up-to-scale的。咱就利用這些東西作為初始P0.

  三維特征對應關系下求解運動估計問題的一般方法為: 首先采用雙目或多目錄影機三維重建得到空間物體的三維資料; 然後由二維圖像特征對應關系建立空間物體的三維特征對應, 進而進行三維運動問題求解. 三維資料的資訊量遠高于二維圖像, 是以三維運動估計問題的求解大為簡化. 但是, 由于立體視覺中三維重建過程對像素誤差有放大作用, 三維運動估計的結果對圖像點誤差非常敏感, 需要采取一定的措施對三維重建結果進行優化以提高運動估計精度。我認為雙目測距由于baseline已知,咱可以根據disparity恢複出真正的3D坐标。然後各個相機之間的RT,同樣利用之前的極幾何性質,可以求出來。然後把相機參數和3D坐标作為初始值P0.

  另外,BA所使用的每張圖檔的二維特征點和圖檔像素比起來是稀疏的,是以最終還原的三維空間也是稀疏的,隻能看個大概。

繼續閱讀