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.加入的更多相机图片依此类推,即可恢复一个相对稠密的三维点云了。

猜你喜欢

转载自blog.csdn.net/qq_39707351/article/details/80550863