Structure From Motion 笔记

期末的大作业使用OpenMVG库进行三维重建,笔记如下:

整体过程:
1. 对多张图片提取特征点(SIFT SURF)
2. 匹配特征点,使用RANSAC算法消除干扰
3. 对于可匹配特征点使用矩阵优化求解库(ceres-solver Osi-Clp SoPlex GLPK)求解摄像机矩阵和位置矩阵(Fundamental Matrix & Essential Matrix),推算出每个摄像机位置和特征点位置

4.应用MVS(Multiple View Stereo-vision)库建立三维的网格Mesh,
如PMVS稠密点云

5.将二维图片纹理映射至三维场景,如MVS推荐的FSSR(Floating Scale Surface Reconstruction)库或MVS-texturing
而CMPMVS库(非开源)支持依次建立网格和纹理



针对PMVS,openMVG提供了导出方法

openMVG_main_openMVG2PMVS -i Dataset/outReconstruction/SfM_Output/ -o Dataset/outReconstruction/SfM_Output/
pmvs Dataset/outReconstruction/SfM_Output/PMVS/ pmvs_options.txt


针对CMPMVS,openMVG提供了导出方法

openMVG_main_openMVG2CMPMVS -i Dataset/outReconstruction/SfM_Output/ -o Dataset/outReconstruction/SfM_Output/


5.选用某种格式保存模型及纹理。使用查看器或游戏引擎进行显示。


OpenMVG按照以下步骤进行SFM重建:


Image listing
openMVG_main_SfMInit_ImageListing
Image description computation
openMVG_main_ComputeFeatures
Corresponding images and correspondences computation
openMVG_main_ComputeMatches
SfM solving (2 methods)
openMVG_main_IncrementalSfM
openMVG_main_GlobalSfM
Optional further processing
openMVG_main_ComputeSfM_DataColor
openMVG_main_ComputeStructureFromKnownPoses
openMVG_main_ExportUndistortedImages
Optional further processing (3rd party)

Multiple View Stereovision

上述步骤被整合在SfM_GlobalPipeline.py脚本中


Polycode 游戏引擎调用了assimp库以进行3D模型的导入和导出,该库提供了可在windows下使用的3D模型查看器open3mod
Polycode的模型格式为.mesh,与OGRE一致。MVE库和FSSR库的导出格式为.ply,Polycode提供了转换工具polyimport


可能改进的地方
1. 提取特征点的算法可以与高层相关。即先用通用特征点算法提取后估算大致对应关系,然后使特征点的有效范围更大,进行线段或纹理捕捉,提高精度
2. RANSAC后针对特征点稀疏的地方,降低阈值再次提取
3. 非线性优化方法,噪声鲁棒性


OpenMVG库依赖于:

OPENEXIF        读取JPEG EXIF信息头
Eigen           矩阵和向量运算库
flann           处理在高维空间的最邻近搜索
lemon           图和网络数据结构及优化算法
progress        显示进度条
CppUnitLite     单元测试 
htmlDoc         文档生成

此外,MVE是一个较为全面的库,包办了SFM MVS FSSR功能。
文档在这里
这里 有很多3D原始素材

你可能感兴趣的:(图像处理与识别)