openMVG+openMVS对数据集的详细重建步骤!避坑!!!

在Ubuntu18.04上配置安装了openMVG和openMVS两个库,成功跑通了官方数据集,想看一下它们在其它数据集上的效果,看了很多博客仍然会有错误,所以写一下自己的重建步骤和遇到问题的解决办法。
我选取的数据集是瑞典隆德大学发布的数据集中的圆顶教堂。图像使用佳能NIKON D60(相机型号与参数:Nikon D60;23.6)单反相机拍摄。

注:若电脑内存不够多或显卡不够强,不建议用很大的数据集,不然可能会出现内存不足或时间过长的情况。之前我跑很大的数据集,图片压缩包有1.3GB,稠密化后的文件差不多有20个GB,跑了4个小时最后还有错误,这个圆顶教堂的数据集压缩包只有50MB,很快就跑完了。

在这里插入图片描述
数据集参考链接:隆德大学三维重建数据集

一、写在前面

我是在一个全新的Ubuntu18.04上配置的openMVS与openMVG,全程按照官方的步骤进行的,参考链接如下:
openMVS:https://github.com/cdcseacave/openMVS/wiki/Building#linux-compilation
openMVG:https://github.com/openMVG/openMVG/blob/master/BUILD.md#compiling-on-linux

注:
1、建议先装openMVS再装openMVG,原因:
这两个库都需要用到libjpeg包,若它们编译时用到的libjpeg版本不同,则在稠密化的时候会报错
为避免上述问题,在openMVG cmake之前先去<openMVG/src/CMakeList.txt>中注释/删除掉以下文字:

if (DEFINED OpenMVG_USE_INTERNAL_JPEG)
message(STATUS "LIBJPEG (internal)")
else()
message(STATUS "LIBJPEG (external)")
endif()

即下面这段(蓝色字体),这样是为了openMVG不用自己的libjpeg而只用openMVS的libjpeg
在这里插入图片描述
若第1个方法不起作用,可以将libjpeg.so.8的路径/usr/local/lib添加到环境变量中,在命令行输入以下命令:

echo 'export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib' >> ~/.bashrc

这样就不会再出现libjpeg包的问题了。

2、这个算法是需要自己相机的参数的,参数文件为“sensor_width_camera_database.txt”,这个在后续过程中也会提到,主流相机都会在这个文件中写,若其中没有自己的相机型号和参数,可通过以下方法获取(个人认为用焦距来代替参数是不准确的,所以仅在txt中没有该相机的时候用来代替):
I 在图片的属性中找到相机型号和焦距,焦距即为参数
在这里插入图片描述
II 手机的话下载AID64这个应用,这里面<设备>这项,查看焦距即可

例如我的手机是华为p20pro,相机型号为CLT-A10,焦距为5.58,则在txt中输入“CLT-A10;5.58”

二、openMVG生成稀疏点云

1、首先下载该数据集,将文件夹解压到SfM目录下的dataset文件夹(自己建的,方便管理数据集)中,进入eglise文件夹,把图片放入image文件夹,新建result文件夹

< image >:放置照片的文件夹;
< result >:输出的文件夹;

image存储输入的图片,result存储输出的数据文件

2、读入图像,产生数据文件,SFM文件夹下,终端输入:

openMVG_main_SfMInit_ImageListing -i dataset/eglise/image -o dataset/eglise/result/matches -d /home/lianqi/openMVG/src/openMVG/exif/sensor_width_database/sensor_width_camera_database.txt

执行成功后在matches文件夹产生sfm_data.json文件

注意!!!
“sensor_width_camera_database.txt” 是openMVG库中自带的,存储各大主流相机型号和参数的文件, “Nikon D60;23.6” 就写在该文件中。
" -d /home/lianqi/openMVG/src/openMVG/exif/sensor_width_database/sensor_width_camera_database.txt"
这条命令必须要写上,这是导入相机参数的,不然会报错

3、ComputeFeatures

openMVG_main_ComputeFeatures -i dataset/eglise/result/matches/sfm_data.json -o dataset/eglise/result/matches

4:ComputeMatches

openMVG_main_ComputeMatches -i dataset/eglise/result/matches/sfm_data.json -o dataset/eglise/result/matches

5:IncrementalSfM

openMVG_main_IncrementalSfM -i dataset/eglise/result/matches/sfm_data.json -o dataset/eglise/result/out_Incremental_Reconstruction -m dataset/eglise/result/matches

注:若这条命令或之后的命令出现没有找到图片或无法加载图片,例如:
error: failed reloading image ‘/home/lianqi/openMVG_Build/software/SfM/dataset/eglise/result/out_Incremental_Reconstruction/undistorted_images/DSC_0430.JPG’
则说明进入的文件夹太深了,图片并不在这层文件夹内,可以cd . .两次再执行

6:ExportUndistortedImages

openMVG_main_ExportUndistortedImages -i dataset/eglise/result/matches/sfm_data.json -o dataset/eglise/result/out_Incremental_Reconstruction/undistortedimage

7:数据格式转换

openMVG_main_openMVG2openMVS -i dataset/eglise/result/out_Incremental_Reconstruction/sfm_data.bin -o dataset/eglise/result/out_Incremental_Reconstruction/scene.mvs

sence.mvs即为openMVG生成的稀疏点云文件

三、openMVS进行点云稠密处理、网格生成、纹理映射

OpenMVS的使用基础为openMVG生成的稀疏点云
之后的步骤就是用openMVS的终端工具对点云进行处理,这些终端工具一般在</usr/local/bin/OpenMVS>下,直接使用会找不到,所以必须使用绝对路径
稠密点云重构:使用终端工具 DensifyPointCloud 建立稠密图

/usr/local/bin/OpenMVS/DensifyPointCloud dataset/eglise/result/out_Incremental_Reconstruction/scene.mvs

执行后会生成scene_dense.mvs与scene_dense.ply文件,scene_dense.ply文件用meshlab查看如下:

在这里插入图片描述

若这一步只产生了一个日志文件而并未生成上述文件,一般使用以下两种方法:
1、将scene.mvs改名,比如改成s1.mvs,再次执行此命令即可
2、重启电脑,再次执行此命令
以上两种我都尝试过,亲测有效,但是为什么会有这种bug目前还不知道

网格重构:使用终端工具 ReconstructMesh 建立粗网格

/usr/local/bin/OpenMVS/ReconstructMesh dataset/eglise/result/out_Incremental_Reconstruction/scene_dense.mvs

执行后会生成scene_dense_mesh.mvs,scene_dense_mesh.ply,是带粗纹理的,如下:
在这里插入图片描述
网格精炼(可选):使用终端工具 RefineMesh 建立精致网格

/usr/local/bin/OpenMVS/RefineMesh dataset/eglise/result/out_Incremental_Reconstruction/scene_mesh.mvs

网格纹理映射:使用终端工具 TextureMesh 混合网格建立纹理

/usr/local/bin/OpenMVS/TextureMesh scene_dense_mesh.mvs

最终生成的模型如下:

在这里插入图片描述
在这里插入图片描述
模型不够完整,但是效果还行。图片的数量对重建的效果影响很大,这个数据集图片有点少,有条件的话可以跑一下更大的数据集。

参考链接:
https://blog.csdn.net/qq_42615787/article/details/105609338
https://blog.csdn.net/abccc250110119/article/details/105075101

  • 16
    点赞
  • 109
    收藏
    觉得还不错? 一键收藏
  • 20
    评论
openMVG和openMVS是两个用于计算机视觉和三维重建的开源工具。openMVG用于生成稀疏点云,而openMVS用于进一步处理这些点云并生成稠密点云。 在配置openMVS和openMVG时,你可以按照官方提供的步骤进行操作。你提供的参考链接中包含了在Ubuntu 18.04上配置openMVS和openMVG的详细说明。\[1\] 在使用openMVS之前,你需要先生成openMVG生成的稀疏点云。然后,你可以使用openMVS的终端工具对点云进行处理。这些终端工具通常位于"/usr/local/bin/OpenMVS"目录下。你可以使用绝对路径来调用这些工具。例如,使用终端工具"DensifyPointCloud"可以建立稠密图。命令示例为: /usr/local/bin/OpenMVS/DensifyPointCloud dataset/eglise/result/out_Incremental_Reconstruction/scene.mvs \[3\] 如果你在使用过程中遇到问题,你可以参考openMVS的GitHub页面上的问题列表,可能会有其他用户遇到类似的问题并提供了解决方案。\[2\] 希望这些信息对你有帮助!如果你有任何其他问题,请随时提问。 #### 引用[.reference_title] - *1* *3* [openMVG+openMVS对数据集详细重建步骤避坑!!!](https://blog.csdn.net/vanilla_an/article/details/115334413)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [使用ipad拍出来的相片利用openmvg+openmvs进行三维重建](https://blog.csdn.net/cangqiongxiaoye/article/details/123412689)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 20
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值