FastMVSNet自定义测试数据集网络实现流程(一)

        本文主要介绍windows 下如何通过Colmap 生成可用于MVSNet 网络进行三维重建的自定义数据集,包括通过SFM算法估计到的相机内外参信息和位置配对信息。

一、Windows下安装Colmap

        具体安装步骤可以查看Colmap的官网:Installation — COLMAP 3.8 documentation

        根据页面的提示进入到安装包下载页面,将zip包下载到PC的目录下并进行解压,解压后可以看到COLMAP.bat 文件,双击这个文件就可以打开Windows 下Colmap 的GUI界面,安装完成:

二、进行多视角图片的稀疏重建

        将待进行三维重建的图像放在同一个图片文件夹(最好命名为images,因为转换文件默认从这个名称下提取图片)下,以dtu/scan2为例,本文将49张同一光照下的图片都放在PC的“D:\TestData\DTU\images” 文件夹下,同时可以在与图片文件夹同一目录下创建一个db 文件夹,用于存放重建计算出的中间数据文件database.db。

       在colmap 的GUI 界面点击File->New project,在输出菜单输入数据库和图片文件夹,点击保存,新的三维重建工程创建成功。在进行下面的SFM 的操作过程中,如果有use_gpu 的选项,在无GPU 环境下一定要取消勾选,不然会导致崩溃!

         点击Processing->Feature Extraction,在输出菜单上可进行一些参数的配置,其中可以选择是否使用GPU,并填写GPU 的编号,在没有GPU 的情况下,也可以直接使用CPU 进行分析,只是分析速度会比较慢。配置完成后,点击Extract 等待colmap 进行特征提取,特征提取的日志会在右侧窗口进行打印。

         点击Processing->Feature matching,在输出菜单上可进行一些参数的配置,其中可以选择是否使用GPU。配置完成后,点击Run 等待colmap 进行特征匹配,特征匹配的日志会在右侧窗口进行打印。

         点击Processing->management,在输出菜单上可以看到database.db 数据库中记录的一些图片信息或相机参数,也可以自己做一些相机编号的修改,同时可以选取图片查看提取出的特征点。

         确认数据库中保存的中间数据无误后,点击Reconstruction->Start reconstruction,在GUI 界面就可以看到colmap 根据特征点进行增量式SFM 稀疏重建的过程。增量式SFM 根据无序图像提取的特征点进行特征匹配,并通过几何纠正、三角测量等方式恢复稀疏点云结构,通过已有点云重新估计相对姿态,再进行局部和全局的BA 优化。之后逐步向已有的结构中增加视角或影像,进行三角测量和姿态估计,再进行BA 优化修正结构数据,最后输出全部的相机参数和稀疏三维点云。

         可以看到通过这一步恢复的三维点云还是比较稀疏的,不过通过相机位姿的估计就可以得到后续进行MVS 多视图立体匹配稠密重建所需要的相机数据了。通过colmap 也可以直接进行后续的稠密重建(Reconstruction->Dense reconstruction),不过必须用到CUDA ,在不支持CUDA 的机器上是不能进行稠密重建的。

三、自定义数据集构建

        稀疏重建完成后,在图片文件夹同一目录下新建sparse文件夹,在GUI 界面点击File->Export model as text 选择新建的sparse 文件夹,colmap 估计的相机和稀疏点云信息会输出到目录下的txt文件中。camera.txt 保存相机内参数,images.txt 保存图片外参数和图片二维特征与三维空间点对应信息,points3D.txt 保存三维空间点在世界坐标系下坐标、RGB值以及在各个影像上的轨迹。

        在这里非常感谢YoYo大佬提供的colmap 相机参数转MVSNet 相机参数的脚本,MVSNet 系列网络的开山之作,github地址如下,大家一定要多支持大佬:

GitHub - YoYo000/MVSNet: MVSNet (ECCV2018) & R-MVSNet (CVPR2019)

        昇腾(Ascend)处理器NPU迁移代码(感谢大佬贡献):

modelzoo: Ascend Model Zoo - Gitee.com

        转换脚本为mvsnet 目录下的colmap2mvsnet.py,大家可以自行从git上下载,在windows 上执行命令:python .\colmap2mvsnet.py --dense_folder D:/TestData/DTU,如果要生成具有固定深度样本数(例如256)的MVSNet输入,可以通过--max_d 256指定深度数,其它参数一般不作修改。

        运行可能会遇到两个报错:

        1)  AttributeError: module 'numpy' has no attribute 'asscalar'. Did you mean: 'isscalar'?

        numpy 版本比较高导致,某些功能已变更,将"zs.append(np.asscalar(transformed[2]))"  这一行替换成"zs.append(transformed[2].item())" 即可

   2)  AttributeError: Can't get attribute 'calc_score' on <module '__mp_main__' from 'D:\\TestData\\DTU\\colmap2mvsnet.py'>

        windows下不支持multiprocessing 的这种使用方式,因为我图片量也不是很大,直接改成了单进程处理,实际可根据需要将result = p.map(calc_score, queue) 那里修改一下,右侧为修改之后的代码:

        执行完成后可以看到在dense_folder 指定的文件夹下新生成了cams 文件夹(包含相机内外参信息文件)和pair.txt (图片匹配信息)文件,点击images 文件夹,也可以看到图片重命名后生成的文件(用于MVSNet网络),将iamges、cams 和pair.txt 文件夹放在同一文件夹下,并命名为scan1 这种格式,则在windows下的自定义数据集生成完成。

       

        下一章节将讲解在Linux 下如何通过Colmap 生成可用于MVSNet 网络进行三维重建的自定义数据集。

  

评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值