猿创征文|三维重建领域的开发者工具箱

  下面推荐一些自己经常使用的,在自己所在领域内很有帮助的一些工具或者软件(排序不分先后,仅大致按照类别进行分类),希望能对大家有所帮助 ~
  



  

1. CloudCompare

1.1 简介

  CloudCompare是一款集三维点云(Point Cloud)数据查看、编辑、处理为一体的三维点云数据配套开源软件,该软件支持多种三维点云数据格式。其所功能包括点云可视化、配准、分割、合并、抽稀、旋转、法向量计算、泊松构网、滤波等功能。除了自带丰富强大的点云数据处理功能之外,CloudCompare(为了简化描述,后续简称cc)还可以方便地进行拓展,比如插件的编写,甚至是下载其源代码直接进行修改等等。
在这里插入图片描述

1.2 相关链接

  cc的相关链接如下:

1.3 使用评价

  个人认为,cc在点云处理领域是具有举足轻重的地位的,应该是无人不知的。它的优势体现在如下几个方面:

  • 开源免费,可扩展性强,其源代码可以直接下载获得。
  • 轻量且功能丰富。cc的打开速度很快,基本不需要等待,功能强大,对点云的显示效果很好,同时也支持超大点云的导入和处理。我目前最多使用它处理过几千万点的点云数据。当然,其性能也和电脑本身性能息息相关。
  • 支持GPU。这一点对于点云数据的渲染和处理加速都有很重要的意义。
  • 界面简单友好。界面清爽,有汉化版,操作便捷。
  • 持续更新。cc已经有了好多年的历史了,时至今日也还在不断更新和优化。

  从我接触点云数据到现在,已经有了两三年的使用经验了。从一开始只是使用cc进行一下点云数据的可视化渲染,使用它里面的一些裁剪、旋转平移、配准、抽稀等已有工具,到后来直接下载它的源码,自己根据需求进行修改和编译,编写插件等等。关于cc的使用,我也写了有一个专栏,链接。大家如果有遇到什么问题的话,可以直接来这里找找~
  


  

2. PCL (Point Cloud Library)

2.1 简介

  PCL(Point Cloud Library)是在吸收了前人点云相关研究基础上建立起来的大型跨平台开源C++编程库,它实现了大量点云相关的通用算法和高效数据结构,涉及到点云获取、滤波、分割、配准、检索、特征提取、识别、追踪、曲面重建、可视化等。支持多种操作系统平台,可在Windows、Linux、Android、Mac OS X、部分嵌入式实时系统上运行。如果说OpenCV是2D信息获取与处理的结晶,那么PCL就在3D信息获取与处理上具有同等地位,PCL是BSD授权方式,可以免费进行商业和学术应用。
  PCL利用OpenMP、GPU、CUDA等先进高性能计算技术,通过并行化提高程序实时性。K近邻搜索操作的构架是基于FLANN (Fast Library for Approximate Nearest Neighbors)所实现的,速度也是技术中最快的。PCL中的所有模块和算法都是通过Boost共享指针来传送数据的,因而避免了多次复制系统中已存在的数据的需要。
在这里插入图片描述

2.2 相关链接

2.3 使用评价

  PCL也是我之前使用的比较多的一个库。与cc一样,PCL库也是点云处理领域的一个必备工具。不过它不是一个软件,而是一个C++编程库,里面实现了很多点云处理的相关算法,比如KD树的构建、法向量计算,而对于点云配准算法ICP,其实现的算法就包括一般ICP、GICP、TrimmedICP等等,非常丰富。而且这些算法的接口都很友好,使用起来非常方便,比如KD树的构建,一两行代码即可搞定,极大地提升了点云数据处理程序的编写效率。
  


  

3. MeshLab

3.1 简介

  MeshLab是一个开源、可移植和可扩展的三维几何处理系统,主要用于交互处理和非结构化编辑三维三角形网格。该系统发布于2005年年底,旨在提供一整套三维扫描、 编辑、 清洗、 拼合、 检查、 呈现和转换网格数据的工具。
在这里插入图片描述

3.2 相关链接

3.3 使用评价

  MeshLab,顾名思义,是专门用于处理三维数据类型中的mesh数据的。它可以对mesh数据进行很好的可视化和交互。相比较而言,cc也可以用于mesh数据的可视化和交互,但是MeshLab会更专业一些,而且它也是开源免费的。所以我们通常会默认,使用cc来处理点云数据,使用MeshLab来处理mesh数据。
  


  

4. Colmap

4.1 简介

  Colmap是一个通用的运动恢复结构(Structure from Motion, SfM)和多视图立体(Multi-View Stereo, MVS)管道,具有图形和命令行界面。它为有序和无序图像集合的重建提供了广泛的功能。该软件根据新的BSD许可证获得许可。该库由2016年CVPR上的一篇论文中提出,名为:Structure-from-motion revisited。我也曾写过一篇该论文的阅读笔记,感兴趣的话可以看看。截至目前,该库仍然是传统增量式SfM中的SOTA方法。由于其出色的结果和开源且持续维护,它在计算机视觉领域得到了广泛的应用。可以这么说,如果某篇论文需要使用到SfM方法去获取稀疏重建结果,那么该论文十有八九用的就是Colmap。截至目前,该论文的被引量已将近3000次。
在这里插入图片描述

4.2 相关链接

4.3 使用评价

  关于Colmap,我对它的使用算是比较深入了,它是和我的研究内容最相关的一个库。从一开始进入SfM这个领域,我自己动手复现了完整的增量式SfM,到后来使用Colmap进行一些稀疏重建的任务,对它的输出结果进行转换和应用,以及将自己获得的一些结果写成Colmap格式并导入其中进行可视化等等。对此,我也有写了一个关于Colmap的专栏,链接。而对于SfM这个方向,我也有一个专栏,链接。如果大家有遇到一些相关的问题,也许可以来这里找找,说不定有你想要的答案。
  Colmap的界面非常清爽简洁,或者你也可以说是很朴素。实在的界面下,也是实在的功能。它提供了很完整且功能很强大的增量式重建pipeline,你既可以在可视化界面下进行UI交互操作,也可以通过命令行使用命令来进行重建。而且,它的功能还远不止稀疏重建,它还能进行稠密重建,输出密集点云和深度图等等,是一个小而精的三维重建利器。同时,它还提供了一些非常好用的数据转换脚本,链接,包括matlab、python、shell三种语言,可以帮助你快速认识其数据结构,并和你的实际需求进行转换。
  


  

5. PhotoScan / Metashape

5.1 简介

  PhotoScan(现在改名叫Metashape了)是一款基于影像自动生成高质量三维模型的优秀软件,这对于3D建模需求来说实在是一把利器。PhotoScan无需设置初始值,无须相机检校,它根据最新的多视图三维重建技术,可对任意照片进行处理,无需控制点,而通过控制点则可以生成真实坐标的三维模型。照片的拍摄位置是任意的,无论是航摄照片还是高分辨率数码相机拍摄的影像都可以使用。其基本功能与Colmap类似,重建的效果也优于Colmap,但是它是一个商业软件。
在这里插入图片描述

5.2 相关链接

5.3 使用评价

  作为三维重建领域的一个优秀商业软件,PhotoScan可以实现高质量的图像重建。它可以方便地对相机进行分组操作,比如我要对一个使用五镜头无人机倾斜摄影测量图像进行稀疏重建,相比于Colmap,PhotoScan的重建结果更为完整(对于大场景,Colmap容易丢失掉很多相机)。因此,若想要更好的重建结果,可以考虑使用PhotoScan。
  


  

6. OpenMVG

6.1 简介

  OpenMVG是一款开源的SfM软件,它在某些方面要优于Bundler,可以利用多张任意拍摄的照片,重建场景的三维模型。其目标是,通过开发C++框架,从图像/摄影测量中扩展对3D重建的认识。
在这里插入图片描述

6.2 相关链接

6.3 使用评价

  OpenMVG也是一个开源三维重建库,与上面介绍的Colmap、PhotoScan功能类似。与Colmap相比,它不仅实现了增量式SfM Pipeline,同时还实现了全局式的SfM Pipeline。有关增量式和全局式SfM的介绍,可以参考我的这篇博客:增量式SfM详细流程介绍及实现方法。也就是说,它的功能更多,但是它没有UI界面,只能通过调用它提供的方法,去编写和完成自己的SfM任务。后续,我的工作中将会需要用到全局式SfM中的多个场景块的融合,也将使用OpenMVG进行进一步的研究。
  


  

7. ArcGIS

7.1 简介

  ArcGIS作为一个可伸缩的平台,无论是在桌面,在服务器,在野外还是通过Web,为个人用户也为群体用户提供GIS的功能。ArcObjects包含了许多的可编程组件,从细粒度的对象(例如单个的几何对象)到粗粒度的对象(例如与现有ArcMap文档交互的地图对象),涉及面极广,这些对象为开发者集成了全面的GIS功能。ArcGIS是一个总称,其包含有多个分工不同的产品,包括ArcMap、ArcScene、ArcGlobe、ArcCatalogue等软件。
在这里插入图片描述

7.2 相关链接

7.3 使用评价

  ArcGIS的体量很大,当然其功能也非常强大,是目前最顶级的GIS工具之一。还记得我本科那会,我们有不少专业课都是需要用到ArcGIS的,甚至还有专门讲解ArcGIS的课程。它可以实现几乎所有的GIS相关任务,比如路径规划、缓冲区分析、遮挡分析、应急模拟等等。其最核心的软件是ArcMap,我们可以使用它进行一些数据的可视化、修改、分析等工作。而使用ArcScene,我们则可以实现三维的地形可视化和交互操作。此外,ArcEngine则给我们提供了扩展和修改ArcGIS的接口,基于此,我们可以很方便地进行功能扩展、个性化功能定制。
  


  

8. Surfer

8.1 简介

  Surfer软件是美国Golden Software公司编制的一款以画三维图(等高线、image map、3d surface)的软件。该软件简单易学,其自带的帮助(help)菜单对如何使用该软件解释详细,其中的教程(tutorial)也清晰介绍了Surfer的简单应用。
  Surfer 具有的强大插值功能和绘制图件能力,使它成为用来处理XYZ数据,是地质工作者常用的专业成图软件。可以轻松制作基面图、数据点位图、分类数据图、等值线图、线框图、地形地貌图、趋势图、矢量图以及三维表面图等;提供11种数据网格化方法,包含几乎所有流行的数据统计计算方法;提供各种流行图形图像文件格式的输入输出接口以及各大GIS软件文件格式的输入输出接口,大大方便了文件和数据的交流和交换;提供新版的脚本编辑引擎,自动化功能得到极大加强。
在这里插入图片描述

8.2 相关链接

8.3 使用评价

  正如简介中所述,Surfer主要的应用领域是GIS中的三维图绘制、显示、编辑等,算是一个专业性比较强的软件了。我之前主要是用它来进行DEM数据的插值。提到插值,我们应该可以很容易想到最近邻插值、双线性插值、双三次插值等等。其实这些插值方法还只是比较普通常见的,而在地理信息领域,我们至少还应该知道克里金插值,这是一种在地形图插值中效果非常好的插值方法,而这一方法在一些开源库中我们是没法找到的,也许是因为它太复杂了。但是Surfer里面则有该方法的实现,我之前通过实践证明,在对地形图进行插值的时候,该插值方法确实优于一些通用插值方法。除此之外,Surfer里面还提供了很多其他的插值方法实现,有十余种。所以如果你也有一些地理信息数据处理的需求,不妨考虑一下Surfer,它也许会是你的一个得力助手。
  


  

9. QGIS

9.1 简介

  QGIS是一个用户界面友好的桌面地理信息系统,可运行在Linux、Unix、Mac OSX和Windows等平台之上。QGIS是基于Qt,使用C++开发的一个用户界面友好、跨平台的开源版桌面地理信息系统。QGIS软件的主要特点有:

  1. 支持多种GIS数据文件格式。通过GDAL/OGR扩展可以支持多达几十种数据格式.
  2. 支持PostGIS数据库。
  3. 支持从WMS,WFS服务器中获取数据
  4. 集成了Grass的部分功能。
  5. 支持对GIS数据的基本操作,如属性的编辑修改等。
  6. 支持创建地图。
  7. 通过插件的形式支持功能的扩展

在这里插入图片描述

9.2 相关链接

9.3 使用评价

  QGIS也是一个功能非常丰富的地理信息软件,与ArcGIS相比,其是开源的。因此,你可以轻松将其下载并安装使用。它也提供了丰富详细的操作手册、简洁友好的UI,可以让你快速上手。不过我使用它最多的功能是图像的查看。因为对于一张图像,使用默认的图像查看器是没法准确获取某个像素在图像中的坐标,以及该像素的RGB三通道数值信息的。而使用QGIS,我们就可以方便地完成这个任务,这对于一些图像处理任务是至关重要的。
  


  

10. Visual Studio / VS Code

10.1 简介

  上述介绍的软件可能都有点儿专业性,最后就也介绍一种开发者绕不开的通用的工具——IDE(Integrated Development Environment,集成开发环境)吧。Microsoft Visual Studio(简称VS),相信所有开发者都不会陌生。它是美国微软公司的开发工具包系列产品。VS是一个基本完整的开发工具集,它包括了整个软件生命周期中所需要的大部分工具,如UML工具、代码管控工具、集成开发环境(IDE)等等。所写的目标代码适用于微软支持的所有平台,包括Microsoft Windows、Windows Mobile、Windows CE、.NET Framework、.NET Compact Framework和Microsoft Silverlight 及Windows Phone。Visual Studio是最流行的Windows平台应用程序的集成开发环境。最新版本为 Visual Studio 2022版本,基于.NET Framework 4.8 。
  VS虽然功能非常强大,但是它只能在Windows/Mac系统上运行。对此,微软也推出了跨平台的,更加轻量级的IDE——VS Code。相比于VS,它少了很多功能,但是基本的开发管理工具还是齐全的,更轻量且可以在Linux等其他系统上运行,也是一个非常受欢迎的免费IDE。
  一般的使用方法是,在Windows/Mac系统上进行C++开发时使用Visual Studio,而在Linux上,无论是C++开发,还是python深度学习任务,都使用VS Code(当然在Linux系统上你也用不了Visual Studio)。
在这里插入图片描述

10.2 相关链接

10.3 使用评价

  在琳琅满目的开发者IDE中,相信VS说第二,没人敢说第一了。我从接触计算机编程开始,就在使用VS了。正如上面所说的,一般在Windows/Mac系统上,我都会首选VS作为IDE。因为它的功能实在是太强大了,它提供了非常多的开发辅助功能,可以大大减轻我们的开发负担。当然,它也是有缺陷的,最明显的就比如,它的体量太大了,要占用系统几十G内存,同时在打开过程中的加载也会需要一点儿等待时间。此外,我们还需要明确的一点是,在Windows系统上进行C++开发是一件比较让人头疼的事,因为经常会遇到各种环境问题和各种Bug。对此,我在之前开发的过程中,有写了一个专栏,链接,记录了在VS使用过程中遇到的一些问题。而后来,我开始接触深度学习,需要在Linux系统下进行python开发。这时,VS Code则成了一个非常不错的选择。它不仅可以在Linux系统上使用,而且体量也大大减小,可以算是一款轻量级的IDE了。关于VS Code,我有一个小专栏,链接
  总结一下就是,Windows/Mac系统上选择VS,Linux系统上选择VS Code就对了。

猜你喜欢

转载自blog.csdn.net/weixin_44120025/article/details/127619456