欢迎光临散文网 会员登陆 & 注册

使用Colmap+OpenMVS进行物体的三维重建

2023-07-14 18:31 作者:舞曲的小水瓶  | 我要投稿

一、准备工作

       1.1  下载Colmap:https://demuc.de/colmap/#download

               选择cuda版本的进行下载。

       1.2  下载OpenMVS,可以选择下载源码自行编译也可以选择封装好的可执行程序。

            Github源码:https://github.com/cdcseacave/openMVS

               可执行程序:https://github.com/cdcseacave/openMVS_sample

        1.3  在终端中输入nvidia-smi根据显卡驱动的信息下载对应版本的cuda

此处显示的为显卡支持的最高版本的cuda,选择该版本号之前的版本皆可

二、使用Colmap生成稠密点云

        2.1  新建文件夹并在该文件夹中创建一个images文件夹,将需要重建的图片放入images中,注意文件路径中不能出现中文和空格。我使用51张由C4D生成的卫星模型图进行三维重建。

使用自建数据集时注意:

①尽量使用单反相机或专业数码相机进行数据采集,如果要用手机进行采集,请使用单摄像头的手机进行数据采集。

②尽量选择纹理丰富的外界环境进行数据采集,避免玻璃围墙、瓷砖和打蜡地板等强反光材料环境以及完全没有纹理的场景。

③尽量选择光照明亮,且光照条件变化不剧烈的环境,最好选择室内环境。如室内客厅,开启客厅大灯进行灯光补偿。

④尽量围绕重建物体或环境采集较多的影像,且在采集过程中控制快门速度,避免模糊。

      

       2.2  打开1.1中下载的Colmap文件夹,启动COLMAP.bat,点击File→New Project创建一个新项目,在Database栏中点击New并进入2.1创建的文件夹目录中,使用colmap自带的sqlite工具创建一个.db文件,输入名字并保存;在Images栏中选择刚刚创建的images文件夹,最后save。

        2.3  点击Processing → Feature Extraction,相机模型选择PINHOLE,点击Extract获取图片特征。

        2.4  点击Processing → Feature matching → Run,对获取到的特征点进行匹配,使用默认参数既可。

        2.5  点击Reconstruction → Start reconstruction,开始重建,colmap会生成对应的稀疏点云和各个视角的相机姿态,等待执行完毕。

        2.6  在之前image的同级目录下创建一个dense文件夹,点击Reconstruction → Dense reconstruction,点击select,选择刚刚创建的dense文件夹用来保存稠密重建的结果。点击Undistorion对图像进行去畸变,点击Stereo对每张图片生成深度图(此过程需要较长时间),等待深度图生成后点击fusion进行基于深度图融合的稠密重建。


 

三、使用OpenMVS重建模型

       使用编译好的openmvs_sample进行重建工作。

       3.1  首先将生成的稠密点云以及图片信息转换成openmvs支持的.mvs文件。在openmvs_sample中的bin文件内打开终端,执行命令:.\interfaceCOLMAP.exe -i D:\Reconstruction\academy\dense -o D:\Reconstruction\academy\dense\scene.mvs --image-folder D:\Reconstruction\academy\dense\images

在dense文件夹下生成了scene.mvs文件。

 

       3.2  进行重建操作,执行命令:

       .\ReconstructMesh.exe -i D:\Reconstruction\academy\dense\scene.mvs -o D:\Reconstruction\academy\dense\mesh.mvs

生成mesh.mvs文件

       注意,执行此步骤时可能会报错无法找到某路径下的图片,根据报错的路径提示将2.1中的image文件夹复制过去即可。

      

       3.3  对3.2中生成的模型添加纹理,执行命令:

       .\TextureMesh.exe -i D:\Reconstruction\academy\dense\mesh.mvs

        3.4  对mesh.mvs文件使用OpenMVS的可视化工具Viewer.exe进行可视化:

       .\Viewer.exe -i D:\Reconstruction\academy\dense\mesh_texture.mvs

重建图
原模型


        和原模型相比,建模出现空洞可能的原因是表面有反光、使用C4D生成的图片分辨率不高(每张图仅有100k不到)可用特征过少,导致深度图生成精度不高,后续在获取图片的时候可以选择其他角度,同时提高生成图像的质量。

 

原理:

       Colmap使用SIFT算法对特征点进行提取,利用特征描述向量找到有场景重叠的景象,即特征匹配;然后根据采集到的信息,使用SfM的方法进行稀疏重建,输出目标的稀疏点云和场景中全部的相机参数。对图像进行去畸变操作后,使用MVS(Mutli-View Stereo)来计算图像中每个像素的深度和法向信息,利用深度图的配准原理融合多个图像的深度图,最终产生稠密点云。

       之后使用OpenMVS对稠密点云进行网格重建,重建后可以对mesh文件进行网格细化操作;最后输入网格文件、相机位姿、照片,对网格文件进行纹理贴图操作,输出带有纹理贴图的网格模型。

 

总结:

       COLMAP可以用于快速三维重建,代码封装良好,使用方便。但深度图估计速度过慢,切在深度图估计的精度上略低于深度学习方法。同时为了增加泛用性和鲁棒性以及保证重建速度,使用了Colmap中的默认参数进行三维重建,所以对于特定场景或物体的重建效果可能不理想,后续可以详细学习源码来对其中参数进行调整,或者在源码的基础上对算法进行优化,使其更符合我们需要的场景。

 

参考文章:

Colmap官方文档:https://colmap.github.io/database.html

https://zhuanlan.zhihu.com/p/566828254

https://zhuanlan.zhihu.com/p/183673331

https://blog.csdn.net/weixin_44543463/article/details/125628410


自学习用,侵删


使用Colmap+OpenMVS进行物体的三维重建的评论 (共 条)

分享到微博请遵守国家法律