圖片捕獲過程,請遵循以下指導方針以獲得最佳重建結果:
1 捕捉具有良好紋理的圖像。避免使用完全沒有質感的圖片(例如,白色的墻或空桌子)。如果場景本身沒有足夠的紋理,你可以放置額外的背景對象,如海報等。
2 在相似的照明條件下捕獲圖像。避免高動態范圍的場景(例如,背對太陽有陰影的照片或透過門/窗拍攝的照片)。避免在有光澤的表面上拍攝。
3 捕捉高視覺重疊的圖像。確保每個物體至少在3張圖片中看到,重疊圖片越多越好。
4 圍繞同一個物體進行不同的角度捕捉圖像,不要只旋轉相機從同一位置拍攝圖像。同時,盡量從一個相對相似的角度拍攝足夠多的圖片。注意,更多的圖像不一定更好,可能會導致緩慢的重建過程。如果你使用視頻作為輸入,考慮下采樣幀率。
概述
基于圖像的三維重建傳統上首先使用運動結構(Structure-from-Motion)恢復場景的稀疏表示和輸入圖像的姿態。這個輸出然后作為多視圖立體幾何(Multi-View Stereo)的輸入,以恢復場景的密集表示。
SFM是通過一系列有重疊的且不同視角的圖片重建出物體的三維結構(稀疏點云),并且輸出相機的內外參數,內參指的是將真實空間的三維點通過內參矩陣轉換為相機圖片上的二維點,外參包含相機在切換不同視角時的平移和旋轉信息。
通常情況下,運動結構系統將這一過程分為三個階段:
1 特征檢測與提取
2 特征匹配和幾何驗證
3 結構與運動重建
多視圖立體幾何(MVS)采用SfM的輸出來計算圖像中每個像素的深度和法向信息。在3D點云中融合多幅圖像的深度圖和法向圖,然后生成場景的密集點云。利用融合點云的深度和法向信息,泊松曲面(Poisson),三角剖分(delaunay)重建等算法可以恢復場景的三維曲面幾何。
實施:
COLMAP創建一個新項目必須包含存儲數據庫的位置以及包含輸入圖像的文件夾。可以將整個項目設置保存到配置文件中,項目配置文件中保存存儲數據庫和圖像文件夾的絕對路徑信息。整個項目的目錄結構如下:
第一步:特征檢測/提取
特征檢測/提取在圖像中找到稀疏的特征點,并使用數值描述符(128維向量)描述特征點。主要使用SIFT特征提取方法。
jpge圖像的頭部保存了EXIF信息 里面包括拍攝時的光圈、快門、白平衡、ISO、焦距、日期時間等各種和拍攝條件以及相機品牌、型號、色彩編碼、拍攝時錄制的聲音以及GPS全球定位系統數據、縮略圖等,COLMAP可以從嵌入式EXIF信息中自動提取焦距信息。
提取到的特征信息如下:
NUM_FEATURES代表一張圖像提取到多少個特征點,x,y代表特征點的坐標, scale代表尺度(即相機距離物體遠近的比例),ORIENTATION代表特征點的梯度方向,?D_1…D_128代表特征描述符的128維向量,所有提取的數據都將存儲在數據庫文件中。
其中X, Y, SCALE, ORIENTATION為浮點數,D_1…D_128為0…255范圍內的值。
例如,一張圖片有4個特征:
第二步:特征匹配和幾何驗證。
特征匹配首先匹配圖像對,下面列出圖像匹配的幾種策略。其次再將匹配后的圖像上的特征點進行匹配,利用特征點的128維描述符向量的相似性度量進行特征點匹配。
圖像對匹配算法:
窮盡匹配(Exhaustive Matching):如果數據集中的圖像數量相對較低(最多數百個),那么這種匹配模式應該足夠快,并能獲得最佳的重構結果。在這里,每個圖像都與其他圖像進行匹配,而塊大小決定同時從磁盤加載到內存中的圖像數量。
序列匹配(Sequential Matching):由一個攝像機。在這種情況下,連續的幀具有視覺重疊,不需要用盡全力地匹配所有的圖像對。而是將連續捕獲的圖像相互匹配。
空間匹配(Spatial Matching):這種匹配模式將每個圖像與它的空間近鄰進行匹配。COLMAP還會從EXIF中提取GPS信息,并使用它進行空間最近鄰居搜索。
傳遞性匹配(Transitive Matching):這種匹配模式利用已有特征匹配的傳遞關系,生成更完整的匹配圖。如果一個圖像A匹配到一個圖像B,而B匹配到C,那么這個匹配器會嘗試直接將A匹配到C。
建立圖像對之后,在參考圖像中的一個特征點,如何從目標圖像中的所有特征點中找出與之相對應的特征點。如果使用暴力計算法,計算每一對特征點的相似距離,如果特征的描述符向量的維度和特征點的數量較多的話,暴力法是不可取的。需要使用KD樹算法建立一個搜索樹,基于KD樹最鄰近查找算法,方便特征點進行快速匹配。
由于sift提取的特征點和描述子在匹配過程中可能會存在誤匹配的情況,所以需要將錯誤的匹配點對剔除。幾何校驗是篩除一些誤匹配的特征點。幾何校驗是指利用對極幾何進行約束。
對極幾何:空間中的一點與兩張圖片相機的光心,三者圍成一個極平面,極平面與兩張圖片相交形成兩條極線,對極幾何約束是指,空間點X在攝像機1的成像平面中的像素點x,與之相匹配的攝像機2的成像平面中的像素點 x' 一定落在極線上。
公式約束為:?x'的轉置 × F × x =0 ;F為基礎矩陣,F可以通過8對匹配的特征點聯立方程組求得 分解F矩陣可以求得相機的內參矩陣。?
幾何約束方法:隨機選取圖像對的8對匹配點,使用歸一化八點算法求解基礎矩陣F,然后統計滿足對極幾何關系的點對數量,在設定的次數內重復上述步驟,選取滿足條件的點對數量最多的匹配為精化匹配結果。
第三步:稀疏重構
首先初始化主要是指選取兩張匹配的圖像,設定其中一張圖像的位姿為單位陣,然后通過它們之間的匹配點對估計出E矩陣,將E矩陣分解獲得另一張圖像的位姿。在估計出兩張圖像的位姿后,就可以通過三角化(triangulation)來生成三維點。
然后進行增量式重建:
1 獲取下一最佳匹配圖像(匹配點對數量最多)
2 利用匹配的特征點估計出E矩陣(本質矩陣),估計圖像位姿
3 進行三角化生成三維空間點,三角化是利用兩個匹配的圖像坐標和圖像位姿以及相機的內參矩陣,求得匹配點的三維點坐標。
4 對所有已生成的三維點和已估計出的位姿,使用ceres庫進行ba(bundle adjustment)優化。通過最小化重投影誤差實現剔除誤差過大的點
5 最后對所有數據進行ba優化 即全局優化
第四步:稠密重建
在重建場景的稀疏表示和輸入圖像的相機姿勢后,MVS現在可以恢復更密集的場景幾何。COLMAP有一個集成的密集重建管道,可以為所有的配準圖像生成深度和法向圖,將深度和法向圖融合到一個將稀疏點云融合成密集點云,最后使用泊松(Poisson)或三角剖分(Delaunay)重建方法從融合的點云中估計出一個密集曲面。
稠密重建分為:
1 是還原圖像,去除圖像的畸變
2 是計算深度圖和法向圖
3 將深度和法向圖融合成到點云里
4 點云網格劃分形成曲面
colmap命令行執行過程
初始數據為圖像文件和數據庫文件
圖像文件包含128張jpg圖像
1 特征提取 利用特征提取算法提取每一張圖片的特征點并獲得特征點的描述符
2 窮盡匹配 匹配每一張圖片與其他所有圖片的特征點,并進行幾何校驗。
3 稀疏重建
首先使用兩張圖片,將第一張圖片的位姿記為單位陣,通過匹配的特征點利用本質矩陣求得另一張圖像位姿,通過估計基礎矩陣得到相機的內參矩陣,利用兩個匹配的圖像坐標和圖像位姿以及相機的內參矩陣,進行三角化生成三維空間點。接著使用ba(bundle adjustment)優化生成的三維點,通過最小化重投影誤差實現剔除誤差過大的點。然后每增加一張圖片,重復進行估計圖像位姿、三角化、ba優化、全局ba優化等步驟。直至添加完所有圖片
稀疏重建效果
4 稠密重建
(1) 圖像去畸變,還原未失真的圖片
(2)計算深度和法向圖
立體匹配后生成的深度圖
立體匹配后生成的法向圖
(3)在稀疏點云中融合多幅圖像的深度圖和法向圖,然后生成場景的密集點云。
稠密點云效果如下:
(4)使用三角剖分算法進行曲面重建,重建效果如下:
參考網址:
https://www.ctyun.cn/developer/article/416012493463621