您的位置:首页 > 其它

Structure From Motion 笔记

2015-10-03 00:06 337 查看
期末的大作业使用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原始素材
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: