视觉三维重建colmap框架的现状与未来

在这里插入图片描述

注:该文章首发3D视觉工坊,链接如下3D视觉工坊

前言

众所周知,三维重建的发展已经进入了稳定期,尤其是离线方案的发展几乎处于停滞期,在各大论刊上也很少见到传统sfm+mvs亮眼的文章。这也不难理解,传统的多视图几何内容已经被展现的体无完肤,即使能做出一些impressive创新,也需要非常坚厚的数学基础。这里就公布一些主流的离线视觉三维重建商业和开源的框架问世时间:

商用:
(1)Photoscan(现在称为Agisoft Metashape)的首个版本于2010年发布。
(2) ContextCapture 是由Bentley Systems开发的软件,首个版本发布于2015年。
(3) Inpho 是由Trimble开发的软件,发布时间比较早,但具体时间可能因版本而异。Trimble公司在2008年收购了Inpho公司,因此在此之前的版本应该是由Inpho公司发布的。
(4)Pix4D是一家提供专业无人机图像处理软件的公司,其软件可用于生成高质量的地图和模型。Pix4D软件的首个版本于2011年发布。
开源:
(1)openmvg 是2012年发布,应该是最早的且最具有代表性的三维重建框架。
(2)colmap是2016年发布的,一问世便处于巅峰位置,目前来看,仍然是处于incremental sfm 的榜首。
(3)除了openmvg和colmap ,还有ODM、opensfm、theiasfm、alicevision等这些都差不多在colmap 问世的前后时间。

据上可见,不管是商用的还是开源的都距现在已经有10多年左右的时间了,这10年商用软件早已经稳定且难以突破,国内三维重建方面的厂商更是数不胜数,同时利用这些开源框架去做一些有意义的产品是一件非常大的挑战且需要很长时间的积累与思考。

colmap 目前的现状

近两年AI技术的火热尤其是nerf和gaussian splatting 的出现,又将colmap推了一把,传统mvs的地位仿佛受到了挑战,虽然说nerf/gs的效果是无法胜任传统mvs的精度,但是作为"看看"的条件,是远远足够了。且传统重复纹理、low texture 如水、玻璃这些难以重建的场景也被nerf/gs解决。而目前来看,开源的大多数nerf/gs框架的输入几乎都是colmap的sfm的结果(这里重申一下并不是nerf/gs的输入必须是colmap,也可以是vslam的结果也可以是一些商业软件的结果),使用colmap的原因很简单:开源SOTA且容易安装。

图1. Gaussian splatting结果
除此之外,colmap被偏爱的一个领域是AR方面,AR的核心是空间计算,即VPS(Visual positioning System)。而视觉定位的基石在于定位地图的构建,而目前大多数的公司的AR定位地图的构建都是基于sfm的路线。如以下公司:

(1)韩国maxst

图2. maxst vps pipeline
maxst使用的方案是:Insta360 pro 全景相机 + sfm 建图(全景拆分为若干个pinhole)。

(2)Blue Vision Labs–(Lyft收购)

图3. Blue vision vps pipeline
Blue vision的方案:车载8个fov 70度的相机,建图使用sfm pipeline 并且使用openmvg框架,单次定位返回时间970ms(4G)。

(3)香港neogoma

图4. neogoma vps
neogoma的方案:手机扫描 + web sfm 建图路线。

存在的问题与未来

不管是colmap(sfm)是用来作为nerf/gaussian splating从业从人员的输入源,还是作为AR众包地图的构建,还是用来4D时空标注的辅助,在使用的时候难免会处理大场景数据而不是简单的跑一个小数据来作为demo展示。通常这个时候很多问题就随即出现,人们就开始抱怨:为什么colmap如此慢?它的bottlenecks是什么?为什么会出现drift?为什么车载数据就跑了两帧程序就终止?为什么...?等等让人哭笑不得的问题。如果你不是一个三维死忠爱好者或者只是想要把数据快速处理完毕,那么针对以上的抱怨解决方法不需要你去深究colmap的源码,痛苦的去improved,只需要调参也可以达到你的目的。

对于调参人员来说
(1)为什么colmap如此慢?
如果你的数据是车载数据即forward motion,那么其实local ba 足够,不需要太频繁的global ba(众所周知ba的复杂度是(camera_params+6N+3n)^3,因为每次新加入的图像主要和其周围的地图有关系。所以调整mapper以下参数即可:

i.减少ba_global_max_refinements次数 (5改为1)
ii.增大模型增大到一定比例触发global ba的参数
Mapper.ba_global_images_ratio 、 Mapper.ba_global_points_ratio 、Mapper.ba_global_images_freq
(2)为什么车载数据就跑了两帧程序就终止?
如果你的数据质量不佳或者是车载数据,车载数据是比较困难处理的,因为baseline短且图像两边的特征消失的很快,这个时候采用默认参数去跑,通常会出现初始化完后就终止了程序,这个时候就要调小初始最小三角化角度Mapper.init_min_tri_angle(默认16调成5)。
对于研究源码的人员来说,colmap的improved方面数不胜数,离一个可用的状态需要做很多的工作
(1)关于相机模型的选择,在处理数据的时候,如果相机模型选择简单的,会造成欠拟合,出现blend map之类的现象,如果选择复杂的相机模型就会出现不收敛的情况。
(2)关于匹配方面,colmap中匹配有词汇树匹配方法,但是deep learning的方法已经完全超越BOW,如可以用netvlad、cosplace近几年的方法来替换传统的检索方式。
(3)关于view graph,特征检测和匹配完后,会生成view graph,这时候并不是一股脑就去sfm,view graph 的优化既可以减少冗余,也可以改善整个网形,提升sfm的鲁棒性。

图5.view graph

(4)关于dirft问题,控制点(GCP)/gps约束都可以很好的改善,这个问题已经在三年前colmap课程中讲过,当然在加入外部约束的时候,less is more的约束同时也会增添不少风采,如sift的feature scale 定权可以很明显的降低误差,如图6:

图6.左边是feature sclae和右边没有feature scale

(5)关于colmap 慢的问题,这便是pipeline的问题,采用分组sfm便可解决,整个过程是:view graph 聚类分组–>每个组内 local sfm --> local sfm merge 。做好分组sfm的基本是local sfm 足够的鲁棒。

图7.vismap 11095张鱼眼sfm结果(不同颜色代表分组)

(6)关于colmap 鲁棒性方面,对于forword motion数据,p3p/pnp的效果并不一定好,这个时候采用hybird方式不免是一种明智的做法,流程是:先rotation averaging 然后采用p2p解算pose,具体参见HSfM: Hybrid Structure-from-Motion(崔海楠)的工作。初次之外,也可以在rotation averaging后,利用得到全局rotation 和pnp解算的r进行约束,也就是除了重投影误差,还有图像对之间Rotation的惩罚项。

(7)关于colmap sfm的评判机制/标准,目前所有的论文最终评判sfm的metric都是:track length、重投影误差、3D点个数、每张影响的2D点个数,但是重投影误差是无意义的,即使重投影误差很小,sfm也会出现dirft,因为3D点是源于pose和匹配点,Pose dirft会造成3D点不是"真",那么投影回来误差自然也不会大,所以选择一个合理的metric是值得思考的。

  • 30
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 很高兴能够为您服务。ColmapOpenMVS是两种三维重建技术,Colmap使用稠密图估计技术来提取图像的结构和视差图,而OpenMVS则使用深度估计技术,它使用更复杂的算法来处理图像,可以提高重建的准确度。 ### 回答2: COLMAPOpenMVS是两种常用的三维重建软件工具,它们在图像处理、特征匹配、三维点云生成等方面有着各自的特点。 COLMAP是一个开源的三维重建软件,主要用于结构化重建。它能够使用大量的图像来构建三维场景,并生成高质量的点云和稠密地图。COLMAP使用视觉几何技术,包括特征提取、特征匹配和相机姿态估计等,以及三角测量和非线性优化等算法来进行三维重建COLMAP的特点是准确性高、稠密度好,但对于大规模场景处理速度较慢,对于计算资源有一定要求。 OpenMVS是一个用于多视图密集重建的开源软件。它基于图像处理和计算几何算法,能够从来自不同角度的图像中生成细致的三维模型。OpenMVS的特点是处理速度快、对于大规模数据处理也比较高效。它通过多视图稠密重建、稀疏点云三角化和纹理映射等算法来实现三维重建OpenMVS适用于需要对大规模数据进行快速重建的情况。 综上所述,COLMAPOpenMVS都是常用的三维重建软件工具,它们在特点和适用场景上有些区别。COLMAP适用于对结构化场景进行准确重建,而OpenMVS适用于对大规模数据进行快速重建。选择使用哪种软件工具应根据具体的需求和项目要求来决定。同时,COLMAPOpenMVS都有各自的优点和局限性,可以根据具体情况选择使用或结合使用,以得到更好的三维重建结果。 ### 回答3: ColmapOpenMVS是两种用于三维重建的计算机视觉工具。其中,Colmap是一个用于密集三维重建和相机定位的开源软件包,而OpenMVS是一个用于稠密三维重建的工具。 Colmap主要用于从一组相片生成稀疏重建结果,并且可以使用这些结果进行稠密三维重建。它使用SIFT或者其他特征提取算法来提取图像中的特征点,并通过这些特征点来计算相机的姿势。然后,Colmap通过对特征点进行三角化,重建相机姿势和特征点的3D位置来生成稀疏点云。接下来,可以使用这些点云来生成稠密的三维重建结果。Colmap具有较高的精度和鲁棒性,适用于从大规模图像集合中进行三维重建OpenMVS是一个专门用于稠密三维重建的工具。它接受稀疏点云和图像作为输入,然后通过将图像投影到点云上来生成稠密点云。OpenMVS采用了特定的密集重建算法,可以精确地重建物体的表面形状和纹理信息。此外,OpenMVS还提供了更多的后处理和可视化工具,以优化和改进重建结果。 ColmapOpenMVS具有各自的特点和优势。Colmap对于从大型图像集合中进行稀疏重建非常强大,而OpenMVS则更专注于产生高质量的稠密重建结果。两者可以搭配使用,通过先用Colmap生成稀疏点云,再输入给OpenMVS生成稠密点云,从而实现更全面和精细的三维重建
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值