Advertisement

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原始素材

全部评论 (0)

还没有任何评论哟~