【openMVG+openMVS】手机拍照重建三维场景

本文详细指导如何在Ubuntu18.04环境下配置CMake3.20.x和GCC/G++9,包括openMVG结构从运动和openMVS多视图立体的安装。重点介绍了使用openMVG进行SfM重建的步骤,包括图像预处理、内参设置、数据格式转换和openMVS的重建过程,最终展示了良好重建效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

环境配置

测试环境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数据集进行尝试

GitHub - openMVG/ImageDataset_SceauxCastle: Image of "Chateau de Sceaux", Sceaux castle. France. Photographer: Copyright 2012 Pierre MOULON

在尝试自己采集的数据集时,按照示例的数据集的方式把图片放到一个文件夹里就好,有内参的写一个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  #表面贴图

最后运行结果:

重建效果还是相当好的,鞋子的纹理和凹凸细节都被恢复出来了~

 

OpenMVG(多视图几何库)和OpenMVS(多视图表面重建库)是一对用于三维重建的开源工具库。 OpenMVG三维重建原理是基于多视图几何的算法。它首先通过结构从运动(SfM)算法计算相机的位姿和三维特征点在多个图像中的位置。这个过程可以通过解决一系列视觉几何方程来实现,例如基础矩阵估计和光束法平差。然后,OpenMVG使用三角化算法将这些特征点转换成三维点云。最后,通过利用全局最优化技术,OpenMVG进行了相机内外参数的联合优化,从而进一步提高了三维重建的质量。 而OpenMVS三维重建原理则是基于稠密点云的重建。它接受OpenMVG的输出结果,即相机的位姿和三维点云,然后使用逐像素的基于多视图的三角化算法,将这些稀疏点云转换为稠密点云。在这个过程中,OpenMVS还利用了光度一致性和相机位姿约束来提高点云的重建质量。接下来,OpenMVS使用基于代价体积的方法对稠密点云进行三角网格化,以生成具有几何形状的三维模型。最后,OpenMVS通过进行网格细化和纹理映射,进一步优化和完善三维模型的外观和细节。 总的来说,OpenMVGOpenMVS组合使用,可以实现从多张图像到稠密三维模型的完整三维重建流程。OpenMVG通过基于多视图几何的算法,实现从图像到稀疏点云的转换;而OpenMVS则通过逐像素的三角化和基于代价体积的方法,将稀疏点云转换为稠密点云,并最终生成具有几何形状和纹理的三维模型。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值