注:該文章首發3D視覺工坊,鏈接如下3D視覺工坊
前言
商用:
(1)Photoscan(現在稱為Agisoft Metashape)的首個版本于2010年發布。
(2) ContextCapture 是由Bentley Systems開發的軟件,首個版本發布于2015年。
(3) Inpho 是由Trimble開發的軟件,發布時間比較早,但具體時間可能因版本而異。Trimble公司在2008年收購了Inpho公司,因此在此之前的版本應該是由Inpho公司發布的。
(4)Pix4D是一家提供專業無人機圖像處理軟件的公司,其軟件可用于生成高質量的地圖和模型。Pix4D軟件的首個版本于2011年發布。
開源:
(1)openmvg 是2012年發布,應該是最早的且最具有代表性的三維重建框架。
(2)colmap是2016年發布的,一問世便處于巔峰位置,目前來看,仍然是處于incremental sfm 的榜首。
(3)除了openmvg和colmap ,還有ODM、opensfm、theiasfm、alicevision等這些都差不多在colmap 問世的前后時間。
colmap 目前的現狀
(1)韓國maxst
(2)Blue Vision Labs–(Lyft收購)
(3)香港neogoma
存在的問題與未來
對于調參人員來說:
(1)為什么colmap如此慢?
如果你的數據是車載數據即forward motion,那么其實local ba 足夠,不需要太頻繁的global ba(眾所周知ba的復雜度是(camera_params+6N+3n)^3,因為每次新加入的圖像主要和其周圍的地圖有關系。所以調整mapper以下參數即可:
i.減少ba_global_max_refinements次數 (5改為1)
ii.增大模型增大到一定比例觸發global ba的參數
Mapper.ba_global_images_ratio 、 Mapper.ba_global_points_ratio 、Mapper.ba_global_images_freq
(2)為什么車載數據就跑了兩幀程序就終止?
如果你的數據質量不佳或者是車載數據,車載數據是比較困難處理的,因為baseline短且圖像兩邊的特征消失的很快,這個時候采用默認參數去跑,通常會出現初始化完后就終止了程序,這個時候就要調小初始最小三角化角度Mapper.init_min_tri_angle
(默認16調成5)。
對于研究源碼的人員來說,colmap的improved方面數不勝數,離一個可用的狀態需要做很多的工作:
(1)關于相機模型的選擇,在處理數據的時候,如果相機模型選擇簡單的,會造成欠擬合,出現blend map之類的現象,如果選擇復雜的相機模型就會出現不收斂的情況。
(2)關于匹配方面,colmap中匹配有詞匯樹匹配方法,但是deep learning的方法已經完全超越BOW,如可以用netvlad、cosplace近幾年的方法來替換傳統的檢索方式。
(3)關于view graph,特征檢測和匹配完后,會生成view graph,這時候并不是一股腦就去sfm,view graph 的優化既可以減少冗余,也可以改善整個網形,提升sfm的魯棒性。
(4)關于dirft問題,控制點(GCP)/gps約束都可以很好的改善,這個問題已經在三年前colmap課程中講過,當然在加入外部約束的時候,less is more的約束同時也會增添不少風采,如sift的feature scale 定權可以很明顯的降低誤差,如圖6:
(5)關于colmap 慢的問題,這便是pipeline的問題,采用分組sfm便可解決,整個過程是:view graph 聚類分組–>每個組內 local sfm --> local sfm merge 。做好分組sfm的基本是local sfm 足夠的魯棒。
(6)關于colmap 魯棒性方面,對于forword motion數據,p3p/pnp的效果并不一定好,這個時候采用hybird方式不免是一種明智的做法,流程是:先rotation averaging 然后采用p2p解算pose,具體參見HSfM: Hybrid Structure-from-Motion(崔海楠)的工作。初次之外,也可以在rotation averaging后,利用得到全局rotation 和pnp解算的r進行約束,也就是除了重投影誤差,還有圖像對之間Rotation的懲罰項。
(7)關于colmap sfm的評判機制/標準,目前所有的論文最終評判sfm的metric都是:track length、重投影誤差、3D點個數、每張影響的2D點個數,但是重投影誤差是無意義的,即使重投影誤差很小,sfm也會出現dirft,因為3D點是源于pose和匹配點,Pose dirft會造成3D點不是"真",那么投影回來誤差自然也不會大,所以選擇一個合理的metric是值得思考的。