本帖详细介绍了如何使用openSfM+MVSNet对真实采集的数据进行稀疏重建与稠密重建,并针对一些真实场景下可能遇到的问题进行了整理。
目录
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,所以不如我们先自己改好名字。
import os
defrename_files_to_jpg(folder_path):# Loop through all files in the folderfor 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
版权归原作者 YuhsiHu 所有, 如有侵权,请联系我们删除。