【环境搭建】使用openSfM+MVSNet重建稠密点云

YuhsiHu 2024-09-12 16:01:01 阅读 81

本帖详细介绍了如何使用openSfM+MVSNet对真实采集的数据进行稀疏重建与稠密重建,并针对一些真实场景下可能遇到的问题进行了整理。

目录

1. 背景

2. 数据采集

3. 使用openSfM进行稀疏重建

3.1 输入文件

3.2 稀疏重建

4. 使用MVSNet进行稠密重建

5. Q&A:为什么我的重建效果不好?

1. 背景

随着近年来深度学习在3D视觉中的应用,传统的三维重建软件如colmap、openSfM、openMVS,都无时无刻不面临着新兴算法的挑战。传统算法虽然在应对不同数据集时的可靠性有一定保障,但在弱纹理区域、重复纹理区域一直表现不佳,同时,大规模场景重建的时间开销也逐渐被人所不容忍(尤其在深度学习的方法被引入之后)。因此,一个靠谱的pipeline是先使用传统算法进行稀疏重建,对所输入的图像进行位姿估计,然后将结果交给基于深度学习的算法,比如MVSNet系列,来进行深度图估计和稠密重建。

在此,我们不对重建算法本身进行介绍,只教大家如何一步一步跑通这个pipeline。

2. 数据采集

数据采集方面,我们只需要使用相机、手机、无人机,甚至遥感卫星,对想要重建的物体拍照就可以了。注意以下方面,有助于提升最终的重建质量:

拍摄的照片尽可能清晰。

照片与照片重叠的区域要大一些,如果场景很大,就尽可能多拍。

如果设备是无人机之类的,可以获取相机参数,这对于稀疏重建很重要,省去了算法重新估算的麻烦。

3. 使用openSfM进行稀疏重建

环境搭建方面,硬件上无特殊要求,软件上可以参考openSfM的官方文档。

3.1 输入文件

交给openSfM的时候,image is all you need,把所有拍摄的一个场景的图片都放到一个images的文件夹里,就可以开始重建了。为了对后续稠密重建更友好,建议先对照片文件重新命名,因为openSfM会给文件直接加后缀jpg,也就是说如果你的图片是JPG,稀疏重建的记录会把文件名记录成JPG.jpg,所以不如我们先自己改好名字。

<code>import os

def rename_files_to_jpg(folder_path):

# Loop through all files in the folder

for filename in os.listdir(folder_path):

# Split the filename and extension

name, ext = os.path.splitext(filename)

# Remove any periods from the name

name = name.replace('.', '')

# Form the



声明

本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。