环境配置
测试环境ubuntu18.04 cmake3.20.x gcc/g++ 9
首先安装openMVG (用于structure from motion)
https://github.com/openMVG/openMVG/blob/master/BUILD.md
然后安装openMVS(Multi view stereo)
Building · cdcseacave/openMVS Wiki · GitHub
实操环节
1.进入openMVG的build后的文件夹
cd xxx/openMVG/build/software/SfM
2.使用openMVG的重建管线脚本
python SfM_GlobalPipeline.py [full path image directory] [resulting directory]
注意:一般拍摄图像中会有相机的参数信息,OpenMVG将尝试检索图像的像素焦距。如果没有,在 Scene Initialization stage我们可以使用-f X * 1.2
提供一个近似焦距,其中X = Max(image <Width, Height>)
此处可以修改脚本SfM_GlobalPipeline.py 里面的这一行
pIntrisics = subprocess.Popen( [os.path.join(OPENMVG_SFM_BIN, "openMVG_main_SfMInit_ImageListing"), "-i", input_dir, "-o", matches_dir, "-d", camera_file_params,"-f","你的近似像素焦距"] )
初次运行可以使用 sceaux castle数据集进行尝试
在尝试自己采集的数据集时,按照示例的数据集的方式把图片放到一个文件夹里就好,有内参的写一个K.txt文件标定内参,没有的可以不写
拍摄数据集时有一些注意事项:
1.场景特征要足够丰富,如果你想重建某个物体,这个物体最好不要是纯色的或者是大范围纯色的,否则图片匹配的时候容易失败(博主之前尝试拍客厅 玩具熊都失败了,因为纹理太少匹配失败)
2.拍摄的时候每次移动镜头的幅度和角度不要太大,移动幅度太大的地方图片容易匹配不上,没有匹配上的图片对于重建是没有作用的
3.使用openMVG的工具进行数据格式转换scene.mvs包含了位置姿态和图片
openMVG_main_openMVG2openMVS -i sfm_data.bin -o scene.mvs -d scene_undistorted_images
4.使用openMVS完成重建
cd ~/openMVS/make/bin #切入openMVS可执行文件的文件夹
./DensifyPointCloud scene.mvs #稠密点云重建
./ReconstructMesh scene_dense.mvs #表面重建
./TextureMesh scene_dense_mesh_refine.mvs #表面贴图
最后运行结果:
重建效果还是相当好的,鞋子的纹理和凹凸细节都被恢复出来了~