1. 程式人生 > >sba(sparse bundle adjustment):一個基於Levenberg-Marquardt(LM)演算法的通用稀疏光束法平差C/C++軟體包

sba(sparse bundle adjustment):一個基於Levenberg-Marquardt(LM)演算法的通用稀疏光束法平差C/C++軟體包

如果你來到這個頁面來尋找一個通用的Levenberg-Marquardt演算法的C/C++實現,請看levmar

引言:

本頁面是關於sba,一個通用的稀疏光束法平差的C/C++軟體包。它基於GNU通用公共許可證GPL分發的。光束法平差(BA是作為每個基於特徵的多視重建視覺演算法的最後一步,用來獲得最佳的三維結構和運動(如相機矩陣)引數估計。提供初始估計,BA同時精化運動和結構引數,通過最小化觀測和預測的影象點之間的投影誤差。最小化一般通過Levenberg-Marquardt (LM)演算法來輔助完成。然而,由於許多未知的因素作用於最小投影誤差,一個通用的LM演算法的實現(如MINPACK的 lmder

)當應用於BA背景下的定義的最小化問題時,會帶來極高的計算代價。

       幸運的是,在基本的法方程中不同的三維點和相機引數相互之間影響較小,呈現一種稀疏的塊結構(如)。Sba利用這種稀疏的特性,使用LM演算法的簡化的稀疏變數來降低計算的複雜度。Sba是通用的,因為它保證了使用者對於相機和三維結構的描述引數的定義的完全控制。因此,它事實上可以支援任何多視重建問題的顯示和引數化。比如任意投影相機,部分的或完全標定的相機,由固定的三維點進行外方位元素(即姿態)的估計,精化本徵引數,等等。使用者要想在這類問題中使用sba,只需要提供合適的程式對這些問題和引數來計算估計的影象投影和他們的函式行列式(Jacobian

)。用來計算解析的函式行列式可以是手頭的程式碼,或者使用支援符號微分的工具(如maple)生成的程式碼,或者通過自動微分技術獲得的程式碼。也可以使用近似的函式行列式,輔之以有限差分的方法。另外,sba包含了檢查使用者提供的函式行列式的一致性的程式。就我們的知識之所及,sba是第一個並且也是當前獨一無二的的軟體包,因為他能夠不受版權限制以原始碼形式放置在任何工程中。

作為sba的效率的一個指標,我們在這裡說明,sba的單次測試已經涉及54臺相機和5207三維點,產生了24609個影象投影。相應的最小化問題依賴於15999個變數,sba使用非最優的BLAS在 Intel [email protected]

GHz running Linux機器上大約7秒鐘內解決。如果沒有BA的稀疏實現,那麼這種規模的問題會變得非常棘手。