1. 程式人生 > >VS2017+Opencv3.2.0SFM實現多目三維重建

VS2017+Opencv3.2.0SFM實現多目三維重建

實驗大致步驟:

開發環境:VS2017+opencv3.2.0+opencv_contrib(因為要用到sift運算元提取特徵點)

1.首先需要已知相機的內部引數矩陣內部引數矩陣f為相機焦距,Cx,Cy分別為相機光心位置;
2.以第一次相機的座標系為世界座標系,對第一次和第二次拍攝的圖片做特徵匹配,通過兩幅圖的特徵點可求得對應的本質矩陣E;
3.因為以第一個相機座標系為世界座標系,所以R1=I,T1=0,所以通過分解本質矩陣E可以求得R2,T2(即兩個相機座標系的位置變換關係);
4.通過前兩次中的匹配點和K(內參矩陣)R2T2,可通過OpenCV中的triangulatePoints()
函式來恢復部分點雲;
5.加入第三次相機…拍攝的圖片,可通過solvePnPRansac()函式(若空間點的位置和影象中的畫素位置已知,則可以得出相機在空間中的位置)來求解第三個相機相對於第一個相機(世界座標系)的位置關係。因為第三次和第二次拍攝的圖片做特徵匹配的特徵點中肯定也包含了一些在第一次和第二次圖片做特徵匹配中的點,而且這些點的空間位置之前已經得到,即可求得相機三相對於相機一(世界座標系)的變換矩陣;
6.得到相機三的變換矩陣後,則可以通過與第二次做特徵匹配的匹配點來求得更多的點雲(排除那些與相機一、二做特徵匹配得到相同的特徵點);
7.加入的更多相機圖片依此類推,即可恢復一個相對稠密的三維點雲了。