视觉三维重建:计算机视觉的核心任务
一、前言
视觉三维重建一直是计算机视觉和摄影测量领域讨论的话题,且在近几年更是大家关注的热点、如数字孪生、AR、自动驾驶的高精度地图等。视觉三维重建相比激光三维重建,虽然精度上处于劣势,但是视觉具备更丰富的信息且成本低廉,故是数字化场景的首选方案,到目前为止,视觉三维重建框架层出不穷,其开源代表有colmap(2016)、openmvg(2012)、openmvs、alicevison、opensfm 等,商业代表有ContextCapture、photoscan、pix4D、realicature 等。商业代表的主要应用场景主要是处理无人机数据,对于车载数据可能不具备优势,而开源的算法框架距离商业化、可用状态还有很长的路需要走,需要投入精力进行大量的优化。
二、开源算法框架为何选择colmap
COLMAP是一款功能强大structure from motion 和MVS 工具,是Schönberger在ETH博士期间的成果,到目前位置,一直保持开源的框架的前几位,也是后续研究者开展相关工作的首选框架,其整个pipeline 流程如下:
三维重建框架与开源的slam一样,如何选择自己的学习工具是很重要的一件事,选择正确会避免走很多弯路。colmap在代码结构上,进行模块化,代码干净具备很强的可读性,是一款非常值得阅读的开源框架,这无疑是初学者的福音;同时在重建效果上,相比其他开源算法框架和部分商业框架,也具备很强的优势,具体效果对比如下:
场景1
场景2
场景3
三、开启三维之路
如何使用一个开源算法框架,我个人总结如下:
1.第一步肯定是跑公开数据集,车载的,无人机的,记录不同拍摄方式产生的效果的好坏,首先有概念上的认知
2.跑自己的数据,如手机,标准相机拍摄的图像,记录存在的问题和遇到的block
3.开始阅读代码,了解每个模块的功能。
4.尝试小小修改代码,比如如何输出sift提取的x,y,orientation,scale ?如何输出我每次ba都是用了哪些图像?
5.尝试改进代码,当然项目驱动最好,比如如何用其他handcrafted features 或 learned features 替换sift,如何恢复尺度?如何提升系统的鲁棒性?
关于数据集,个人总结以下:
常用数据集
1、ISPRS
https://www. isprs.org/education/ben chmarks.aspx
2、sensefly
https://www. sensefly.com/education/ datasets/
3、Kagaru
https:// michaelwarren.info/docs /datasets/kagaru-airborne-stereo/
4、WHU
http:// gpcv.whu.edu.cn/data/WH U_MVS_Stereo_dataset.html
5、KITTI
http://www. cvlibs.net/datasets/kit ti/
6、ETH
7、realitycapture
https://www. capturingreality.com/Sa mpleDatasets
8、视觉定位数据集
https://www. visuallocalization.net/ datasets/
9、ODM
https://www. opendronemap.org/odm/da tasets/
10、mve 官网的数据
https://www. gcc.tu-darmstadt.de/hom e/proj/ambient_point_clouds/apc.en.jsp
11、奥地利维也纳理工大学的Harvest4D项目(有GT)
https:// harvest4d.org/? page_id=1367
12、自动化所偏古建筑
http:// vision.ia.ac.cn/zh/data /index.html
13、blendedmvs
https:// github.com/YoYo000/Blen dedMVS
14、Drone Mapping
https:// dronemapper.com/sample_ data/
16、 https://www. cs.cornell.edu/projects /bigsfm/#code bigsfm
四、视觉三维的应用场景