COLMAP+OpenMVS实现物体三维重建mesh模型
一、环境准备
(1) COLMAP
(2) OpenMVS
OpenMVS可以自己从源码下载进行编译。如果觉得编译openmvs可能要费点时间,那也可以直接下载编译好的可执行程序。
Github源码:https://github.com/cdcseacave/openMVS
可执行程序:https://github.com/cdcseacave/openMVS_sample
二、COLMAP重建得到稠密点云
- 新建一个文件夹,在其中新建images文件夹,以及一个Database.db的空文件,注意文件路径不要出现中文。images文件夹中放入需要重建的图片,图片越多重建时间越长,图片过少可能会重建失败,我这里以96张图片为例,生成稠密点云05。
本文使用DTU数据集进行测试。
自建数据集要求:
- 尽量使用单反相机或专业数码相机进行数据采集,如果要用手机进行采集,请使用单摄像头的手机进行数据采集。
- 尽量选择纹理丰富的外界环境进行数据采集,避免玻璃围墙、瓷砖和打蜡地板等强反光材料环境
- 尽量选择光照明亮,且光照条件变化不剧烈的环境,最好选择室内环境。如室内客厅,开启客厅大灯进行灯光补偿。
- 尽量围绕重建物体或环境采集较多的影像,且在采集过程中控制快门速度,避免模糊。
- 打开colmap程序(COLMAP.bat),点击File-New Project,在Database栏点击open,选择刚才新建的Database.db文件,在Images栏选择刚才新建的存放图片的images文件夹,点击save保存。
- 点击Processing-Feature Extraction,默认参数即可,点击Extract,等待程序运行完毕可看到右侧有log信息输出。
- 点击Processing-Feature matching,默认参数即可,点击Run,等待程序运行完毕可看到右侧有log信息输出。
- 点击Reconstruncion-Start reconstruction,等待执行完毕,即可得到重建的结果。
- 在之前images的同级目录下,新建一个文件夹dense。点击Reconstruncion-Dense reconstrction,点击select,选择刚才新建的dense文件夹用来保存稠密点云结果。依次点击Undistorion、Stereo、Fusion,执行完毕。
-
在程序中点击File-export model as txt,选择dense文件夹下的sparse文件夹(由于openmvs支支持txt格式的,所以需要将重建的文件转成txt文件)
-
检查camera.txt内的相机模型是否为Pinhole,如果不是则直接改成pinhole,不管之前选的是不是这里都可以直接改就行。
三、OpenMVS重建得到mesh模型
以编译好的openmvs_sample为例,我们要把colmap生成的稠密点云以及图片路径信息等转换成openmvs的.mvs文件。
- 打开命令提示窗口CMD,进入openmvs_sample下的bin目录,执行命令
1 | interfaceCOLMAP.exe -i E:\Projects\2022.06-3DReconstruction\test\dense -o E:\Projects\2022.06-3DReconstruction\test\dense\scene.mvs --image-folder E:\Projects\2022.06-3DReconstruction\test\dense\images |
可以看到dense文件夹下生成了scene.mvs文件(-o为输出文件目录,默认是在当前文件夹下,也可以指定其它路径)。
- 执行命令重建
1 | ReconstructMesh.exe -i E:\Projects\2022.06-3DReconstruction\test\dense\scene.mvs -o E:\Projects\2022.06-3DReconstruction\test\dense\mesh.mvs |
- 执行命令添加纹理(这一步比较占用计算机资源,本人电脑较老,运行时蓝屏重启了,大家酌情尝试一下)
1 | TextureMesh.exe -i E:\Projects\2022.06-3DReconstruction\test\dense\mesh.mvs |
可以看到文件夹内新生成了四个文件,可以使用meshlab打开其中的.ply文件(三维mesh模型),下图为Solidworks打开的样子(未添加纹理)。
评论