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提供了导出方法
针对CMPMVS,openMVG提供了导出方法
5.选用某种格式保存模型及纹理。使用查看器或游戏引擎进行显示。
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库依赖于:
此外,MVE是一个较为全面的库,包办了SFM MVS FSSR功能。
文档在这里
这里 有很多3D原始素材
整体过程:
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 listingopenMVG_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原始素材
相关文章推荐
- n阶行列式求解
- Picasso分析03
- Cocos2dx-3.8.1 Mac模拟器打印行数太多显示不全
- Best Time to Buy and Sell Stock IV[未完成】
- linux下查看对象文件依赖的动态库的工具ldd简介
- CF478 B. Random Teams 组合数学 简单题
- windows下对拍
- Anonymous Class
- Java容器集合类的区别用法
- 1.Python深入_特殊方法与多范式
- Raspberry pi 配置OpenCV环境
- 编码之道:取个好名字很重要
- 关于代码学习的一些看法
- 021-Merge Two Sorted Lists(合并两个排好序的单链表);leetcode
- WebStorm常用设置和常用快捷键
- 阿里云免费服务器使用笔记(安装tomcat+jdk+mysql)
- 仔仔手机安全卫士demo(三)
- ES6 编译 ES5 环境搭建
- LVS
- Nginx反向代理服务器